Generates the on_blank messages.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 2s

This commit is contained in:
Jeff Baskin 2025-11-26 20:20:43 -05:00
parent eb64b6bfd5
commit 247712f10f

View File

@ -48,7 +48,10 @@ enum Action {
Create,
Delete,
Error,
OnAddition,
OnDelete,
OnQuery,
OnUpdate,
Query,
Records,
Register,
@ -64,7 +67,10 @@ impl From<MsgAction> for Action {
MsgAction::Create(_) => Action::Create,
MsgAction::Delete(_) => Action::Delete,
MsgAction::Error(_) => Action::Error,
MsgAction::OnAddition(_) => Action::OnAddition,
MsgAction::OnDelete(_) => Action::OnDelete,
MsgAction::OnQuery(_) => Action::OnQuery,
MsgAction::OnUpdate(_) => Action::OnUpdate,
MsgAction::Query(_) => Action::Query,
MsgAction::Records(_) => Action::Records,
MsgAction::Register(_) => Action::Register,
@ -129,7 +135,10 @@ enum MsgAction {
// Alter
// Remove
Error(MTTError),
OnAddition(Records),
OnDelete(Records),
OnQuery(Records),
OnUpdate(Records),
Query(Query),
Records(Records),
Register(Register),
@ -4584,8 +4593,10 @@ impl DocumentFile {
self.docs.insert(oid.clone(), holder.clone());
records.insert(oid, holder);
}
let reply = msg.response(records);
self.queue.send(reply).unwrap();
self.queue.send(msg.response(records.clone())).unwrap();
self.queue
.send(msg.response(MsgAction::OnAddition(records)))
.unwrap();
}
fn delete(&mut self, msg: &Message) {
@ -4608,7 +4619,10 @@ impl DocumentFile {
self.docs.remove(oid);
}
let rec = Records::with_data(self.docdef.get_field_names().clone(), records);
self.queue.send(msg.response(rec)).unwrap();
self.queue.send(msg.response(rec.clone())).unwrap();
self.queue
.send(msg.response(MsgAction::OnDelete(rec)))
.unwrap();
}
fn run_query(&self, query: &Query) -> Result<InternalRecords, MTTError> {
@ -4742,7 +4756,10 @@ impl DocumentFile {
self.docs.insert(oid.clone(), new_rec.clone());
}
let recs = Records::with_data(self.docdef.get_field_names().clone(), updates);
self.queue.send(msg.response(recs)).unwrap();
self.queue.send(msg.response(recs.clone())).unwrap();
self.queue
.send(msg.response(MsgAction::OnUpdate(recs)))
.unwrap();
}
}
@ -5038,6 +5055,153 @@ mod document_files {
}
}
#[test]
fn send_on_addition_message() {
let data: Field = Uuid::new_v4().into();
let field_name = Name::english("field0");
let mut test_doc = TestDocument::new([FieldType::Uuid].to_vec());
let doc_name = test_doc.get_docdef().get_document_names()[0].clone();
let queue = test_doc.get_queue();
let routes = vec![Path::new(
Include::All,
Include::All,
Include::Some(Action::OnAddition),
)];
test_doc.start(routes);
let name_id: NameType = test_doc.get_name_id().into();
let mut add = Addition::new();
add.add_field(field_name.clone(), data.clone());
let msg = Message::new(doc_name.clone(), add);
queue.send(msg.clone()).unwrap();
let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
assert_eq!(
result.get_message_id(),
msg.get_message_id(),
"message ids should match"
);
assert_eq!(
result.get_document_id(),
&name_id,
"document name ids should match"
);
match result.get_action() {
MsgAction::OnAddition(output) => {
assert_eq!(output.len(), 1, "wrong number of entries: got {:?}", output);
for rec in output.iter() {
assert_eq!(rec.get(Name::english("field0")).unwrap(), data);
}
}
_ => unreachable!("should never get here"),
}
}
#[test]
fn sends_on_delete_message() {
let count = 5;
let mut data: HashSet<Field> = HashSet::new();
while data.len() < count {
let field: Field = Uuid::new_v4().into();
data.insert(field);
}
let mut test_doc = TestDocument::new([FieldType::Uuid].to_vec());
let doc_name = test_doc.get_docdef().get_document_names()[0].clone();
let queue = test_doc.get_queue();
let routes = [Path::new(
Include::All,
Include::All,
Include::Some(Action::OnDelete),
)]
.to_vec();
test_doc.start(routes);
let name_id: NameType = test_doc.get_name_id().into();
for item in data.iter() {
test_doc.populate([item.clone()].to_vec());
}
let msg = Message::new(doc_name.clone(), Delete::new(Query::new()));
queue.send(msg.clone()).unwrap();
let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
assert_eq!(
result.get_message_id(),
msg.get_message_id(),
"message ids should match"
);
assert_eq!(
result.get_document_id(),
&name_id,
"document name ids should match"
);
match result.get_action() {
MsgAction::OnDelete(output) => {
assert_eq!(
output.len(),
count,
"wrong number of entries: got {:?}",
output
);
for rec in output.iter() {
assert!(data.contains(&rec.get(Name::english("field0")).unwrap()));
}
}
_ => unreachable!("should never get here"),
}
}
#[test]
fn sends_on_update_message() {
let count = 5;
let field_name = Name::english("field0");
let mut data: HashSet<Field> = HashSet::new();
while data.len() < count {
let field: Field = Uuid::new_v4().into();
data.insert(field);
}
let mut test_doc = TestDocument::new([FieldType::Uuid].to_vec());
let doc_name = test_doc.get_docdef().get_document_names()[0].clone();
let queue = test_doc.get_queue();
let routes = [Path::new(
Include::All,
Include::All,
Include::Some(Action::OnUpdate),
)]
.to_vec();
test_doc.start(routes);
let name_id: NameType = test_doc.get_name_id().into();
for item in data.iter() {
test_doc.populate([item.clone()].to_vec());
}
let mut update = Update::new(Query::new());
update
.get_values_mut()
.add_field(field_name.clone(), Uuid::nil());
let msg = Message::new(doc_name.clone(), update);
queue.send(msg.clone()).unwrap();
let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
assert_eq!(
result.get_message_id(),
msg.get_message_id(),
"message ids should match"
);
assert_eq!(
result.get_document_id(),
&name_id,
"document name ids should match"
);
match result.get_action() {
MsgAction::OnUpdate(output) => {
assert_eq!(
output.len(),
count,
"wrong number of entries: got {:?}",
output
);
for rec in output.iter() {
assert_eq!(rec.get(&field_name).unwrap(), Uuid::nil().into());
}
}
_ => unreachable!("should never get here"),
}
}
#[test]
fn can_document_be_added() {
let doc_name = Name::english("document");