Test refactor.

This commit is contained in:
Jeff Baskin 2025-08-09 08:03:36 -04:00
parent 6d0876f9e9
commit 92f1814d1c

View File

@ -1319,7 +1319,11 @@ impl DocumentFile {
NameID::ID(id) => id.to_string(), NameID::ID(id) => id.to_string(),
}; };
let routes = [ 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( RouteRequest::new(
Include::All, Include::All,
Include::Some(name.clone()), Include::Some(name.clone()),
@ -1382,6 +1386,14 @@ mod document_files {
use super::{support_test::TIMEOUT, *}; use super::{support_test::TIMEOUT, *};
use std::sync::mpsc::RecvTimeoutError; use std::sync::mpsc::RecvTimeoutError;
fn standard_routes() -> Vec<RouteRequest> {
[
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( fn test_doc(
name: &str, name: &str,
docdef: DocDef, docdef: DocDef,
@ -1397,17 +1409,30 @@ mod document_files {
(queue, rx) (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] #[test]
fn can_show_document_details() { fn can_show_document_details() {
let docdef = DocDef::new(); let docdef = DocDef::new();
let name = "first"; let name = "first";
let routes = [RouteRequest::new( let (queue, rx) = test_doc(name, docdef, standard_routes());
Include::All,
Include::All,
Include::Some(Action::Reply),
)]
.to_vec();
let (queue, rx) = test_doc(name, docdef, routes);
let msg = Message::new(name, MsgAction::Show); let msg = Message::new(name, MsgAction::Show);
queue.send(msg.clone()).unwrap(); queue.send(msg.clone()).unwrap();
let show = rx.recv_timeout(TIMEOUT).unwrap(); let show = rx.recv_timeout(TIMEOUT).unwrap();
@ -1417,13 +1442,7 @@ mod document_files {
fn can_query_new_document() { fn can_query_new_document() {
let docdef = DocDef::new(); let docdef = DocDef::new();
let name = "second"; let name = "second";
let routes = [RouteRequest::new( let (queue, rx) = test_doc(name, docdef, standard_routes());
Include::All,
Include::All,
Include::Some(Action::Reply),
)]
.to_vec();
let (queue, rx) = test_doc(name, docdef, routes);
let query = Message::new(name, Query::new()); let query = Message::new(name, Query::new());
queue.send(query).unwrap(); queue.send(query).unwrap();
let result = rx.recv_timeout(TIMEOUT).unwrap(); let result = rx.recv_timeout(TIMEOUT).unwrap();
@ -1440,13 +1459,7 @@ mod document_files {
fn only_responses_to_its_show_request() { fn only_responses_to_its_show_request() {
let docdef = DocDef::new(); let docdef = DocDef::new();
let name = "quiet"; let name = "quiet";
let routes = [RouteRequest::new( let (mut queue, rx) = test_doc(name, docdef, standard_routes());
Include::All,
Include::All,
Include::Some(Action::Reply),
)]
.to_vec();
let (mut queue, rx) = test_doc(name, docdef, routes);
let other = "alternate"; let other = "alternate";
let (tx, _) = channel(); let (tx, _) = channel();
queue.register(tx, other.to_string(), Vec::new()).unwrap(); queue.register(tx, other.to_string(), Vec::new()).unwrap();
@ -1465,13 +1478,7 @@ mod document_files {
fn only_responses_to_its_query_request() { fn only_responses_to_its_query_request() {
let docdef = DocDef::new(); let docdef = DocDef::new();
let name = "quiet"; let name = "quiet";
let routes = [RouteRequest::new( let (mut queue, rx) = test_doc(name, docdef, standard_routes());
Include::All,
Include::All,
Include::Some(Action::Reply),
)]
.to_vec();
let (mut queue, rx) = test_doc(name, docdef, routes);
let other = "alternate"; let other = "alternate";
let (tx, _) = channel(); let (tx, _) = channel();
queue.register(tx, other.to_string(), Vec::new()).unwrap(); queue.register(tx, other.to_string(), Vec::new()).unwrap();
@ -1493,13 +1500,7 @@ mod document_files {
let doc_name = "document"; let doc_name = "document";
let data = Uuid::new_v4(); let data = Uuid::new_v4();
docdef.add_field(name.to_string(), FieldType::Uuid); docdef.add_field(name.to_string(), FieldType::Uuid);
let routes = [RouteRequest::new( let (queue, rx) = test_doc(doc_name, docdef, standard_routes());
Include::All,
Include::All,
Include::Some(Action::Reply),
)]
.to_vec();
let (queue, rx) = test_doc(doc_name, docdef, routes);
let mut new_doc = Addition::new(); let mut new_doc = Addition::new();
new_doc.add_field(name.to_string(), data.clone()); new_doc.add_field(name.to_string(), data.clone());
let msg = Message::new(doc_name, new_doc); let msg = Message::new(doc_name, new_doc);
@ -1545,6 +1546,50 @@ mod document_files {
_ => unreachable!("got {:?}: should have been a reply", result), _ => 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)] #[cfg(test)]