use crate::tui::onboarding::OnboardingWizard;
use crossterm::event::{KeyCode, KeyEvent, KeyEventKind, KeyEventState, KeyModifiers};
fn key(code: KeyCode) -> KeyEvent {
KeyEvent {
code,
modifiers: KeyModifiers::NONE,
kind: KeyEventKind::Press,
state: KeyEventState::NONE,
}
}
#[test]
fn fresh_wizard_starts_with_zero_scroll() {
let w = OnboardingWizard::default();
assert_eq!(w.user_scroll_offset, 0);
}
#[test]
fn page_down_advances_scroll_by_five() {
let mut w = OnboardingWizard::default();
let _ = w.handle_key(key(KeyCode::PageDown));
assert_eq!(w.user_scroll_offset, 5);
}
#[test]
fn multiple_page_downs_accumulate() {
let mut w = OnboardingWizard::default();
let _ = w.handle_key(key(KeyCode::PageDown));
let _ = w.handle_key(key(KeyCode::PageDown));
let _ = w.handle_key(key(KeyCode::PageDown));
assert_eq!(w.user_scroll_offset, 15);
}
#[test]
fn page_up_subtracts_five() {
let mut w = OnboardingWizard::default();
let _ = w.handle_key(key(KeyCode::PageDown));
let _ = w.handle_key(key(KeyCode::PageDown));
assert_eq!(w.user_scroll_offset, 10);
let _ = w.handle_key(key(KeyCode::PageUp));
assert_eq!(w.user_scroll_offset, 5);
}
#[test]
fn page_up_at_zero_saturates_does_not_panic() {
let mut w = OnboardingWizard::default();
let _ = w.handle_key(key(KeyCode::PageUp));
let _ = w.handle_key(key(KeyCode::PageUp));
let _ = w.handle_key(key(KeyCode::PageUp));
assert_eq!(w.user_scroll_offset, 0);
}
#[test]
fn next_step_resets_user_scroll() {
let mut w = OnboardingWizard::default();
let _ = w.handle_key(key(KeyCode::PageDown));
let _ = w.handle_key(key(KeyCode::PageDown));
assert_eq!(w.user_scroll_offset, 10);
w.next_step();
assert_eq!(w.user_scroll_offset, 0);
}
#[test]
fn prev_step_resets_user_scroll() {
let mut w = OnboardingWizard::default();
let _ = w.handle_key(key(KeyCode::PageDown));
assert_eq!(w.user_scroll_offset, 5);
let _ = w.prev_step();
assert_eq!(w.user_scroll_offset, 0);
}
#[test]
fn page_keys_do_not_advance_step_or_focus() {
let mut w = OnboardingWizard::default();
let original_step = w.step;
let original_field = w.focused_field;
let _ = w.handle_key(key(KeyCode::PageDown));
assert_eq!(w.step, original_step, "Page Down must not change the step");
assert_eq!(
w.focused_field, original_field,
"Page Down must not move focus"
);
}