use super::super::tests::{load, mark, mk};
use super::*;
use tempfile::tempdir;
#[test]
fn seen_records_and_gates_by_oid() {
let d = tempdir().unwrap();
let mut ui = mk(d.path());
for (k, oid) in [
(SeenKind::Notify, "n1"),
(SeenKind::Stopped, "s1"),
(SeenKind::Budget, "b1"),
(SeenKind::Conflicted, "c1"),
] {
ui.record_seen("/w", "a-b", &mark(k, oid));
assert!(ui.is_seen(k, "/w", "a-b", oid));
assert!(!ui.is_seen(k, "/w", "a-b", "moved")); }
assert!(!ui.is_seen(SeenKind::Notify, "/other", "a-b", "n1"));
assert!(!ui.is_seen(SeenKind::Notify, "/w", "zzz", "n1"));
}
#[test]
fn record_seen_coerces_wrong_typed_slot() {
let mut ui = load(br#"{"seen":{"/w":"oops"}}"#);
ui.record_seen("/w", "a", &mark(SeenKind::Budget, "b1"));
assert!(ui.is_seen(SeenKind::Budget, "/w", "a", "b1"));
}
#[test]
fn record_seen_takes_every_mark_at_once() {
let d = tempdir().unwrap();
let mut ui = mk(d.path());
ui.record_seen(
"/w",
"a",
&[
(SeenKind::Notify, "n1".to_string()),
(SeenKind::Stopped, "s1".to_string()),
],
);
assert!(ui.is_seen(SeenKind::Notify, "/w", "a", "n1"));
assert!(ui.is_seen(SeenKind::Stopped, "/w", "a", "s1"));
}
#[test]
fn record_seen_with_no_marks_materializes_nothing() {
let d = tempdir().unwrap();
let p = d.path().join("ui.json");
let mut ui = UiState::open(p.clone());
ui.record_seen("/w", "phantom", &[]);
let back = std::fs::read_to_string(&p).unwrap();
assert!(!back.contains("phantom"), "no slot for a phantom: {back}");
assert!(!back.contains("seen"), "no seen map at all: {back}");
}
#[test]
fn pinned_and_collapsed_roundtrip() {
let d = tempdir().unwrap();
let mut ui = mk(d.path());
assert!(!ui.is_collapsed("proj:/none")); ui.set_pinned(vec!["/a".into(), "/b".into()]);
assert_eq!(ui.pinned(), vec!["/a".to_string(), "/b".to_string()]);
ui.set_collapsed("proj:/x", true);
assert!(ui.is_collapsed("proj:/x"));
assert!(!ui.is_collapsed("proj:/y")); ui.set_collapsed("proj:/x", false); assert!(!ui.is_collapsed("proj:/x"));
}
#[test]
fn getters_filter_wrong_types() {
let mut ui = load(br#"{"pinned":["/a",7],"collapsed":["k",3]}"#);
assert_eq!(ui.pinned(), vec!["/a".to_string()]); assert!(ui.is_collapsed("k"));
ui.set_collapsed("m", true); assert!(ui.is_collapsed("m"));
assert!(ui.is_collapsed("k"));
}