Added default type functions.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 3m1s

This commit is contained in:
Jeff Baskin 2025-08-20 10:26:56 -04:00
parent 051fd9ebf6
commit c961cf49a8

View File

@ -989,9 +989,14 @@ mod fieldtypes {
let result = ftype.get_default();
match result {
Field::Uuid(data) => {
assert!(!ids.contains(&data), "found duplicate id {:?} in {:?}", data, ids);
assert!(
!ids.contains(&data),
"found duplicate id {:?} in {:?}",
data,
ids
);
ids.push(data.clone());
},
}
_ => unreachable!("got {:?}: should have been uuid", result),
}
}
@ -1078,19 +1083,38 @@ mod fields {
}
}
#[derive(Clone, Debug)]
enum DefaultSetting {
Value(Field),
FieldType,
None,
}
#[derive(Clone, Debug)]
struct FieldSetting {
fieldtype: FieldType,
default_setting: DefaultSetting,
}
impl FieldSetting {
fn new(ftype: FieldType) -> Self {
Self { fieldtype: ftype }
Self {
fieldtype: ftype,
default_setting: DefaultSetting::None,
}
}
fn get_type(&self) -> &FieldType {
&self.fieldtype
}
fn set_default(&mut self, value: DefaultSetting) {
self.default_setting = value;
}
fn get_default(&self) -> &DefaultSetting {
&self.default_setting
}
}
#[cfg(test)]
@ -1103,6 +1127,22 @@ mod fieldsettings {
for ftype in ftypes.into_iter() {
let fieldinfo = FieldSetting::new(ftype.clone());
assert_eq!(fieldinfo.get_type(), &ftype);
let dset = fieldinfo.get_default();
match dset {
DefaultSetting::None => {}
_ => unreachable!("got {:?}: should have been none", dset),
}
}
}
#[test]
fn can_default_be_changed() {
let mut fieldinfo = FieldSetting::new(FieldType::Uuid);
fieldinfo.set_default(DefaultSetting::FieldType);
let dset = fieldinfo.get_default();
match dset {
DefaultSetting::FieldType => {}
_ => unreachable!("got {:?}: should have been none", dset),
}
}
}
@ -1202,6 +1242,11 @@ impl DocDef {
}
}
fn use_default_function(&mut self, field_name: &str) {
let setting = self.fields.get_mut(field_name).unwrap();
setting.set_default(DefaultSetting::FieldType);
}
fn iter(&self) -> impl Iterator<Item = (&String, &FieldSetting)> {
self.fields.iter()
}
@ -1247,6 +1292,19 @@ mod docdefs {
assert_eq!(result.get_type(), &field_type);
}
}
#[test]
fn can_change_field_default_to_function() {
let mut docdef = DocDef::new();
let name = "defaultfunction";
docdef.add_field(name.to_string(), FieldType::StaticString);
docdef.use_default_function(name);
let dset = docdef.get_field(name).unwrap().get_default();
match dset {
DefaultSetting::FieldType => {}
_ => unreachable!("got {:?}: should have been field type", dset),
}
}
}
#[derive(Clone, Debug)]
@ -1560,10 +1618,18 @@ impl DocumentFile {
}
}
}
for (key, _) in self.docdef.iter() {
for (key, value) in self.docdef.iter() {
match holder.get_field(key) {
Some(_) => {}
None => return MTTError::DocumentFieldMissing(key.clone()).into(),
None => match value.get_default() {
DefaultSetting::Value(_) => {}
DefaultSetting::FieldType => {
holder.add_field(key.clone(), value.get_type().get_default())
}
DefaultSetting::None => {
return MTTError::DocumentFieldMissing(key.clone()).into()
}
},
}
}
self.docs.push(holder.clone());
@ -2058,6 +2124,29 @@ mod document_files {
_ => unreachable!("got {:?}: should have been a error", action),
}
}
#[test]
fn can_use_default_values() {
let doc_name = "default";
let mut docdef = create_docdef([FieldType::StaticString].to_vec());
docdef.use_default_function("field0");
let (queue, rx) = test_doc(doc_name, docdef, standard_routes());
let new_doc = Addition::new();
let msg = Message::new(doc_name, new_doc);
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(), 1);
for doc in docs.iter() {
let expected: Field = "".into();
assert_eq!(doc.get_field("field0").unwrap(), &expected);
}
}
_ => unreachable!("got {:?}: should have gotten a reply", action),
}
}
}
#[cfg(test)]