#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DataModel {
pub name: String,
pub iri: String,
pub label: Option<String>,
pub last_modified: Option<String>,
pub is_builtin: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ResourceTypeSummary {
pub name: String,
pub iri: String,
pub label: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ResourceType {
pub name: String,
pub iri: String,
pub label: Option<String>,
pub is_builtin: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DataModelDetail {
pub name: String,
pub iri: String,
pub label: Option<String>,
pub last_modified: Option<String>,
pub resource_types: Vec<ResourceTypeSummary>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn data_model_full_construction_and_equality() {
let dm = DataModel {
name: "beol".into(),
iri: "http://api.dasch.swiss/ontology/0801/beol/v2".into(),
label: Some("The BEOL data-model".into()),
last_modified: Some("2024-05-27T13:43:26.233048Z".into()),
is_builtin: false,
};
let cloned = dm.clone();
assert_eq!(dm, cloned);
assert_eq!(dm.name, "beol");
assert_eq!(dm.iri, "http://api.dasch.swiss/ontology/0801/beol/v2");
assert_eq!(dm.label.as_deref(), Some("The BEOL data-model"));
assert_eq!(
dm.last_modified.as_deref(),
Some("2024-05-27T13:43:26.233048Z")
);
assert!(!dm.is_builtin);
}
#[test]
fn data_model_all_none_builtin() {
let dm = DataModel {
name: "knora-api".into(),
iri: "http://api.knora.org/ontology/knora-api/v2".into(),
label: None,
last_modified: None,
is_builtin: true,
};
let cloned = dm.clone();
assert_eq!(dm, cloned);
assert_eq!(dm.name, "knora-api");
assert_eq!(dm.iri, "http://api.knora.org/ontology/knora-api/v2");
assert_eq!(dm.label, None);
assert_eq!(dm.last_modified, None);
assert!(dm.is_builtin);
}
#[test]
fn data_model_label_some_last_modified_none() {
let dm = DataModel {
name: "limc".into(),
iri: "http://api.dasch.swiss/ontology/0603/limc/v2".into(),
label: Some("LIMC data-model".into()),
last_modified: None,
is_builtin: false,
};
let cloned = dm.clone();
assert_eq!(dm, cloned);
assert_eq!(dm.label.as_deref(), Some("LIMC data-model"));
assert_eq!(dm.last_modified, None);
assert!(!dm.is_builtin);
}
#[test]
fn resource_type_with_label_not_builtin() {
let rt = ResourceType {
name: "letter".into(),
iri: "http://api.dasch.swiss/ontology/0801/beol/v2#letter".into(),
label: Some("Letter".into()),
is_builtin: false,
};
let cloned = rt.clone();
assert_eq!(rt, cloned);
assert_eq!(rt.name, "letter");
assert_eq!(
rt.iri,
"http://api.dasch.swiss/ontology/0801/beol/v2#letter"
);
assert_eq!(rt.label.as_deref(), Some("Letter"));
assert!(!rt.is_builtin);
}
#[test]
fn resource_type_label_none_not_builtin() {
let rt = ResourceType {
name: "Archive".into(),
iri: "http://api.dasch.swiss/ontology/0801/beol/v2#Archive".into(),
label: None,
is_builtin: false,
};
let cloned = rt.clone();
assert_eq!(rt, cloned);
assert_eq!(rt.name, "Archive");
assert_eq!(rt.label, None);
assert!(!rt.is_builtin);
}
#[test]
fn resource_type_with_label_builtin() {
let rt = ResourceType {
name: "Region".into(),
iri: "http://api.knora.org/ontology/knora-api/v2#Region".into(),
label: Some("Region".into()),
is_builtin: true,
};
let cloned = rt.clone();
assert_eq!(rt, cloned);
assert_eq!(rt.name, "Region");
assert_eq!(rt.iri, "http://api.knora.org/ontology/knora-api/v2#Region");
assert_eq!(rt.label.as_deref(), Some("Region"));
assert!(rt.is_builtin);
}
#[test]
fn resource_type_label_none_builtin() {
let rt = ResourceType {
name: "LinkObj".into(),
iri: "http://api.knora.org/ontology/knora-api/v2#LinkObj".into(),
label: None,
is_builtin: true,
};
let cloned = rt.clone();
assert_eq!(rt, cloned);
assert_eq!(rt.name, "LinkObj");
assert_eq!(rt.label, None);
assert!(rt.is_builtin);
}
#[test]
fn resource_type_summary_with_label() {
let rt = ResourceTypeSummary {
name: "letter".into(),
iri: "http://api.dasch.swiss/ontology/0801/beol/v2#letter".into(),
label: Some("Letter".into()),
};
let cloned = rt.clone();
assert_eq!(rt, cloned);
assert_eq!(rt.name, "letter");
assert_eq!(
rt.iri,
"http://api.dasch.swiss/ontology/0801/beol/v2#letter"
);
assert_eq!(rt.label.as_deref(), Some("Letter"));
}
#[test]
fn resource_type_summary_without_label() {
let rt = ResourceTypeSummary {
name: "Archive".into(),
iri: "http://api.dasch.swiss/ontology/0801/beol/v2#Archive".into(),
label: None,
};
let cloned = rt.clone();
assert_eq!(rt, cloned);
assert_eq!(rt.name, "Archive");
assert_eq!(
rt.iri,
"http://api.dasch.swiss/ontology/0801/beol/v2#Archive"
);
assert_eq!(rt.label, None);
}
#[test]
fn data_model_detail_full_construction_and_equality() {
let detail = DataModelDetail {
name: "beol".into(),
iri: "http://api.dasch.swiss/ontology/0801/beol/v2".into(),
label: Some("The BEOL data-model".into()),
last_modified: Some("2024-05-27T13:43:26.233048Z".into()),
resource_types: vec![
ResourceTypeSummary {
name: "Archive".into(),
iri: "http://api.dasch.swiss/ontology/0801/beol/v2#Archive".into(),
label: Some("Archive".into()),
},
ResourceTypeSummary {
name: "letter".into(),
iri: "http://api.dasch.swiss/ontology/0801/beol/v2#letter".into(),
label: Some("Letter".into()),
},
],
};
let cloned = detail.clone();
assert_eq!(detail, cloned);
assert_eq!(detail.name, "beol");
assert_eq!(detail.iri, "http://api.dasch.swiss/ontology/0801/beol/v2");
assert_eq!(detail.label.as_deref(), Some("The BEOL data-model"));
assert_eq!(
detail.last_modified.as_deref(),
Some("2024-05-27T13:43:26.233048Z")
);
assert_eq!(detail.resource_types.len(), 2);
}
#[test]
fn data_model_detail_label_none_last_modified_none() {
let detail = DataModelDetail {
name: "minimal".into(),
iri: "http://api.dasch.swiss/ontology/0000/minimal/v2".into(),
label: None,
last_modified: None,
resource_types: vec![ResourceTypeSummary {
name: "Thing".into(),
iri: "http://api.dasch.swiss/ontology/0000/minimal/v2#Thing".into(),
label: None,
}],
};
let cloned = detail.clone();
assert_eq!(detail, cloned);
assert_eq!(detail.label, None);
assert_eq!(detail.last_modified, None);
assert_eq!(detail.resource_types.len(), 1);
assert_eq!(detail.resource_types[0].label, None);
}
#[test]
fn data_model_detail_empty_resource_types() {
let detail = DataModelDetail {
name: "empty".into(),
iri: "http://api.dasch.swiss/ontology/9999/empty/v2".into(),
label: Some("Empty data-model".into()),
last_modified: None,
resource_types: vec![],
};
let cloned = detail.clone();
assert_eq!(detail, cloned);
assert!(detail.resource_types.is_empty());
assert_eq!(detail.label.as_deref(), Some("Empty data-model"));
assert_eq!(detail.last_modified, None);
}
}