Added trigger functions.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s

This commit is contained in:
Jeff Baskin 2025-12-03 09:49:26 -05:00
parent 1428b8984b
commit 245d099f38

View File

@ -4767,7 +4767,8 @@ impl DocumentFile {
&mut self, &mut self,
original: &InternalRecords, original: &InternalRecords,
update: &Update, update: &Update,
) -> Result<InternalRecords, MTTError> { msg: &Message,
) -> Result<Records, MTTError> {
let mut changes: HashMap<Uuid, &CalcValue> = HashMap::new(); let mut changes: HashMap<Uuid, &CalcValue> = HashMap::new();
for (key, value) in update.get_values().iter() { for (key, value) in update.get_values().iter() {
let field_id = match self.docdef.get_field_id(key) { let field_id = match self.docdef.get_field_id(key) {
@ -4802,7 +4803,11 @@ impl DocumentFile {
} }
self.docs.insert(oid.clone(), new_rec.clone()); self.docs.insert(oid.clone(), new_rec.clone());
} }
Ok(updates.clone()) let recs = Records::with_data(self.docdef.get_field_names().clone(), updates);
self.queue
.send(msg.response(MsgAction::OnUpdate(recs.clone())))
.unwrap();
Ok(recs)
} }
fn update(&mut self, msg: &Message) { fn update(&mut self, msg: &Message) {
@ -4818,7 +4823,7 @@ impl DocumentFile {
return; return;
} }
}; };
let data = match self.run_update(&original, update) { let data = match self.run_update(&original, update, msg) {
Ok(output) => output, Ok(output) => output,
Err(err) => { Err(err) => {
let reply = msg.response(err); let reply = msg.response(err);
@ -4826,11 +4831,7 @@ impl DocumentFile {
return; return;
} }
}; };
let recs = Records::with_data(self.docdef.get_field_names().clone(), data); self.queue.send(msg.response(data)).unwrap();
self.queue.send(msg.response(recs.clone())).unwrap();
self.queue
.send(msg.response(MsgAction::OnUpdate(recs)))
.unwrap();
} }
fn existing_query(&mut self, msg: &Message, action: &MsgAction) { fn existing_query(&mut self, msg: &Message, action: &MsgAction) {
@ -4840,7 +4841,7 @@ impl DocumentFile {
}; };
match action { match action {
MsgAction::Update(change) => self MsgAction::Update(change) => self
.run_update(recs.get_internal_records(), change) .run_update(recs.get_internal_records(), change, msg)
.unwrap(), .unwrap(),
_ => panic!("should not get here"), _ => panic!("should not get here"),
}; };
@ -6345,13 +6346,12 @@ mod document_files {
} }
#[test] #[test]
#[ignore]
fn can_query_trigger_reaction() { fn can_query_trigger_reaction() {
let mut doc = TestDocument::new([FieldType::Integer].to_vec()); let mut doc = TestDocument::new([FieldType::Integer].to_vec());
let doc_name = doc.get_docdef().get_document_names()[0].clone(); let doc_name = doc.get_docdef().get_document_names()[0].clone();
let path = Path::new( let path = Path::new(
Include::All, Include::All,
Include::Some(doc_name.into()), Include::Some(doc_name.clone().into()),
Include::Some(Action::OnQuery), Include::Some(Action::OnQuery),
); );
let mut update = Update::new(Query::new()); let mut update = Update::new(Query::new());
@ -6362,7 +6362,14 @@ mod document_files {
.get_values_mut() .get_values_mut()
.add_field(Name::english("field0"), calc); .add_field(Name::english("field0"), calc);
let function = DocFuncType::ExistingQuery(update.into()); let function = DocFuncType::ExistingQuery(update.into());
doc.start(standard_paths()); doc.get_docdef_mut().add_route(path, function);
let mut paths = standard_paths();
paths.push(Path::new(
Include::All,
Include::Some(doc_name.into()),
Include::Some(Action::OnUpdate),
));
doc.start(paths);
doc.populate([0.into()].to_vec()); doc.populate([0.into()].to_vec());
for i in 0..5 { for i in 0..5 {
let expected: Field = i.try_into().unwrap(); let expected: Field = i.try_into().unwrap();
@ -6378,6 +6385,17 @@ mod document_files {
} }
_ => unreachable!("got {:?}, should have added entry", action), _ => unreachable!("got {:?}, should have added entry", action),
} }
let on_update = doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
match on_update.get_action() {
MsgAction::OnUpdate(recs) => {
let expected: Field = (i + 1).into();
assert_eq!(recs.len(), 1);
for rec in recs.iter() {
assert_eq!(rec.get(Name::english("field0")).unwrap(), expected);
}
}
_ => unreachable!("should only be on update"),
}
} }
} }
} }