use crate::v1_1::ehr_extract::common::extract_update_spec::ExtractUpdateSpec;
use openehr_base::validate::{InvariantViolation, Validate};
impl Validate for ExtractUpdateSpec {
fn validate_invariants(&self, out: &mut Vec<InvariantViolation>) {
crate::v1_1::validate::generated::extract_update_spec_core(
self.repeat_period.is_some(),
self.trigger_events.is_some(),
out,
);
}
}
#[cfg(test)]
mod tests {
use super::*;
fn spec(
repeat: bool,
triggers: Option<
openehr_base::containers::NonEmptyVec<
crate::v1_1::data_types::text::dv_coded_text::DvCodedText,
>,
>,
) -> ExtractUpdateSpec {
ExtractUpdateSpec {
persist_in_server: true,
repeat_period: repeat.then(|| {
crate::v1_1::data_types::quantity::date_time::dv_duration::DvDuration {
value: "P1D".to_owned(),
normal_status: None,
normal_range: None,
other_reference_ranges: None,
magnitude_status: None,
accuracy: None,
accuracy_is_percent: None,
}
}),
trigger_events: triggers,
update_method: crate::v1_1::data_types::text::code_phrase::CodePhrase {
terminology_id:
openehr_base::v1_2::base_types::identification::terminology_id::TerminologyId {
value: "openehr".to_owned(),
},
code_string: "999".to_owned(),
preferred_term: None,
},
}
}
#[test]
fn neither_mode_is_a_violation_and_either_passes() {
let v = spec(false, None).invariants();
assert!(
v.iter().any(|m| m.message.contains("Overall_validity")),
"got {v:?}"
);
assert_eq!(
spec(true, None).invariants(),
Vec::<InvariantViolation>::new()
);
}
}