use super::life_status::LifeStatus;
use crate::disclosure::{Disclosure, PASSPORT_FIELD_DISCLOSURE};
#[test]
fn all_lists_every_variant() {
for status in LifeStatus::ALL {
match status {
LifeStatus::Original
| LifeStatus::Repurposed
| LifeStatus::Reused
| LifeStatus::Remanufactured
| LifeStatus::Waste => {}
}
}
assert_eq!(
LifeStatus::ALL.len(),
5,
"a variant was added to the match above but not to ALL"
);
}
#[test]
fn wire_forms_are_the_annex_xiii_strings() {
let quoted = [
(LifeStatus::Original, "original"),
(LifeStatus::Repurposed, "repurposed"),
(LifeStatus::Reused, "re-used"),
(LifeStatus::Remanufactured, "remanufactured"),
(LifeStatus::Waste, "waste"),
];
assert_eq!(
quoted.len(),
LifeStatus::ALL.len(),
"every status needs its Annex XIII string in this table"
);
for (status, expected) in "ed {
assert_eq!(
status.wire_str(),
*expected,
"{status:?} must carry the string the annex enumerates"
);
}
}
#[test]
fn serde_form_matches_wire_str() {
for status in LifeStatus::ALL {
let json = serde_json::to_string(status).expect("status serialises");
assert_eq!(
json,
format!("\"{}\"", status.wire_str()),
"serde and wire_str disagree for {status:?}"
);
let back: LifeStatus =
serde_json::from_str(&json).expect("status deserialises from its own wire form");
assert_eq!(back, *status, "{status:?} must survive a round trip");
}
}
#[test]
fn life_status_is_classified_individual() {
let class = PASSPORT_FIELD_DISCLOSURE
.iter()
.find(|(field, _)| *field == "lifeStatus")
.map(|(_, class)| *class);
assert_eq!(
class,
Some(Disclosure::Individual),
"lifeStatus must be classified Individual — unlisted means Public, and \
Annex XIII point 4 is the legitimate-interest tier"
);
}