Made addition require document name.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s

This commit is contained in:
Jeff Baskin 2026-02-12 00:05:33 -05:00
parent 9dbaaceb80
commit ed2a303d1c
4 changed files with 56 additions and 34 deletions

View File

@ -5,16 +5,24 @@ use uuid::Uuid;
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Addition { pub struct Addition {
data: RequestData, data: RequestData,
doc_name: NameType,
} }
impl Addition { impl Addition {
pub fn new() -> Self { pub fn new<NT>(name: NT) -> Self
where
NT: Into<NameType>,
{
Self { Self {
data: RequestData::new(), data: RequestData::new(),
doc_name: name.into(),
} }
} }
#[allow(dead_code)] pub fn doc_name(&self) -> NameType {
self.doc_name.clone()
}
pub fn add_field<NT, CV>(&mut self, name: NT, field: CV) pub fn add_field<NT, CV>(&mut self, name: NT, field: CV)
where where
CV: Into<CalcValue>, CV: Into<CalcValue>,
@ -33,9 +41,18 @@ mod additions {
use super::*; use super::*;
use crate::name::Name; use crate::name::Name;
#[test]
fn is_default_addition_empty() {
let doc_name = Name::english(Uuid::new_v4().to_string().as_str());
let add = Addition::new(doc_name.clone());
assert_eq!(add.doc_name(), doc_name.into());
assert_eq!(add.iter().count(), 0);
}
#[test] #[test]
fn can_add_static_string() { fn can_add_static_string() {
let mut add = Addition::new(); let doc_name = Name::english(Uuid::new_v4().to_string().as_str());
let mut add = Addition::new(doc_name);
let name = Name::english(Uuid::new_v4().to_string().as_str()); let name = Name::english(Uuid::new_v4().to_string().as_str());
let ntype: NameType = name.clone().into(); let ntype: NameType = name.clone().into();
let data = Uuid::new_v4().to_string(); let data = Uuid::new_v4().to_string();
@ -55,7 +72,8 @@ mod additions {
#[test] #[test]
fn can_add_uuid() { fn can_add_uuid() {
let mut add = Addition::new(); let doc_name = Name::english(Uuid::new_v4().to_string().as_str());
let mut add = Addition::new(doc_name);
let name = Name::english(Uuid::new_v4().to_string().as_str()); let name = Name::english(Uuid::new_v4().to_string().as_str());
let ntype: NameType = name.clone().into(); let ntype: NameType = name.clone().into();
let data = Uuid::new_v4(); let data = Uuid::new_v4();

View File

@ -907,7 +907,7 @@ mod document_files {
} }
fn populate(&self, data: Vec<Field>) { fn populate(&self, data: Vec<Field>) {
let mut add = Addition::new(); let mut add = Addition::new(self.doc_name());
let mut count = 0; let mut count = 0;
for item in data.iter() { for item in data.iter() {
add.add_field( add.add_field(
@ -968,9 +968,9 @@ mod document_files {
test_doc.start(standard_paths()); test_doc.start(standard_paths());
let queue = test_doc.get_queue(); let queue = test_doc.get_queue();
let msg_actions = [ let msg_actions = [
MsgAction::Addition(Addition::new()), MsgAction::Addition(Addition::new(name.clone())),
MsgAction::Delete(Delete::new(Query::internal())), MsgAction::Delete(Delete::new(Query::internal())),
MsgAction::Query(Query::internal().into()), MsgAction::Query(Query::new(name.clone())),
MsgAction::Show, MsgAction::Show,
MsgAction::Update(Update::new(Query::internal())), MsgAction::Update(Update::new(Query::internal())),
]; ];
@ -1019,9 +1019,9 @@ mod document_files {
queue.send(setup); queue.send(setup);
test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
let msg_actions = [ let msg_actions = [
MsgAction::Addition(Addition::new()), MsgAction::Addition(Addition::new(alt.clone())),
MsgAction::Create(DocDef::new(name.clone())), MsgAction::Create(DocDef::new(name.clone())),
MsgAction::Delete(Delete::new(Query::internal())), MsgAction::Delete(Delete::new(Query::new(alt.clone()))),
MsgAction::Query(Query::internal().into()), MsgAction::Query(Query::internal().into()),
MsgAction::Show, MsgAction::Show,
MsgAction::Update(Update::new(Query::internal())), MsgAction::Update(Update::new(Query::internal())),
@ -1103,7 +1103,7 @@ mod document_files {
Include::Just(Action::OnAddition), Include::Just(Action::OnAddition),
)]; )];
test_doc.start(routes); test_doc.start(routes);
let mut add = Addition::new(); let mut add = Addition::new(doc_name.clone());
add.add_field(field_name.clone(), data.clone()); add.add_field(field_name.clone(), data.clone());
let msg = Message::new(doc_name.clone(), add); let msg = Message::new(doc_name.clone(), add);
queue.send(msg.clone()); queue.send(msg.clone());
@ -1229,7 +1229,7 @@ mod document_files {
let mut test_doc: TestDocument = docdef.clone().into(); let mut test_doc: TestDocument = docdef.clone().into();
test_doc.start(standard_paths()); test_doc.start(standard_paths());
let queue = test_doc.get_queue(); let queue = test_doc.get_queue();
let mut new_doc = Addition::new(); let mut new_doc = Addition::new(doc_name.clone());
new_doc.add_field(name.clone(), data.clone()); new_doc.add_field(name.clone(), data.clone());
let testing = |msg: Message| { let testing = |msg: Message| {
queue.send(msg.clone()); queue.send(msg.clone());
@ -1267,7 +1267,7 @@ mod document_files {
let queue = test_doc.get_queue(); let queue = test_doc.get_queue();
let count = 5; let count = 5;
for i in 0..count { for i in 0..count {
let mut new_doc = Addition::new(); let mut new_doc = Addition::new(doc_name.clone());
new_doc.add_field(name.clone(), i); new_doc.add_field(name.clone(), i);
queue.send(Message::new(doc_name.clone(), new_doc)); queue.send(Message::new(doc_name.clone(), new_doc));
test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
@ -1310,7 +1310,7 @@ mod document_files {
test_doc.start(standard_paths()); test_doc.start(standard_paths());
let queue = test_doc.get_queue(); let queue = test_doc.get_queue();
let name = Name::english("bad"); let name = Name::english("bad");
let mut addition = Addition::new(); let mut addition = Addition::new(test_doc.doc_name());
addition.add_field(name.clone(), "doesn't matter"); addition.add_field(name.clone(), "doesn't matter");
queue.send(Message::new( queue.send(Message::new(
test_doc.get_docdef().get_document_names()[0].clone(), test_doc.get_docdef().get_document_names()[0].clone(),
@ -1331,7 +1331,7 @@ mod document_files {
let mut test_doc = TestDocument::new([FieldType::Uuid].to_vec()); let mut test_doc = TestDocument::new([FieldType::Uuid].to_vec());
test_doc.start(standard_paths()); test_doc.start(standard_paths());
let queue = test_doc.get_queue(); let queue = test_doc.get_queue();
let mut addition = Addition::new(); let mut addition = Addition::new(test_doc.doc_name());
addition.add_field(Name::english("field0"), "string"); addition.add_field(Name::english("field0"), "string");
queue.send(Message::new( queue.send(Message::new(
test_doc.get_docdef().get_document_names()[0].clone(), test_doc.get_docdef().get_document_names()[0].clone(),
@ -1358,7 +1358,7 @@ mod document_files {
let mut test_doc = TestDocument::new([FieldType::Integer, FieldType::Integer].to_vec()); let mut test_doc = TestDocument::new([FieldType::Integer, FieldType::Integer].to_vec());
test_doc.start(standard_paths()); test_doc.start(standard_paths());
let queue = test_doc.get_queue(); let queue = test_doc.get_queue();
let mut addition = Addition::new(); let mut addition = Addition::new(test_doc.doc_name());
addition.add_field(Name::english("field0"), 1); addition.add_field(Name::english("field0"), 1);
queue.send(Message::new( queue.send(Message::new(
test_doc.get_docdef().get_document_names()[0].clone(), test_doc.get_docdef().get_document_names()[0].clone(),
@ -1691,7 +1691,7 @@ mod document_files {
test_doc.start(standard_paths()); test_doc.start(standard_paths());
let queue = test_doc.get_queue(); let queue = test_doc.get_queue();
let rx = test_doc.get_receiver(); let rx = test_doc.get_receiver();
let new_doc = Addition::new(); let new_doc = Addition::new(doc_name.clone());
let msg = Message::new(doc_name, new_doc); let msg = Message::new(doc_name, new_doc);
queue.send(msg); queue.send(msg);
let result = rx.recv_timeout(TIMEOUT).unwrap(); let result = rx.recv_timeout(TIMEOUT).unwrap();
@ -1719,7 +1719,7 @@ mod document_files {
test_doc.start(standard_paths()); test_doc.start(standard_paths());
let queue = test_doc.get_queue(); let queue = test_doc.get_queue();
let rx = test_doc.get_receiver(); let rx = test_doc.get_receiver();
let new_doc = Addition::new(); let new_doc = Addition::new(doc_name.clone());
let msg = Message::new(doc_name, new_doc); let msg = Message::new(doc_name, new_doc);
queue.send(msg); queue.send(msg);
let result = rx.recv_timeout(TIMEOUT).unwrap(); let result = rx.recv_timeout(TIMEOUT).unwrap();
@ -1747,7 +1747,7 @@ mod document_files {
test_doc.start(standard_paths()); test_doc.start(standard_paths());
let queue = test_doc.get_queue(); let queue = test_doc.get_queue();
let rx = test_doc.get_receiver(); let rx = test_doc.get_receiver();
let mut new_doc = Addition::new(); let mut new_doc = Addition::new(doc_name.clone());
new_doc.add_field(&field_name, Uuid::nil()); new_doc.add_field(&field_name, Uuid::nil());
let msg = Message::new(doc_name, new_doc); let msg = Message::new(doc_name, new_doc);
queue.send(msg); queue.send(msg);
@ -2023,9 +2023,9 @@ mod document_files {
update.get_values_mut().add_field(&fname, new); update.get_values_mut().add_field(&fname, new);
test_doc.send(update); test_doc.send(update);
test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
let mut should_clear = Addition::new(); let mut should_clear = Addition::new(test_doc.doc_name());
should_clear.add_field(fname.clone(), old); should_clear.add_field(fname.clone(), old);
let mut should_error = Addition::new(); let mut should_error = Addition::new(test_doc.doc_name());
should_error.add_field(fname.clone(), new); should_error.add_field(fname.clone(), new);
test_doc.send(should_clear); test_doc.send(should_clear);
let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
@ -2064,10 +2064,10 @@ mod document_files {
let f0data = Uuid::new_v4(); let f0data = Uuid::new_v4();
let f1bad_data = "NotUuid"; let f1bad_data = "NotUuid";
let f1good_data = Uuid::nil(); let f1good_data = Uuid::nil();
let mut bad_addition = Addition::new(); let mut bad_addition = Addition::new(test_doc.doc_name());
bad_addition.add_field(&f0name, f0data.clone()); bad_addition.add_field(&f0name, f0data.clone());
bad_addition.add_field(&f1name, f1bad_data); bad_addition.add_field(&f1name, f1bad_data);
let mut good_addition = Addition::new(); let mut good_addition = Addition::new(test_doc.doc_name());
good_addition.add_field(&f0name, f0data.clone()); good_addition.add_field(&f0name, f0data.clone());
good_addition.add_field(&f1name, f1good_data.clone()); good_addition.add_field(&f1name, f1good_data.clone());
test_doc.send(bad_addition); test_doc.send(bad_addition);
@ -2110,7 +2110,7 @@ mod document_files {
update.get_values_mut().add_field(fname.clone(), new); update.get_values_mut().add_field(fname.clone(), new);
doc.send(update); doc.send(update);
doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
let mut old_addition = Addition::new(); let mut old_addition = Addition::new(doc.doc_name());
old_addition.add_field(&fname, old); old_addition.add_field(&fname, old);
doc.send(old_addition); doc.send(old_addition);
let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
@ -2124,7 +2124,7 @@ mod document_files {
} }
_ => unreachable!("got {:?}: should have gotten a reply", action), _ => unreachable!("got {:?}: should have gotten a reply", action),
} }
let mut new_addition = Addition::new(); let mut new_addition = Addition::new(doc.doc_name());
new_addition.add_field(fname.clone(), new); new_addition.add_field(fname.clone(), new);
doc.send(new_addition); doc.send(new_addition);
let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
@ -2208,7 +2208,7 @@ mod document_files {
let mut calc = Calculation::new(Operand::Add); let mut calc = Calculation::new(Operand::Add);
calc.add_value(FieldType::DateTime).unwrap(); calc.add_value(FieldType::DateTime).unwrap();
calc.add_value(duration.clone()).unwrap(); calc.add_value(duration.clone()).unwrap();
let mut addition = Addition::new(); let mut addition = Addition::new(doc.doc_name());
addition.add_field(&fname, calc); addition.add_field(&fname, calc);
let start = Utc::now() + duration; let start = Utc::now() + duration;
doc.send(addition); doc.send(addition);
@ -2302,7 +2302,7 @@ mod document_files {
doc.populate([value.into()].to_vec()); doc.populate([value.into()].to_vec());
doc.send(Delete::new(Query::internal())); doc.send(Delete::new(Query::internal()));
doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
let mut addition = Addition::new(); let mut addition = Addition::new(doc.doc_name());
addition.add_field(&fname, value.clone()); addition.add_field(&fname, value.clone());
doc.send(addition); doc.send(addition);
let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap();

View File

@ -188,7 +188,7 @@ mod sessions {
let mut ids: HashSet<Uuid> = HashSet::new(); let mut ids: HashSet<Uuid> = HashSet::new();
let count = 10; let count = 10;
for _ in 0..count { for _ in 0..count {
let msg = Setup::message(Addition::new()); let msg = Setup::message(Addition::new(Session::doc_names()[0].clone()));
setup.send(msg); setup.send(msg);
let result = setup.recv().unwrap(); let result = setup.recv().unwrap();
match result.get_action() { match result.get_action() {
@ -211,7 +211,7 @@ mod sessions {
#[test] #[test]
fn expire_default_is_an_hour_from_now() { fn expire_default_is_an_hour_from_now() {
let setup = Setup::new(); let setup = Setup::new();
let msg = Setup::message(Addition::new()); let msg = Setup::message(Addition::new(Session::doc_names()[0].clone()));
let start_time = Utc::now() + Duration::from_hours(1); let start_time = Utc::now() + Duration::from_hours(1);
setup.send(msg); setup.send(msg);
let result = setup.recv().unwrap(); let result = setup.recv().unwrap();
@ -238,7 +238,7 @@ mod sessions {
fn session_ids_error_when_not_unique() { fn session_ids_error_when_not_unique() {
let setup = Setup::new(); let setup = Setup::new();
let id = Uuid::new_v4(); let id = Uuid::new_v4();
let mut addition = Addition::new(); let mut addition = Addition::new(Session::doc_names()[0].clone());
addition.add_field(Name::english("id"), id); addition.add_field(Name::english("id"), id);
setup.send(Setup::message(addition.clone())); setup.send(Setup::message(addition.clone()));
setup.recv().unwrap(); setup.recv().unwrap();
@ -259,7 +259,7 @@ mod sessions {
let setup = Setup::new(); let setup = Setup::new();
let id = Uuid::new_v4(); let id = Uuid::new_v4();
let timestamp = Utc::now() + Duration::from_secs(60); let timestamp = Utc::now() + Duration::from_secs(60);
let mut addition = Addition::new(); let mut addition = Addition::new(Session::doc_names()[0].clone());
addition.add_field(Name::english("id"), id.clone()); addition.add_field(Name::english("id"), id.clone());
addition.add_field(Name::english("expire"), timestamp); addition.add_field(Name::english("expire"), timestamp);
setup.send(Setup::message(addition)); setup.send(Setup::message(addition));
@ -314,10 +314,10 @@ mod sessions {
let duration = Duration::from_secs(60); let duration = Duration::from_secs(60);
let expire1 = Utc::now() + duration; let expire1 = Utc::now() + duration;
let expire2 = Utc::now() - duration; let expire2 = Utc::now() - duration;
let mut addition1 = Addition::new(); let mut addition1 = Addition::new(Session::doc_names()[0].clone());
addition1.add_field(Name::english("id"), id1.clone()); addition1.add_field(Name::english("id"), id1.clone());
addition1.add_field(Name::english("expire"), expire1); addition1.add_field(Name::english("expire"), expire1);
let mut addition2 = Addition::new(); let mut addition2 = Addition::new(Session::doc_names()[0].clone());
addition2.add_field(Name::english("id"), id2); addition2.add_field(Name::english("id"), id2);
addition2.add_field(Name::english("expire"), expire2); addition2.add_field(Name::english("expire"), expire2);
setup.send(Setup::message(addition1)); setup.send(Setup::message(addition1));

View File

@ -54,7 +54,11 @@ impl MoreThanText {
match result.get_action() { match result.get_action() {
MsgAction::Records(data) => { MsgAction::Records(data) => {
if data.len() == 0 { if data.len() == 0 {
self.recursive_session_request(rx, Addition::new().into(), msg) self.recursive_session_request(
rx,
Addition::new(Session::doc_names()[0].clone()).into(),
msg,
)
} else { } else {
let rec = data.iter().last().unwrap(); let rec = data.iter().last().unwrap();
let field = rec.get(Name::english("id")).unwrap(); let field = rec.get(Name::english("id")).unwrap();
@ -71,7 +75,7 @@ impl MoreThanText {
pub fn validate_session(&mut self, session: Option<String>) -> Uuid { pub fn validate_session(&mut self, session: Option<String>) -> Uuid {
let (tx, rx) = channel(); let (tx, rx) = channel();
let sender_id = self.queue.add_sender(tx); let sender_id = self.queue.add_sender(tx);
let new_session: MsgAction = Addition::new().into(); let new_session: MsgAction = Addition::new(Session::doc_names()[0].clone()).into();
let action = match session { let action = match session {
Some(data) => match Uuid::try_from(data.as_str()) { Some(data) => match Uuid::try_from(data.as_str()) {
Ok(id) => { Ok(id) => {