use super::{AGENT, write_msg};
use crate::transcript::{EntryKind, build};
use tempfile::tempdir;
pub(super) fn kind_of(name: &str, bytes: &[u8]) -> EntryKind {
let dir = tempdir().unwrap();
write_msg(dir.path(), name, bytes);
let mut t = build(dir.path(), AGENT);
assert_eq!(t.entries.len(), 1, "one entry expected for {name}");
t.entries.remove(0).kind
}
#[test]
fn delivered_md_strips_the_deposit_envelope_off_the_body() {
assert_eq!(
kind_of(
"001-user.md",
b"---\nfrom: user\ndeposited_at: 2026-08-02T04:00:00Z\n---\nis this thing on?\n"
),
EntryKind::Delivered {
sender: "user".into(),
epitaph: None,
body: "is this thing on?\n".into()
}
);
}
#[test]
fn delivered_md_without_an_envelope_is_the_whole_file() {
assert_eq!(
kind_of("001-alice.md", b"hi there\n"),
EntryKind::Delivered {
sender: "alice".into(),
epitaph: None,
body: "hi there\n".into()
}
);
}
#[test]
fn delivered_result_message_with_no_content_has_an_empty_body() {
assert_eq!(
kind_of(
"001-kid.md",
b"---\nfrom: kid\ndeposited_at: t\nepitaph: died\nterminal_ref: sha\n---\n"
),
EntryKind::Delivered {
sender: "kid".into(),
epitaph: Some(crate::inboxview::Epitaph::Died),
body: String::new()
}
);
}
#[test]
fn delivered_sender_keeps_internal_hyphens() {
let EntryKind::Delivered { sender, .. } = kind_of("001-claude-fable.md", b"x") else {
panic!("expected delivered");
};
assert_eq!(sender, "claude-fable");
}
mod model;
mod tools;
#[test]
fn unparseable_names_go_to_raw_bucket_not_dropped() {
let dir = tempdir().unwrap();
for n in [
"README",
"readme.md",
"-x.md",
"abc-x.md",
"003-.md",
"001-note.txt",
] {
write_msg(dir.path(), n, b"body");
}
let t = build(dir.path(), AGENT);
assert_eq!(t.entries.len(), 6, "none dropped");
assert!(t.entries.iter().all(|e| e.kind == EntryKind::Raw));
assert!(t.entries.iter().any(|e| e.name == "001-note.txt"));
}
#[test]
fn raw_entry_keeps_verbatim_bytes() {
let dir = tempdir().unwrap();
write_msg(dir.path(), "README", b"\x00\x01raw");
let t = build(dir.path(), AGENT);
assert_eq!(t.entries[0].raw, b"\x00\x01raw");
}