use crate::brain::agent::context::AgentContext;
use crate::brain::agent::service::nudge::{
PRESSURE_WARN_CEILING, PRESSURE_WARN_FLOOR, context_pressure_warning, in_pressure_warning_band,
should_emit_pressure_warning,
};
use uuid::Uuid;
#[test]
fn just_below_floor_is_not_in_band() {
assert!(!in_pressure_warning_band(54.9));
assert!(!in_pressure_warning_band(54.0));
assert!(!in_pressure_warning_band(0.0));
}
#[test]
fn at_floor_is_in_band() {
assert!(in_pressure_warning_band(55.0));
}
#[test]
fn mid_band_is_in_band() {
assert!(in_pressure_warning_band(60.0));
assert!(in_pressure_warning_band(63.9));
}
#[test]
fn just_below_ceiling_is_in_band() {
assert!(in_pressure_warning_band(64.9));
assert!(!in_pressure_warning_band(65.0));
assert!(!in_pressure_warning_band(90.0));
assert!(!in_pressure_warning_band(100.0));
}
#[test]
fn band_edges_match_constants() {
assert_eq!(PRESSURE_WARN_FLOOR, 55.0);
assert_eq!(PRESSURE_WARN_CEILING, 65.0);
}
#[test]
fn emits_on_first_entry_into_band() {
assert_eq!(
should_emit_pressure_warning(60.0, false),
Some(context_pressure_warning())
);
}
#[test]
fn does_not_emit_when_already_emitted() {
assert_eq!(should_emit_pressure_warning(60.0, true), None);
assert_eq!(should_emit_pressure_warning(64.0, true), None);
}
#[test]
fn does_not_emit_outside_band() {
assert_eq!(should_emit_pressure_warning(40.0, false), None);
assert_eq!(should_emit_pressure_warning(54.9, false), None);
assert_eq!(should_emit_pressure_warning(65.0, false), None);
assert_eq!(should_emit_pressure_warning(80.0, false), None);
}
#[test]
fn re_arms_when_usage_drops_below_floor() {
assert!(should_emit_pressure_warning(58.0, false).is_some());
assert!(should_emit_pressure_warning(58.0, true).is_none());
assert!(should_emit_pressure_warning(61.0, false).is_some());
}
#[test]
fn warning_text_mentions_persist_and_compaction() {
let w = context_pressure_warning();
assert!(w.contains("compaction"));
assert!(w.contains("persist"));
assert!(w.contains("disk"));
assert!(!w.contains('%'));
}
#[test]
fn appending_warning_to_brain_raises_token_count() {
let session_id = Uuid::new_v4();
let mut context = AgentContext::new(session_id, 100_000);
let brain = "You are a helpful agent.".to_string();
context.system_brain = Some(brain.clone());
context.token_count = AgentContext::estimate_tokens(&brain);
let tokens_before = context.token_count;
let warning = context_pressure_warning();
context.system_brain.as_mut().unwrap().push_str(warning);
context.token_count += AgentContext::estimate_tokens(warning);
assert!(context.token_count > tokens_before);
assert!(
context
.system_brain
.as_ref()
.unwrap()
.contains("SYSTEM WARNING")
);
}