use super::*;
#[test]
fn a_top_level_key_is_a_field_and_a_nested_one_is_not() {
let top = br#"{"type":"assistant","sessionKind":"bg","message":{"role":"assistant"}}"#;
let f = lineage_fields(top).expect("an object");
assert_eq!(f.session_kind.as_deref(), Some("bg"));
let nested = br#"{"type":"user","message":{"role":"user","content":"sessionKind is bg"},"input":{"sessionKind":"bg"}}"#;
let f = lineage_fields(nested).expect("an object");
assert_eq!(
f.session_kind, None,
"a key inside a payload is not a top-level field"
);
assert!(f.no_session_lineage());
}
#[test]
fn the_handoff_child_id_is_read_from_the_same_walk() {
let line = br#"{"type":"continued-in","timestamp":"2026-06-07T05:10:00.000Z","sessionId":"11111111-2222-4333-8444-555555555555","continuedInSessionId":"99999999-2222-4333-8444-555555555555"}"#;
let f = lineage_fields(line).expect("an object");
assert_eq!(
f.continued_in_session_id.as_deref(),
Some("99999999-2222-4333-8444-555555555555")
);
assert_eq!(f.session_kind, None);
assert!(!f.no_session_lineage());
}
#[test]
fn both_fields_ride_one_line_and_whitespace_around_the_colon_is_the_same_record() {
let line = br#"{ "type" : "assistant" , "sessionKind" : "bg" , "continuedInSessionId" : "99999999-2222-4333-8444-555555555555" }"#;
let f = lineage_fields(line).expect("an object");
assert_eq!(f.session_kind.as_deref(), Some("bg"));
assert_eq!(
f.continued_in_session_id.as_deref(),
Some("99999999-2222-4333-8444-555555555555")
);
}
#[test]
fn a_blank_or_unframed_line_is_not_an_object() {
assert_eq!(lineage_fields(b""), None);
assert_eq!(lineage_fields(b" \n"), None);
assert_eq!(lineage_fields(b"not json at all"), None);
}
#[test]
fn a_non_string_value_yields_no_field_rather_than_a_fabricated_one() {
let line = br#"{"type":"assistant","sessionKind":null,"continuedInSessionId":7}"#;
let f = lineage_fields(line).expect("an object");
assert_eq!(f.session_kind, None);
assert_eq!(f.continued_in_session_id, None);
}
#[test]
fn the_prefilter_admits_exactly_the_lines_the_walk_can_answer() {
assert!(line_has_lineage_key(
br#"{"type":"assistant","sessionKind":"bg"}"#
));
assert!(line_has_lineage_key(
br#"{"type":"continued-in","continuedInSessionId":"x"}"#
));
assert!(
!line_has_lineage_key(br#"{"type":"user","message":{"role":"user","content":"hi"}}"#),
"an ordinary record carries neither key"
);
assert!(
!line_has_lineage_key(
br#"{"type":"user","message":{"role":"user","content":"the \"sessionKind\" key"}}"#
),
"an escaped quote is not the needle's quote"
);
assert!(line_has_lineage_key(
br#"{"type":"user","input":{"sessionKind":"bg"}}"#
));
assert_eq!(
lineage_fields(br#"{"type":"user","input":{"sessionKind":"bg"}}"#)
.expect("an object")
.session_kind,
None
);
}
#[test]
fn a_torn_line_carries_no_key_instead_of_failing() {
let torn = br#"{"type":"assistant","sessionKind":"bg","message":{"role":"assis"#;
assert_eq!(lineage_fields(torn), None);
let torn_early = br#"{"type":"assistant","message":{"role":"assis"#;
assert_eq!(lineage_fields(torn_early), None);
}
#[test]
fn a_malformed_object_interior_stops_the_walk_rather_than_guessing() {
assert_eq!(
lineage_fields(br#"{"sessionKind":"bg", 7:"x"}"#),
None,
"a bare number at a key position ends the walk"
);
assert_eq!(
lineage_fields(br#"{"slug" "quiet-harbor-relay"}"#),
None,
"a key with no colon ends the walk"
);
}
#[test]
fn the_slug_and_the_timestamp_ride_the_same_walk() {
let f = lineage_fields(
br#"{"type":"user","timestamp":"2026-06-07T05:00:00.000Z","slug":"quiet-harbor-relay"}"#,
)
.expect("an object");
assert_eq!(f.slug.as_deref(), Some("quiet-harbor-relay"));
assert_eq!(f.timestamp.as_deref(), Some("2026-06-07T05:00:00.000Z"));
assert!(f.no_session_lineage());
let empty = lineage_fields(br#"{"type":"user","slug":""}"#).expect("an object");
assert_eq!(empty.slug, None, "an empty slug binds nothing");
assert!(line_has_slug_key(br#"{"type":"user","slug":"x"}"#));
assert!(!line_has_slug_key(br#"{"type":"user","sessionKind":"bg"}"#));
}