Test refactor.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s

This commit is contained in:
Jeff Baskin 2025-08-26 08:06:22 -04:00
parent a0ceacdd4f
commit 6c8ee13d99

View File

@ -32,6 +32,7 @@ enum Action {
Query, Query,
Reply, Reply,
Show, Show,
Update,
} }
impl From<MsgAction> for Action { impl From<MsgAction> for Action {
@ -43,6 +44,7 @@ impl From<MsgAction> for Action {
MsgAction::Query(_) => Action::Query, MsgAction::Query(_) => Action::Query,
MsgAction::Reply(_) => Action::Reply, MsgAction::Reply(_) => Action::Reply,
MsgAction::Show => Action::Show, MsgAction::Show => Action::Show,
MsgAction::Update(_) => Action::Update,
} }
} }
} }
@ -95,6 +97,7 @@ enum MsgAction {
Reply(Reply), Reply(Reply),
Show, Show,
// Delete // Delete
Update(Update),
} }
impl From<Addition> for MsgAction { impl From<Addition> for MsgAction {
@ -127,6 +130,12 @@ impl From<Reply> for MsgAction {
} }
} }
impl From<Update> for MsgAction {
fn from(value: Update) -> Self {
MsgAction::Update(value)
}
}
#[cfg(test)] #[cfg(test)]
mod msgactions { mod msgactions {
use super::*; use super::*;
@ -1513,8 +1522,6 @@ mod replies {
} }
} }
type DocumentMap = HashMap<String, Field>;
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
struct Document { struct Document {
data: HashMap<String, Field>, data: HashMap<String, Field>,
@ -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 { struct DocumentFile {
docdef: DocDef, docdef: DocDef,
docs: Vec<Document>, docs: Vec<Document>,
@ -1715,14 +1737,14 @@ mod document_files {
.to_vec() .to_vec()
} }
fn create_docdef(field_types: Vec<FieldType>) -> DocDef { fn create_docdef(field_types: Vec<FieldType>) -> (DocDef, String) {
let mut output = DocDef::new(); let mut output = DocDef::new();
let mut count = 0; let mut count = 0;
for field_type in field_types.iter() { for field_type in field_types.iter() {
output.add_field(format!("field{}", count), field_type.clone()); output.add_field(format!("field{}", count), field_type.clone());
count += 1; count += 1;
} }
output (output, format!("name-{}", Uuid::new_v4()))
} }
fn test_doc( fn test_doc(
@ -1924,13 +1946,9 @@ mod document_files {
#[test] #[test]
fn errors_on_wrong_field_name() { 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 field_name = Uuid::new_v4().to_string();
let (queue, rx) = test_doc( let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes());
doc_name,
create_docdef([FieldType::Uuid].to_vec()),
standard_routes(),
);
let mut addition = Addition::new(); let mut addition = Addition::new();
addition.add_field(field_name.clone(), Uuid::new_v4()); addition.add_field(field_name.clone(), Uuid::new_v4());
let msg = Message::new(doc_name, addition); let msg = Message::new(doc_name, addition);
@ -1947,12 +1965,8 @@ mod document_files {
#[test] #[test]
fn errors_on_wrong_field_type() { fn errors_on_wrong_field_type() {
let doc_name = "mismatch"; let (docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec());
let (queue, rx) = test_doc( let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes());
doc_name,
create_docdef([FieldType::Uuid].to_vec()),
standard_routes(),
);
let mut addition = Addition::new(); let mut addition = Addition::new();
addition.add_field("field0".to_string(), "astring"); addition.add_field("field0".to_string(), "astring");
let msg = Message::new(doc_name, addition); let msg = Message::new(doc_name, addition);
@ -1975,12 +1989,8 @@ mod document_files {
#[test] #[test]
fn errors_on_missing_fields() { fn errors_on_missing_fields() {
let doc_name = "missing"; let (docdef, doc_name) = create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec());
let (queue, rx) = test_doc( let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes());
doc_name,
create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec()),
standard_routes(),
);
let mut addition = Addition::new(); let mut addition = Addition::new();
addition.add_field("field0".to_string(), Uuid::nil()); addition.add_field("field0".to_string(), Uuid::nil());
let msg = Message::new(doc_name, addition); let msg = Message::new(doc_name, addition);
@ -1997,33 +2007,29 @@ mod document_files {
#[test] #[test]
fn does_query_return_related_entries() { fn does_query_return_related_entries() {
let doc_name = "query"; let (docdef, doc_name) = create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec());
let (queue, rx) = test_doc( let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes());
doc_name,
create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec()),
standard_routes(),
);
let field0 = Uuid::new_v4(); let field0 = Uuid::new_v4();
let field1 = Uuid::new_v4(); let field1 = Uuid::new_v4();
for _ in 0..3 { for _ in 0..3 {
let mut addition = Addition::new(); let mut addition = Addition::new();
addition.add_field("field0".to_string(), Uuid::new_v4()); addition.add_field("field0".to_string(), Uuid::new_v4());
addition.add_field("field1".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(); queue.send(msg).unwrap();
rx.recv_timeout(TIMEOUT).unwrap(); rx.recv_timeout(TIMEOUT).unwrap();
} }
let mut addition = Addition::new(); let mut addition = Addition::new();
addition.add_field("field0".to_string(), field0.clone()); addition.add_field("field0".to_string(), field0.clone());
addition.add_field("field1".to_string(), field1.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(); queue.send(msg).unwrap();
rx.recv_timeout(TIMEOUT).unwrap(); rx.recv_timeout(TIMEOUT).unwrap();
for _ in 0..3 { for _ in 0..3 {
let mut addition = Addition::new(); let mut addition = Addition::new();
addition.add_field("field0".to_string(), Uuid::new_v4()); addition.add_field("field0".to_string(), Uuid::new_v4());
addition.add_field("field1".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(); queue.send(msg).unwrap();
rx.recv_timeout(TIMEOUT).unwrap(); rx.recv_timeout(TIMEOUT).unwrap();
} }
@ -2049,25 +2055,21 @@ mod document_files {
#[test] #[test]
fn gets_all_documents_in_query() { fn gets_all_documents_in_query() {
let doc_name = "multiple"; let (docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec());
let count = 4; let count = 4;
let input = Uuid::new_v4(); let input = Uuid::new_v4();
let (queue, rx) = test_doc( let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes());
doc_name,
create_docdef([FieldType::Uuid].to_vec()),
standard_routes(),
);
for _ in 0..3 { for _ in 0..3 {
let mut addition = Addition::new(); let mut addition = Addition::new();
addition.add_field("field0".to_string(), Uuid::new_v4()); 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(); queue.send(msg).unwrap();
rx.recv_timeout(TIMEOUT).unwrap(); rx.recv_timeout(TIMEOUT).unwrap();
} }
for _ in 0..count { for _ in 0..count {
let mut addition = Addition::new(); let mut addition = Addition::new();
addition.add_field("field0".to_string(), input.clone()); 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(); queue.send(msg).unwrap();
rx.recv_timeout(TIMEOUT).unwrap(); rx.recv_timeout(TIMEOUT).unwrap();
} }
@ -2091,12 +2093,8 @@ mod document_files {
#[test] #[test]
fn query_should_work_with_multiple_fields() { fn query_should_work_with_multiple_fields() {
let doc_name = "onlyone"; let (docdef, doc_name) = create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec());
let (queue, rx) = test_doc( let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes());
doc_name,
create_docdef([FieldType::Uuid, FieldType::Uuid].to_vec()),
standard_routes(),
);
let field0 = Uuid::new_v4(); let field0 = Uuid::new_v4();
let field1 = Uuid::new_v4(); let field1 = Uuid::new_v4();
let input = [ let input = [
@ -2110,7 +2108,7 @@ mod document_files {
let mut addition = Addition::new(); let mut addition = Addition::new();
addition.add_field("field0".to_string(), combo[0].clone()); addition.add_field("field0".to_string(), combo[0].clone());
addition.add_field("field1".to_string(), combo[1].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(); queue.send(msg).unwrap();
rx.recv_timeout(TIMEOUT).unwrap(); rx.recv_timeout(TIMEOUT).unwrap();
} }
@ -2137,9 +2135,9 @@ mod document_files {
#[test] #[test]
fn errors_on_bad_field_name() { fn errors_on_bad_field_name() {
let doc_name = "testing"; let (docdef, doc_name) = create_docdef(Vec::new());
let field_name = "wrong"; 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(); let mut query = Query::new();
query.add_specifier(field_name.to_string(), Operand::Equal, Uuid::new_v4()); query.add_specifier(field_name.to_string(), Operand::Equal, Uuid::new_v4());
let msg = Message::new(doc_name, query); let msg = Message::new(doc_name, query);
@ -2157,12 +2155,8 @@ mod document_files {
#[test] #[test]
fn errors_on_bad_field_type() { fn errors_on_bad_field_type() {
let doc_name = "testing"; let (docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec());
let (queue, rx) = test_doc( let (queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes());
doc_name,
create_docdef([FieldType::Uuid].to_vec()),
standard_routes(),
);
let mut query = Query::new(); let mut query = Query::new();
query.add_specifier("field0".to_string(), Operand::Equal, "wrong"); query.add_specifier("field0".to_string(), Operand::Equal, "wrong");
let msg = Message::new(doc_name, query); let msg = Message::new(doc_name, query);
@ -2183,10 +2177,9 @@ mod document_files {
#[test] #[test]
fn can_use_default_values() { fn can_use_default_values() {
let doc_name = "default"; let (mut docdef, doc_name) = create_docdef([FieldType::StaticString].to_vec());
let mut docdef = create_docdef([FieldType::StaticString].to_vec());
docdef.use_default_function("field0"); 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 new_doc = Addition::new();
let msg = Message::new(doc_name, new_doc); let msg = Message::new(doc_name, new_doc);
queue.send(msg).unwrap(); queue.send(msg).unwrap();
@ -2206,11 +2199,10 @@ mod document_files {
#[test] #[test]
fn can_a_default_value_be_set() { fn can_a_default_value_be_set() {
let doc_name = "value"; let (mut docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec());
let mut docdef = create_docdef([FieldType::Uuid].to_vec());
let input = Uuid::nil(); let input = Uuid::nil();
docdef.set_default_value("field0", input.clone()); 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 new_doc = Addition::new();
let msg = Message::new(doc_name, new_doc); let msg = Message::new(doc_name, new_doc);
queue.send(msg).unwrap(); queue.send(msg).unwrap();
@ -2230,10 +2222,9 @@ mod document_files {
#[test] #[test]
fn can_default_values_be_overridden() { fn can_default_values_be_overridden() {
let doc_name = "override"; let (mut docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec());
let mut docdef = create_docdef([FieldType::Uuid].to_vec());
docdef.use_default_function("field0"); 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(); let mut new_doc = Addition::new();
new_doc.add_field("field0".to_string(), Uuid::nil()); new_doc.add_field("field0".to_string(), Uuid::nil());
let msg = Message::new(doc_name, new_doc); let msg = Message::new(doc_name, new_doc);
@ -2251,6 +2242,12 @@ mod document_files {
_ => unreachable!("got {:?}: should have gotten a reply", action), _ => 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)] #[cfg(test)]