use super::super::status::aggregate_portfolio_status;
use super::{DigestScope, build_digest_messages, deterministic_narrative, parse_scope};
#[test]
fn parse_scope_variants() {
assert_eq!(parse_scope(None).unwrap(), DigestScope::Portfolio);
assert_eq!(parse_scope(Some("")).unwrap(), DigestScope::Portfolio);
assert_eq!(
parse_scope(Some("portfolio")).unwrap(),
DigestScope::Portfolio
);
assert_eq!(
parse_scope(Some("project:alpha")).unwrap(),
DigestScope::Project("alpha".to_string())
);
assert!(parse_scope(Some("project:")).is_err());
assert!(parse_scope(Some("nonsense")).is_err());
}
#[test]
fn deterministic_narrative_marks_fallback() {
let status = aggregate_portfolio_status(&[], &[], &[], &[]);
let text = deterministic_narrative("portfolio", &status);
assert!(
text.contains("deterministic fallback"),
"must be clearly marked: {text}"
);
assert!(text.contains("Projects: 0"), "must carry counts: {text}");
assert!(text.contains("Most recent activity: none"));
}
#[test]
fn build_digest_messages_grounds_on_snapshot() {
let status = aggregate_portfolio_status(&[], &[], &[], &[]);
let messages = build_digest_messages("portfolio", &status);
assert_eq!(messages.len(), 2);
assert_eq!(messages[0].role, "system");
assert_eq!(messages[1].role, "user");
let user = messages[1].content.as_deref().unwrap_or_default();
assert!(user.contains("Scope: portfolio"));
assert!(
user.contains("\"project_count\": 0"),
"user message must embed the deterministic snapshot: {user}"
);
}