From d8ea5054deb027ca8fd98657390a943d288b78b1 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sun, 30 Jun 2024 20:45:10 -0400 Subject: [PATCH] tests --- .../src/searches/search_media_files.rs | 150 ++++++++++++++---- 1 file changed, 123 insertions(+), 27 deletions(-) diff --git a/crates/lib/elasticsearch_schema/src/searches/search_media_files.rs b/crates/lib/elasticsearch_schema/src/searches/search_media_files.rs index a9e67bab43..6c8f86308a 100644 --- a/crates/lib/elasticsearch_schema/src/searches/search_media_files.rs +++ b/crates/lib/elasticsearch_schema/src/searches/search_media_files.rs @@ -1,6 +1,8 @@ use std::collections::HashSet; + use once_cell::sync::Lazy; use serde_json::{json, Value}; + use enums::by_table::media_files::media_file_class::MediaFileClass; use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; use enums::by_table::media_files::media_file_type::MediaFileType; @@ -15,14 +17,17 @@ static JSON_QUERY : Lazy = Lazy::new(|| { json }); -pub struct SearchArgs { +pub struct SearchArgs<'a> { + pub search_term: &'a str, pub maybe_media_classes: Option>, pub maybe_media_types: Option>, pub maybe_engine_categories: Option>, } pub fn search_media_files(args: SearchArgs) -> AnyhowResult<()> { + let query = build_query(args)?; + Ok(()) } fn build_query(args: SearchArgs) -> AnyhowResult { @@ -45,11 +50,11 @@ fn build_query(args: SearchArgs) -> AnyhowResult { predicates.push(engine_categories_predicate(engine_categories)); } + println!("Predicates: {:?}", predicates); + Some(json!(predicates)) })?; - println!("QUERY: {}", query); - Ok(query) } @@ -62,7 +67,7 @@ fn must_be_not_deleted() -> Value { } fn media_classes_predicate(media_classes: &HashSet) -> Value { - let predicates : Vec = media_classes.iter() + should_predicates(media_classes.iter() .map(|media_type| { json!({ "term": { @@ -70,17 +75,11 @@ fn media_classes_predicate(media_classes: &HashSet) -> Value { } }) }) - .collect(); - - json!({ - "bool": { - "should": predicates, - } - }) + .collect()) } fn media_types_predicate(media_types: &HashSet) -> Value { - let predicates : Vec = media_types.iter() + should_predicates(media_types.iter() .map(|media_type| { json!({ "term": { @@ -88,17 +87,11 @@ fn media_types_predicate(media_types: &HashSet) -> Value { } }) }) - .collect(); - - json!({ - "bool": { - "should": predicates, - } - }) + .collect()) } fn engine_categories_predicate(engine_categories: &HashSet) -> Value { - let predicates : Vec = engine_categories.iter() + should_predicates(engine_categories.iter() .map(|engine_category| { json!({ "term": { @@ -106,8 +99,11 @@ fn engine_categories_predicate(engine_categories: &HashSet) -> Value { json!({ "bool": { "should": predicates, @@ -117,16 +113,116 @@ fn engine_categories_predicate(engine_categories: &HashSet(search: &'a Value, path: &str) -> Vec<&'a Value> { + jsonpath_lib::select(search, path).unwrap() + } + + fn select_str_values<'a>(search: &'a Value, path: &str) -> Vec<&'a str> { + select(search, path).into_iter() + .map(|value| { + match value { + Value::String(inner) => inner.as_str(), + _ => panic!("Expected string"), + } + }) + .collect() + } +}