From 6c8ee13d992f3d09df0d4110e48424b9802de633 Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Tue, 26 Aug 2025 08:06:22 -0400 Subject: [PATCH] Test refactor. --- src/message.rs | 123 ++++++++++++++++++++++++------------------------- 1 file changed, 60 insertions(+), 63 deletions(-) diff --git a/src/message.rs b/src/message.rs index f4f222f..11b0518 100644 --- a/src/message.rs +++ b/src/message.rs @@ -32,6 +32,7 @@ enum Action { Query, Reply, Show, + Update, } impl From for Action { @@ -43,6 +44,7 @@ impl From for Action { MsgAction::Query(_) => Action::Query, MsgAction::Reply(_) => Action::Reply, MsgAction::Show => Action::Show, + MsgAction::Update(_) => Action::Update, } } } @@ -95,6 +97,7 @@ enum MsgAction { Reply(Reply), Show, // Delete + Update(Update), } impl From for MsgAction { @@ -127,6 +130,12 @@ impl From for MsgAction { } } +impl From for MsgAction { + fn from(value: Update) -> Self { + MsgAction::Update(value) + } +} + #[cfg(test)] mod msgactions { use super::*; @@ -1513,8 +1522,6 @@ mod replies { } } -type DocumentMap = HashMap; - #[derive(Clone, Debug)] struct Document { data: HashMap, @@ -1573,6 +1580,21 @@ mod documents { } } +#[derive(Clone, Debug)] +struct Update { + query: Query, + values: Document, +} + +impl Update { + fn new() -> Self { + Self { + query: Query::new(), + values: Document::new(), + } + } +} + struct DocumentFile { docdef: DocDef, docs: Vec, @@ -1715,14 +1737,14 @@ mod document_files { .to_vec() } - fn create_docdef(field_types: Vec) -> DocDef { + fn create_docdef(field_types: Vec) -> (DocDef, String) { let mut output = DocDef::new(); let mut count = 0; for field_type in field_types.iter() { output.add_field(format!("field{}", count), field_type.clone()); count += 1; } - output + (output, format!("name-{}", Uuid::new_v4())) } fn test_doc( @@ -1924,13 +1946,9 @@ mod document_files { #[test] fn errors_on_wrong_field_name() { - let doc_name = "mismatch"; + let (docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec()); let field_name = Uuid::new_v4().to_string(); - let (queue, rx) = test_doc( - doc_name, - create_docdef([FieldType::Uuid].to_vec()), - standard_routes(), - ); + let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); let mut addition = Addition::new(); addition.add_field(field_name.clone(), Uuid::new_v4()); let msg = Message::new(doc_name, addition); @@ -1947,12 +1965,8 @@ mod document_files { #[test] fn errors_on_wrong_field_type() { - let doc_name = "mismatch"; - let (queue, rx) = test_doc( - doc_name, - create_docdef([FieldType::Uuid].to_vec()), - standard_routes(), - ); + let (docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec()); + let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); let mut addition = Addition::new(); addition.add_field("field0".to_string(), "astring"); let msg = Message::new(doc_name, addition); @@ -1975,12 +1989,8 @@ mod document_files { #[test] fn errors_on_missing_fields() { - let doc_name = "missing"; - let (queue, rx) = test_doc( - doc_name, - create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec()), - standard_routes(), - ); + let (docdef, doc_name) = create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec()); + let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); let mut addition = Addition::new(); addition.add_field("field0".to_string(), Uuid::nil()); let msg = Message::new(doc_name, addition); @@ -1997,33 +2007,29 @@ mod document_files { #[test] fn does_query_return_related_entries() { - let doc_name = "query"; - let (queue, rx) = test_doc( - doc_name, - create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec()), - standard_routes(), - ); + let (docdef, doc_name) = create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec()); + let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); let field0 = Uuid::new_v4(); let field1 = Uuid::new_v4(); for _ in 0..3 { let mut addition = Addition::new(); addition.add_field("field0".to_string(), Uuid::new_v4()); addition.add_field("field1".to_string(), Uuid::new_v4()); - let msg = Message::new(doc_name, addition); + let msg = Message::new(doc_name.clone(), addition); queue.send(msg).unwrap(); rx.recv_timeout(TIMEOUT).unwrap(); } let mut addition = Addition::new(); addition.add_field("field0".to_string(), field0.clone()); addition.add_field("field1".to_string(), field1.clone()); - let msg = Message::new(doc_name, addition); + let msg = Message::new(doc_name.clone(), addition); queue.send(msg).unwrap(); rx.recv_timeout(TIMEOUT).unwrap(); for _ in 0..3 { let mut addition = Addition::new(); addition.add_field("field0".to_string(), Uuid::new_v4()); addition.add_field("field1".to_string(), Uuid::new_v4()); - let msg = Message::new(doc_name, addition); + let msg = Message::new(doc_name.clone(), addition); queue.send(msg).unwrap(); rx.recv_timeout(TIMEOUT).unwrap(); } @@ -2049,25 +2055,21 @@ mod document_files { #[test] fn gets_all_documents_in_query() { - let doc_name = "multiple"; + let (docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec()); let count = 4; let input = Uuid::new_v4(); - let (queue, rx) = test_doc( - doc_name, - create_docdef([FieldType::Uuid].to_vec()), - standard_routes(), - ); + let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); for _ in 0..3 { let mut addition = Addition::new(); addition.add_field("field0".to_string(), Uuid::new_v4()); - let msg = Message::new(doc_name, addition); + let msg = Message::new(doc_name.clone(), addition); queue.send(msg).unwrap(); rx.recv_timeout(TIMEOUT).unwrap(); } for _ in 0..count { let mut addition = Addition::new(); addition.add_field("field0".to_string(), input.clone()); - let msg = Message::new(doc_name, addition); + let msg = Message::new(doc_name.clone(), addition); queue.send(msg).unwrap(); rx.recv_timeout(TIMEOUT).unwrap(); } @@ -2091,12 +2093,8 @@ mod document_files { #[test] fn query_should_work_with_multiple_fields() { - let doc_name = "onlyone"; - let (queue, rx) = test_doc( - doc_name, - create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec()), - standard_routes(), - ); + let (docdef, doc_name) = create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec()); + let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); let field0 = Uuid::new_v4(); let field1 = Uuid::new_v4(); let input = [ @@ -2110,7 +2108,7 @@ mod document_files { let mut addition = Addition::new(); addition.add_field("field0".to_string(), combo[0].clone()); addition.add_field("field1".to_string(), combo[1].clone()); - let msg = Message::new(doc_name, addition); + let msg = Message::new(doc_name.clone(), addition); queue.send(msg).unwrap(); rx.recv_timeout(TIMEOUT).unwrap(); } @@ -2137,9 +2135,9 @@ mod document_files { #[test] fn errors_on_bad_field_name() { - let doc_name = "testing"; + let (docdef, doc_name) = create_docdef(Vec::new()); let field_name = "wrong"; - let (queue, rx) = test_doc(doc_name, create_docdef(Vec::new()), standard_routes()); + let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); let mut query = Query::new(); query.add_specifier(field_name.to_string(), Operand::Equal, Uuid::new_v4()); let msg = Message::new(doc_name, query); @@ -2157,12 +2155,8 @@ mod document_files { #[test] fn errors_on_bad_field_type() { - let doc_name = "testing"; - let (queue, rx) = test_doc( - doc_name, - create_docdef([FieldType::Uuid].to_vec()), - standard_routes(), - ); + let (docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec()); + let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); let mut query = Query::new(); query.add_specifier("field0".to_string(), Operand::Equal, "wrong"); let msg = Message::new(doc_name, query); @@ -2183,10 +2177,9 @@ mod document_files { #[test] fn can_use_default_values() { - let doc_name = "default"; - let mut docdef = create_docdef([FieldType::StaticString].to_vec()); + let (mut docdef, doc_name) = create_docdef([FieldType::StaticString].to_vec()); docdef.use_default_function("field0"); - let (queue, rx) = test_doc(doc_name, docdef, standard_routes()); + let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); let new_doc = Addition::new(); let msg = Message::new(doc_name, new_doc); queue.send(msg).unwrap(); @@ -2206,11 +2199,10 @@ mod document_files { #[test] fn can_a_default_value_be_set() { - let doc_name = "value"; - let mut docdef = create_docdef([FieldType::Uuid].to_vec()); + let (mut docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec()); let input = Uuid::nil(); docdef.set_default_value("field0", input.clone()); - let (queue, rx) = test_doc(doc_name, docdef, standard_routes()); + let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); let new_doc = Addition::new(); let msg = Message::new(doc_name, new_doc); queue.send(msg).unwrap(); @@ -2230,10 +2222,9 @@ mod document_files { #[test] fn can_default_values_be_overridden() { - let doc_name = "override"; - let mut docdef = create_docdef([FieldType::Uuid].to_vec()); + let (mut docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec()); docdef.use_default_function("field0"); - let (queue, rx) = test_doc(doc_name, docdef, standard_routes()); + let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); let mut new_doc = Addition::new(); new_doc.add_field("field0".to_string(), Uuid::nil()); let msg = Message::new(doc_name, new_doc); @@ -2251,6 +2242,12 @@ mod document_files { _ => unreachable!("got {:?}: should have gotten a reply", action), } } + + #[test] + fn bad_update_query_results_in_zero_changes() { + let doc_name = "testing"; + let mut docdef = create_docdef([FieldType::Uuid].to_vec()); + } } #[cfg(test)]