use crate::channels::telegram::flow_chrome::{PlanKb, plan_state_chrome};
use crate::utils::plan_files::PlanModeState;
#[test]
fn editing_hides_keyboard_while_turn_active() {
let (label, kb) = plan_state_chrome(PlanModeState::PostInitEditing, true, false);
assert_eq!(label.as_deref(), Some("✍️ Editing plan"));
assert_eq!(
kb,
PlanKb::None,
"no actionable Approve button while the editing turn is still running"
);
}
#[test]
fn editing_shows_approve_at_settle() {
let (label, kb) = plan_state_chrome(PlanModeState::PostInitEditing, false, false);
assert_eq!(label.as_deref(), Some("✍️ Editing plan"));
assert_eq!(kb, PlanKb::ApproveDiscard);
}
#[test]
fn pre_init_never_shows_keyboard() {
assert_eq!(
plan_state_chrome(PlanModeState::PreInitEditing, true, false).1,
PlanKb::None
);
assert_eq!(
plan_state_chrome(PlanModeState::PreInitEditing, false, false).1,
PlanKb::None
);
}
#[test]
fn active_seed_window_keeps_discard_only_in_both_phases() {
let (running_label, running_kb) = plan_state_chrome(PlanModeState::Active, true, true);
assert_eq!(running_label.as_deref(), Some("⏳ Building checklist…"));
assert_eq!(running_kb, PlanKb::DiscardOnly);
let (done_label, done_kb) = plan_state_chrome(PlanModeState::Active, false, true);
assert!(
done_label.as_deref().unwrap_or_default().contains("retry"),
"a stalled seed surfaces the retry hint"
);
assert_eq!(done_kb, PlanKb::DiscardOnly);
}
#[test]
fn active_outside_seed_window_has_no_label() {
let (label, kb) = plan_state_chrome(PlanModeState::Active, false, false);
assert_eq!(label, None);
assert_eq!(kb, PlanKb::DiscardOnly);
}
#[test]
fn no_plan_has_no_chrome() {
assert_eq!(
plan_state_chrome(PlanModeState::NoPlan, false, false),
(None, PlanKb::None)
);
}