use crate::structures::{get_test_data, FunctionalityTestsBuildup}; use serial_test::parallel; use solrstice::Error; use solrstice::SelectQuery; use solrstice::UpdateQuery; use solrstice::{GroupFormatting, GroupingComponent}; use std::collections::HashMap; #[tokio::test] #[parallel] async fn group_fields() -> Result<(), Error> { let config = FunctionalityTestsBuildup::build_up("GroupBasic") .await .unwrap(); let update = UpdateQuery::new(); update .execute(&config.context, &config.collection_name, &get_test_data()) .await?; let response = SelectQuery::new() .fq(["age:[* TO *]"]) .grouping(&GroupingComponent::new().fields(["age"]).limit(10)) .execute(&config.context, &config.collection_name) .await?; let groups = response .get_groups() .ok_or(Error::Unknown("No groups found".to_string()))?; let age_group = groups.get("age").unwrap(); let correct_data: HashMap = [(20, 2), (40, 2), (60, 2)].iter().cloned().collect(); for group in age_group.get_field_result().unwrap() { assert_eq!( *correct_data .get(&group.get_group_value::().unwrap()) .unwrap(), group.get_doc_list().get_num_found() ) } let _ = config.tear_down().await; Ok(()) } #[tokio::test] #[parallel] async fn group_queries() -> Result<(), Error> { let config = FunctionalityTestsBuildup::build_up("GroupQuery") .await .unwrap(); let update = UpdateQuery::new(); update .execute(&config.context, &config.collection_name, &get_test_data()) .await?; let response = SelectQuery::new() .grouping( &GroupingComponent::new() .queries(["age:[0 TO 59]", "age:[60 TO *]"]) .limit(10), ) .execute(&config.context, &config.collection_name) .await?; let groups = response .get_groups() .ok_or(Error::Unknown("Could not get groups".to_string()))?; let first = groups .get("age:[0 TO 59]") .unwrap() .get_query_result() .unwrap(); let second = groups .get("age:[60 TO *]") .unwrap() .get_query_result() .unwrap(); assert_eq!(first.get_num_found(), 4); assert_eq!(second.get_num_found(), 2); let _ = config.tear_down().await; Ok(()) } #[tokio::test] #[parallel] async fn group_n_groups() -> Result<(), Error> { let config = FunctionalityTestsBuildup::build_up("GroupNGroups") .await .unwrap(); let update = UpdateQuery::new(); update .execute(&config.context, &config.collection_name, &get_test_data()) .await?; let response = SelectQuery::new() .fq(["age:[* TO *]"]) .grouping( &GroupingComponent::new() .fields(["age"]) .limit(10) .n_groups(true), ) .execute(&config.context, &config.collection_name) .await?; let groups = response .get_groups() .ok_or(Error::Unknown("Could not get groups".to_string()))?; let age_group = groups.get("age").unwrap(); let n_groups = age_group .get_n_groups() .ok_or(Error::Unknown("No n_groups".to_string()))?; assert_eq!(n_groups, 3); let _ = config.tear_down().await; Ok(()) } #[tokio::test] #[parallel] async fn group_main() -> Result<(), Error> { let config = FunctionalityTestsBuildup::build_up("GroupMain") .await .unwrap(); let update = UpdateQuery::new(); update .execute(&config.context, &config.collection_name, &get_test_data()) .await?; let result = SelectQuery::new() .grouping( &GroupingComponent::new() .queries(["age:[0 TO 59]"]) .limit(10) .main(true), ) .execute(&config.context, &config.collection_name) .await?; let response = result.get_docs_response().unwrap(); let main_contents = response.get_docs::().unwrap(); assert_eq!(response.get_num_found(), 4); assert_eq!(main_contents.len(), 4); let _ = config.tear_down().await; Ok(()) } #[tokio::test] #[parallel] async fn group_main_false() -> Result<(), Error> { let config = FunctionalityTestsBuildup::build_up("GroupMainFalse") .await .unwrap(); let update = UpdateQuery::new(); update .execute(&config.context, &config.collection_name, &get_test_data()) .await?; let result = SelectQuery::new() .grouping( &GroupingComponent::new() .queries(["age:[0 TO 59]"]) .limit(10) .main(false), ) .execute(&config.context, &config.collection_name) .await?; let response = result.get_docs_response(); assert!(response.is_none()); let _ = config.tear_down().await; Ok(()) } #[tokio::test] #[parallel] async fn group_simple() -> Result<(), Error> { let config = FunctionalityTestsBuildup::build_up("GroupSimple") .await .unwrap(); let update = UpdateQuery::new(); update .execute(&config.context, &config.collection_name, &get_test_data()) .await?; let result = SelectQuery::new() .grouping( &GroupingComponent::new() .fields(["age"]) .limit(10) .format(GroupFormatting::Simple), ) .execute(&config.context, &config.collection_name) .await?; let response = result.get_groups().ok_or("No groups found")?; let group = response.get("age").ok_or("age group not found")?; let group_contents = group.get_simple_result().ok_or("No group contents found")?; assert_eq!(group_contents.get_num_found(), 8); let _ = config.tear_down().await; Ok(()) }