use super::*;
use newt_core::model_card::CardApplicability as A;
use newt_core::BackendDestination;
fn active(card: &str) -> A {
A::Active {
card: card.to_string(),
}
}
fn inactive_model(card: &str) -> A {
A::InactiveModel {
card: card.to_string(),
bound_model: Some("bound".into()),
active_model: "other".into(),
}
}
fn inactive_destination(card: &str) -> A {
A::InactiveDestination {
card: card.to_string(),
bound_destination: BackendDestination::new(Some("http://a:1".into()), None),
active_destination: BackendDestination::new(Some("http://b:2".into()), None),
}
}
fn drive(seq: &[(Option<&str>, A)]) -> Vec<Vec<String>> {
let mut notices = CardNotices::default();
seq.iter()
.map(|(error, state)| {
let (next, lines) = notice_transition(¬ices, *error, state);
notices = next;
lines
})
.collect()
}
#[test]
fn every_governance_change_is_visible_and_dedupe_holds() {
let out = drive(&[
(None, active("a")), (None, active("a")), (None, active("b")), (None, A::None), (None, A::None), (None, active("a")), (None, inactive_model("a")), (None, inactive_model("a")), (None, active("a")), (None, inactive_destination("a")), (None, A::Undecided { card: "a".into() }), ]);
assert!(
out[0].is_empty(),
"startup Active stays quiet: {:?}",
out[0]
);
assert!(out[1].is_empty(), "dedupe: {:?}", out[1]);
assert!(
out[2][0].contains("`a`") && out[2][0].contains("`b`"),
"replacement names both: {:?}",
out[2]
);
assert!(out[3][0].contains("card removed"), "{:?}", out[3]);
assert!(out[4].is_empty(), "dedupe after removal: {:?}", out[4]);
assert!(out[5][0].contains("now applies"), "{:?}", out[5]);
assert!(
out[6][0].contains("card-derived behavior"),
"family-neutral wording: {:?}",
out[6]
);
assert!(out[7].is_empty(), "dedupe inactive: {:?}", out[7]);
assert!(out[8][0].contains("applies again"), "{:?}", out[8]);
assert!(out[9][0].contains("routed to"), "{:?}", out[9]);
assert!(out[10][0].contains("not established"), "{:?}", out[10]);
}
#[test]
fn error_lines_dedupe_and_recovery_is_visible() {
let out = drive(&[
(Some("card `x` — no such card"), A::None),
(Some("card `x` — no such card"), A::None), (None, active("x")), ]);
assert!(out[0][0].contains("no such card"), "{:?}", out[0]);
assert!(out[1].is_empty(), "same error dedupes: {:?}", out[1]);
assert!(
out[2].iter().any(|l| l.contains("recovered")),
"recovery visible: {:?}",
out[2]
);
assert!(
out[2].iter().any(|l| l.contains("now applies")),
"activation visible: {:?}",
out[2]
);
}
#[test]
fn family_only_cards_share_the_same_visible_transitions() {
let out = drive(&[
(None, inactive_model("nano-team")),
(None, active("nano-team")),
]);
assert!(
out[0][0].contains("family policy"),
"the prose names the family contribution: {:?}",
out[0]
);
assert!(out[1][0].contains("applies again"), "{:?}", out[1]);
}