From d70758aecf0980c824d463245829ff58565add7a Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Thu, 28 Aug 2025 10:49:18 -0400 Subject: [PATCH] added multiple updates. --- src/message.rs | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/message.rs b/src/message.rs index bb2d1fa..376702d 100644 --- a/src/message.rs +++ b/src/message.rs @@ -2455,6 +2455,64 @@ mod document_files { _ => unreachable!("got {:?}: should have gotten a reply", action), } } + + #[test] + fn can_handle_multiple_updates() { + let (mut docdef, doc_name) = + create_docdef([FieldType::Uuid, FieldType::StaticString].to_vec()); + let (mut queue, rx) = test_doc(doc_name.as_str(), docdef, standard_routes()); + let count = 3; + let id = Uuid::new_v4(); + let old = "old"; + let new = "new"; + let mut addition = Addition::new(); + addition.add_field("field0".to_string(), id.clone()); + addition.add_field("field1".to_string(), old); + let msg = Message::new(doc_name.clone(), addition); + for _ in 0..count { + queue.send(msg.clone()).unwrap(); + rx.recv_timeout(TIMEOUT).unwrap(); + } + let mut update = Update::new(); + update + .get_query_mut() + .add_specifier("field0".to_string(), Operand::Equal, id.clone()); + update.get_values_mut().add_field("field1".to_string(), new); + let msg = Message::new(doc_name.clone(), update); + queue.send(msg).unwrap(); + let result = rx.recv_timeout(TIMEOUT).unwrap(); + let action = result.get_action(); + match action { + MsgAction::Reply(docs) => { + assert_eq!(docs.len(), count); + let expected_id: Field = id.into(); + let output: Field = new.into(); + for doc in docs.iter() { + assert_eq!(doc.get_field("field0").unwrap(), &expected_id); + assert_eq!(doc.get_field("field1").unwrap(), &output); + } + } + _ => unreachable!("got {:?}: should have gotten a reply", action), + } + let mut query = Query::new(); + query.add_specifier("field0".to_string(), Operand::Equal, id.clone()); + let msg = Message::new(doc_name, query); + queue.send(msg).unwrap(); + let result = rx.recv_timeout(TIMEOUT).unwrap(); + let action = result.get_action(); + match action { + MsgAction::Reply(docs) => { + assert_eq!(docs.len(), count); + let expected_id: Field = id.into(); + let output: Field = new.into(); + for doc in docs.iter() { + assert_eq!(doc.get_field("field0").unwrap(), &expected_id); + assert_eq!(doc.get_field("field1").unwrap(), &output); + } + } + _ => unreachable!("got {:?}: should have gotten a reply", action), + } + } } #[cfg(test)]