diff --git a/src/message.rs b/src/message.rs index c17efa0..3b1dc81 100644 --- a/src/message.rs +++ b/src/message.rs @@ -5168,50 +5168,46 @@ mod document_files { testing(Message::new(doc_name.clone(), Query::new())); } - /* #[test] fn changes_only_the_queried() { - let mut doc = TestDocument::new([FieldType::Uuid, FieldType::StaticString].to_vec()); + let mut doc = TestDocument::new([FieldType::Integer, FieldType::StaticString].to_vec()); doc.start(); - let mut ids: HashSet = HashSet::new(); - while ids.len() < 2 { - ids.insert(Uuid::new_v4()); - } - let expected = ids.iter().last().unwrap(); + let doc_name = doc.get_docdef().get_document_name().clone(); let old = "old"; let new = "new"; - let mut values: Vec> = Vec::new(); - for id in ids.iter() { - let mut holder: Vec = Vec::new(); - holder.push(id.clone().into()); - holder.push(old.into()); - values.push(holder); - } - for value in values { - doc.populate(value); + let count = 5; + let picked = 3; + for i in 0..count { + doc.populate([i.into(), old.into()].to_vec()); } let mut update = Update::new(); let mut calc = Calculation::new(Operand::Equal); - calc.add_value(expected.clone()); - update.get_query_mut().add("field0".to_string(), calc); - update.get_values_mut().add_field("field1".to_string(), new); - doc.send(update).unwrap(); - doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); - let mut calc = Calculation::new(Operand::Equal); - calc.add_value(new); - let mut query = Query::new(); - query.add("field1".to_string(), calc); - doc.send(query).unwrap(); + calc.add_value(picked.clone()); + update.get_query_mut().add(Name::english("field0"), calc); + update.get_values_mut().add_field(Name::english("field1"), new); + doc.get_queue().send(Message::new(doc_name.clone(), update)).unwrap(); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let action = result.get_action(); - match action { - MsgAction::Reply(docs) => { - assert_eq!(docs.len(), 1); - let expected_id: Field = expected.clone().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); + match action {MsgAction::Records(docs) => { + assert_eq!(docs.len(), 1, "should have one entry"); + for doc in docs.clone() { + assert_eq!(doc.get(Name::english("field0")).unwrap(), picked.into()); + assert_eq!(doc.get(Name::english("field1")).unwrap(), new.into()); + } + } + _ => unreachable!("got {:?}: should have gotten a reply", action), + } + doc.get_queue().send(Message::new(doc_name.clone(), Query::new())).unwrap(); + let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); + let action = result.get_action(); + match action {MsgAction::Records(docs) => { + assert_eq!(docs.len(), 5, "should have one entry"); + for doc in docs.clone() { + if doc.get(Name::english("field0")).unwrap() == picked.into() { + assert_eq!(doc.get(Name::english("field1")).unwrap(), new.into()); + } else { + assert_eq!(doc.get(Name::english("field1")).unwrap(), old.into()); + } } } _ => unreachable!("got {:?}: should have gotten a reply", action), @@ -5220,50 +5216,37 @@ mod document_files { #[test] fn can_handle_multiple_updates() { - let mut doc = TestDocument::new([FieldType::Uuid, FieldType::StaticString].to_vec()); + let mut doc = TestDocument::new([FieldType::Integer, FieldType::StaticString].to_vec()); doc.start(); - let count = 3; - let id = Uuid::new_v4(); + let doc_name = doc.get_docdef().get_document_name().clone(); let old = "old"; let new = "new"; - for _ in 0..count { - doc.populate([id.into(), old.into()].to_vec()); + let count = 5; + let picked = 3; + for i in 0..count { + doc.populate([picked.into(), old.into()].to_vec()); } - let mut calc = Calculation::new(Operand::Equal); - calc.add_value(id.clone()); let mut update = Update::new(); - update - .get_query_mut() - .add("field0".to_string(), calc.clone()); - update.get_values_mut().add_field("field1".to_string(), new); - doc.send(update).unwrap(); - let mut results: HashMap = HashMap::new(); - results.insert( - "update".to_string(), - doc.get_receiver().recv_timeout(TIMEOUT).unwrap(), - ); - let mut query = Query::new(); - query.add("field0".to_string(), calc.clone()); - doc.send(query).unwrap(); - results.insert( - "query".to_string(), - doc.get_receiver().recv_timeout(TIMEOUT).unwrap(), - ); - let expected_id: Field = id.into(); - let output: Field = new.into(); - for (key, result) in results.iter() { + let mut calc = Calculation::new(Operand::Equal); + calc.add_value(picked.clone()); + update.get_query_mut().add(Name::english("field0"), calc); + update.get_values_mut().add_field(Name::english("field1"), new); + let mut testing = |msg: Message| { + doc.get_queue().send(msg).unwrap(); + let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let action = result.get_action(); - match action { - MsgAction::Reply(docs) => { - assert_eq!(docs.len(), count, "{}", key); - for doc in docs.iter() { - assert_eq!(doc.get_field("field0").unwrap(), expected_id, "{}", key); - assert_eq!(doc.get_field("field1").unwrap(), output, "{}", key); + match action {MsgAction::Records(docs) => { + assert_eq!(docs.len(), 5, "should have one entry"); + for doc in docs.clone() { + assert_eq!(doc.get(Name::english("field0")).unwrap(), picked.into()); + assert_eq!(doc.get(Name::english("field1")).unwrap(), new.into()); } } _ => unreachable!("got {:?}: should have gotten a reply", action), } - } + }; + testing(Message::new(doc_name.clone(), update)); + testing(Message::new(doc_name.clone(), Query::new())); } #[test] @@ -5273,18 +5256,19 @@ mod document_files { let id = Uuid::new_v4(); let old = "old"; let new = "new"; + let bad_name = Name::english("wrong"); doc.populate([id.into(), old.into()].to_vec()); let mut update = Update::new(); let mut calc = Calculation::new(Operand::Equal); calc.add_value(id.clone()); - update.get_query_mut().add("field0".to_string(), calc); - update.get_values_mut().add_field("wrong".to_string(), new); + update.get_query_mut().add(Name::english("field0"), calc); + update.get_values_mut().add_field(bad_name.clone(), new); doc.send(update).unwrap(); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let action = result.get_action(); match action { MsgAction::Error(err) => match err { - MTTError::DocumentFieldNotFound(data) => assert_eq!(data, "wrong"), + MTTError::NameNotFound(data) => assert_eq!(data, &bad_name), _ => unreachable!("got {:?}: should have gotten an missing field", err), }, _ => unreachable!("got {:?}: should have gotten an error", action), @@ -5302,8 +5286,8 @@ mod document_files { let mut update = Update::new(); let mut calc = Calculation::new(Operand::Equal); calc.add_value(id.clone()); - update.get_query_mut().add("field0".to_string(), calc); - update.get_values_mut().add_field("field1".to_string(), new); + update.get_query_mut().add(Name::english("field0"), calc); + update.get_values_mut().add_field(Name::english("field1"), new); doc.send(update).unwrap(); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let action = result.get_action(); @@ -5319,6 +5303,7 @@ mod document_files { } } + /* #[test] fn does_update_maintain_unique_fields() { let (mut docdef, doc_name) = create_docdef([FieldType::Uuid].to_vec());