use crate::common::resource::authored_resource::AuthoredResource;
use openehr_base::validate::{InvariantViolation, Validate};
impl Validate for AuthoredResource {
fn validate_invariants(&self, out: &mut Vec<InvariantViolation>) {
crate::validate::generated::authored_resource_core(
self.is_controlled,
self.revision_history.is_some(),
out,
);
}
}
#[cfg(test)]
mod tests {
use super::*;
fn resource(is_controlled: Option<bool>) -> AuthoredResource {
AuthoredResource {
original_language: crate::data_types::text::code_phrase::CodePhrase {
terminology_id:
openehr_base::base_types::identification::terminology_id::TerminologyId {
value: "ISO_639-1".to_owned(),
},
code_string: "en".to_owned(),
preferred_term: None,
},
is_controlled,
translations: None,
description: None,
revision_history: None,
}
}
#[test]
fn uncontrolled_without_history_passes() {
assert!(resource(Some(false)).invariants().is_empty());
}
#[test]
fn controlled_without_history_is_a_violation() {
let v = resource(Some(true)).invariants();
assert!(
v.iter()
.any(|m| m.message.contains("Revision_history_valid")),
"got {v:?}"
);
}
#[test]
fn absent_is_controlled_asserts_nothing() {
assert!(resource(None).invariants().is_empty());
}
}