From 92f1814d1c08e2b3d62c3d856b3a8248374477fa Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Sat, 9 Aug 2025 08:03:36 -0400 Subject: [PATCH] Test refactor. --- src/message.rs | 117 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 81 insertions(+), 36 deletions(-) diff --git a/src/message.rs b/src/message.rs index bbe397f..80a6d0f 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1319,7 +1319,11 @@ impl DocumentFile { NameID::ID(id) => id.to_string(), }; let routes = [ - RouteRequest::new(Include::All, Include::All, Include::Some(Action::Addition)), + RouteRequest::new( + Include::All, + Include::Some(name.clone()), + Include::Some(Action::Addition), + ), RouteRequest::new( Include::All, Include::Some(name.clone()), @@ -1382,6 +1386,14 @@ mod document_files { use super::{support_test::TIMEOUT, *}; use std::sync::mpsc::RecvTimeoutError; + fn standard_routes() -> Vec { + [ + RouteRequest::new(Include::All, Include::All, Include::Some(Action::Reply)), + RouteRequest::new(Include::All, Include::All, Include::Some(Action::Error)), + ] + .to_vec() + } + fn test_doc( name: &str, docdef: DocDef, @@ -1397,17 +1409,30 @@ mod document_files { (queue, rx) } + #[test] + fn does_not_respond_to_create() { + let docdef = DocDef::new(); + let name = "quiet"; + let (mut queue, rx) = test_doc(name, docdef, standard_routes()); + let other = "alternate"; + let (tx, _) = channel(); + queue.register(tx, other.to_string(), Vec::new()).unwrap(); + let msg = Message::new(name, DocDef::new()); + queue.send(msg).unwrap(); + match rx.recv_timeout(TIMEOUT) { + Ok(msg) => unreachable!("should not receive: {:?}", msg), + Err(err) => match err { + RecvTimeoutError::Timeout => {} + _ => unreachable!("should have timed out"), + }, + } + } + #[test] fn can_show_document_details() { let docdef = DocDef::new(); let name = "first"; - let routes = [RouteRequest::new( - Include::All, - Include::All, - Include::Some(Action::Reply), - )] - .to_vec(); - let (queue, rx) = test_doc(name, docdef, routes); + let (queue, rx) = test_doc(name, docdef, standard_routes()); let msg = Message::new(name, MsgAction::Show); queue.send(msg.clone()).unwrap(); let show = rx.recv_timeout(TIMEOUT).unwrap(); @@ -1417,13 +1442,7 @@ mod document_files { fn can_query_new_document() { let docdef = DocDef::new(); let name = "second"; - let routes = [RouteRequest::new( - Include::All, - Include::All, - Include::Some(Action::Reply), - )] - .to_vec(); - let (queue, rx) = test_doc(name, docdef, routes); + let (queue, rx) = test_doc(name, docdef, standard_routes()); let query = Message::new(name, Query::new()); queue.send(query).unwrap(); let result = rx.recv_timeout(TIMEOUT).unwrap(); @@ -1440,13 +1459,7 @@ mod document_files { fn only_responses_to_its_show_request() { let docdef = DocDef::new(); let name = "quiet"; - let routes = [RouteRequest::new( - Include::All, - Include::All, - Include::Some(Action::Reply), - )] - .to_vec(); - let (mut queue, rx) = test_doc(name, docdef, routes); + let (mut queue, rx) = test_doc(name, docdef, standard_routes()); let other = "alternate"; let (tx, _) = channel(); queue.register(tx, other.to_string(), Vec::new()).unwrap(); @@ -1465,13 +1478,7 @@ mod document_files { fn only_responses_to_its_query_request() { let docdef = DocDef::new(); let name = "quiet"; - let routes = [RouteRequest::new( - Include::All, - Include::All, - Include::Some(Action::Reply), - )] - .to_vec(); - let (mut queue, rx) = test_doc(name, docdef, routes); + let (mut queue, rx) = test_doc(name, docdef, standard_routes()); let other = "alternate"; let (tx, _) = channel(); queue.register(tx, other.to_string(), Vec::new()).unwrap(); @@ -1493,13 +1500,7 @@ mod document_files { let doc_name = "document"; let data = Uuid::new_v4(); docdef.add_field(name.to_string(), FieldType::Uuid); - let routes = [RouteRequest::new( - Include::All, - Include::All, - Include::Some(Action::Reply), - )] - .to_vec(); - let (queue, rx) = test_doc(doc_name, docdef, routes); + let (queue, rx) = test_doc(doc_name, docdef, standard_routes()); let mut new_doc = Addition::new(); new_doc.add_field(name.to_string(), data.clone()); let msg = Message::new(doc_name, new_doc); @@ -1545,6 +1546,50 @@ mod document_files { _ => unreachable!("got {:?}: should have been a reply", result), } } + + #[test] + fn only_responses_to_its_additions() { + let docdef = DocDef::new(); + let name = "quiet"; + let (mut queue, rx) = test_doc(name, docdef, standard_routes()); + let other = "alternate"; + let (tx, _) = channel(); + queue.register(tx, other.to_string(), Vec::new()).unwrap(); + let msg = Message::new(other, Addition::new()); + queue.send(msg).unwrap(); + match rx.recv_timeout(TIMEOUT) { + Ok(msg) => unreachable!("should not receive: {:?}", msg), + Err(err) => match err { + RecvTimeoutError::Timeout => {} + _ => unreachable!("should have timed out"), + }, + } + } + + #[test] + fn can_add_multiple_documents() { + let count = 4; + let mut docdef = DocDef::new(); + let name = "field"; + let doc_name = "document"; + let data = Uuid::new_v4(); + docdef.add_field(name.to_string(), FieldType::Uuid); + let (queue, rx) = test_doc(doc_name, docdef, standard_routes()); + let mut new_doc = Addition::new(); + new_doc.add_field(name.to_string(), data.clone()); + for _ in 0..count { + let msg = Message::new(doc_name, new_doc.clone()); + queue.send(msg.clone()).unwrap(); + rx.recv_timeout(TIMEOUT).unwrap(); // eats the confirmation reply. + } + let msg = Message::new(doc_name, Query::new()); + queue.send(msg).unwrap(); + let result = rx.recv_timeout(TIMEOUT).unwrap(); + match result.get_action() { + MsgAction::Reply(data) => assert_eq!(data.len(), count), + _ => unreachable!("got {:?}: should have been a reply", result.get_action()), + } + } } #[cfg(test)]