use crate::structures::{get_test_data, FunctionalityTestsBuildup}; use serial_test::parallel; use solrstice::Error; use solrstice::SelectQuery; use solrstice::UpdateQuery; use solrstice::{FacetSetComponent, FieldFacetComponent, FieldFacetEntry, PivotFacetComponent}; #[tokio::test] #[parallel] pub async fn test_facet_pivot_works() -> Result<(), Error> { let config = FunctionalityTestsBuildup::build_up("FacetPivot") .await .unwrap(); let update = UpdateQuery::new(); update .execute(&config.context, &config.collection_name, &get_test_data()) .await?; let query = SelectQuery::new() .facet_set(&FacetSetComponent::new().pivots(&PivotFacetComponent::new(["interests,age"]))); let response = config .async_client .select(&query, &config.collection_name) .await?; let facets = response.get_facet_set().ok_or("No facets")?; let pivot = facets.get_pivots(); let interests_age = pivot.get("interests,age").ok_or("No interests,age pivot")?; assert_eq!(interests_age.len(), 3); let cars_pivot = interests_age .iter() .find(|p| match p.get_value::() { Ok(val) => val.as_str() == "cars", Err(_) => false, }) .ok_or("No cars pivot")?; assert_eq!(cars_pivot.get_count(), 1); let age_pivot = cars_pivot .get_pivots() .first() .ok_or("No age pivot in cars")?; assert_eq!(age_pivot.get_value::()?, 20); let _ = config.tear_down().await; Ok(()) } #[tokio::test] #[parallel] pub async fn test_facet_query_works() -> Result<(), Error> { let config = FunctionalityTestsBuildup::build_up("FacetQuery") .await .unwrap(); let update = UpdateQuery::new(); update .execute(&config.context, &config.collection_name, &get_test_data()) .await?; let query = SelectQuery::new().facet_set(&FacetSetComponent::new().queries(["age:[0 TO 59]"])); let response = config .async_client .select(&query, &config.collection_name) .await?; let facets = response.get_facet_set().ok_or("No facets")?; let queries = facets.get_queries(); let query = queries.get("age:[0 TO 59]").ok_or("No age query")?; assert_eq!(*query, 4); let _ = config.tear_down().await; Ok(()) } #[tokio::test] #[parallel] pub async fn test_facet_field_works() -> Result<(), Error> { let config = FunctionalityTestsBuildup::build_up("FacetField") .await .unwrap(); let update = UpdateQuery::new(); update .execute(&config.context, &config.collection_name, &get_test_data()) .await?; let query = SelectQuery::new().facet_set( FacetSetComponent::new().fields(FieldFacetComponent::new([FieldFacetEntry::new("age")])), ); let response = config .async_client .select(&query, &config.collection_name) .await?; let facets = response.get_facet_set().ok_or("No facets")?; let fields = facets.get_fields(); let age = fields.get("age").ok_or("No age field")?; assert_eq!(age.len(), 3); let _ = config.tear_down().await; Ok(()) } #[tokio::test] #[parallel] pub async fn test_facet_field_exclude_works() -> Result<(), Error> { let config = FunctionalityTestsBuildup::build_up("FacetFieldExclude") .await .unwrap(); let update = UpdateQuery::new(); update .execute(&config.context, &config.collection_name, &get_test_data()) .await?; let query = SelectQuery::new().facet_set( FacetSetComponent::new().fields( FieldFacetComponent::new([FieldFacetEntry::new("interests")]) .exclude_terms("cars,partying"), ), ); let response = config .async_client .select(&query, &config.collection_name) .await?; let facets = response.get_facet_set().ok_or("No facets")?; let fields = facets.get_fields(); let age = fields.get("interests").ok_or("No interests field")?; assert_eq!(age.len(), 1); let _ = config.tear_down().await; Ok(()) } #[tokio::test] #[parallel] pub async fn test_facet_field_exclude_works_missing() -> Result<(), Error> { let config = FunctionalityTestsBuildup::build_up("FacetFieldMissing") .await .unwrap(); let update = UpdateQuery::new(); update .execute(&config.context, &config.collection_name, &get_test_data()) .await?; let query = SelectQuery::new().facet_set(FacetSetComponent::new().fields(FieldFacetComponent::new([ FieldFacetEntry::new("interests").missing(true), ]))); let response = config .async_client .select(&query, &config.collection_name) .await?; let facets = response.get_facet_set().ok_or("No facets")?; let fields = facets.get_fields(); let interests = fields.get("interests").ok_or("No interests field")?; assert_eq!(interests.len(), 4); let _ = config.tear_down().await; Ok(()) }