use super::{acked, agent, nothing};
use crate::attention::*;
use crate::git_tree::AgentState;
use crate::ui_state::SeenKind;
const AUTH_SHAPED: &str = r#"{"type":"error","status":401,"message":"Unauthorized"}"#;
#[test]
fn a_raised_flag_is_attention_and_its_stamp_is_the_watermark() {
let mut ag = agent("a");
ag.flagged = Some(crate::monitor::Flag {
at: "7".into(),
reason: "please look at this one".into(),
});
let att = attention(&ag, "ws", ¬hing);
assert!(att.flagged && att.any());
assert_eq!(att.kinds(), vec![AttentionKind::Flagged]);
assert_eq!(
evidence(&ag),
vec![(SeenKind::Flag, "7".to_string())],
"the raising row's stamp is what an acknowledgement records"
);
assert!(!attention(&ag, "ws", &acked(SeenKind::Flag, "7")).flagged);
ag.flagged = Some(crate::monitor::Flag {
at: "8".into(),
reason: "and again".into(),
});
assert!(attention(&ag, "ws", &acked(SeenKind::Flag, "7")).flagged);
assert!(attention(&ag, "ws", &acked(SeenKind::Stopped, "8")).flagged);
}
#[test]
fn the_flagged_word_says_a_human_should_look() {
let said = AttentionKind::Flagged.says();
assert!(said.contains("flagged"), "{said}");
assert!(said.contains("reason"), "{said}");
}
#[test]
fn a_refused_rest_earns_the_refused_word_and_not_stoppeds() {
let mut ag = agent("a");
ag.state = AgentState::Stopped;
let mine = attention(&ag, "ws", ¬hing);
assert_eq!(mine.kinds(), vec![AttentionKind::Stopped]);
ag.failure = Some(AUTH_SHAPED.to_owned());
let theirs = attention(&ag, "ws", ¬hing);
assert_eq!(theirs.kinds(), vec![AttentionKind::Refused]);
assert_eq!(mine.any(), theirs.any());
assert!(theirs.stopped, "it is still rule 2 that fired");
}
#[test]
fn the_refused_word_names_the_act() {
let said = AttentionKind::Refused.says();
assert!(said.contains("refused at the provider"), "{said}");
assert!(said.contains("sign a provider in"), "{said}");
}
#[test]
fn an_acked_refused_rest_still_stirs_nothing() {
let mut ag = agent("a");
ag.state = AgentState::Stopped;
ag.failure = Some(AUTH_SHAPED.to_owned());
assert!(
attention(&ag, "ws", &acked(SeenKind::Stopped, "tip-a"))
.kinds()
.is_empty()
);
}