rmcl 0.4.0

A fully featured Minecraft TUI launcher
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
use ratatui::{Terminal, backend::TestBackend};

use super::*;

fn key(code: KeyCode) -> KeyEvent {
    KeyEvent::new(code, KeyModifiers::NONE)
}

#[test]
fn offline_account_requires_a_microsoft_account_and_can_be_dismissed() {
    let temp = tempfile::tempdir().unwrap();
    let mut state = AccountState {
        store: AccountStore::empty_for_test(temp.path().join("accounts.json")),
        list_state: Default::default(),
        add_mode: AddMode::None,
    };

    assert!(handle_key(&key(KeyCode::Char('a')), &mut state));
    assert!(matches!(state.add_mode, AddMode::ChooseType));

    assert!(handle_key(&key(KeyCode::Char('o')), &mut state));
    assert!(matches!(state.add_mode, AddMode::OfflineBlocked));

    assert!(handle_key(&key(KeyCode::Esc), &mut state));
    assert!(matches!(state.add_mode, AddMode::None));
}

#[test]
fn account_type_popup_uses_the_theme_surface() {
    let temp = tempfile::tempdir().unwrap();
    let mut state = AccountState {
        store: AccountStore::empty_for_test(temp.path().join("accounts.json")),
        list_state: Default::default(),
        add_mode: AddMode::ChooseType,
    };
    let mut terminal = Terminal::new(TestBackend::new(60, 12)).unwrap();

    terminal
        .draw(|frame| render(frame, frame.area(), FocusedArea::Account, &mut state))
        .unwrap();

    assert_eq!(
        terminal.backend().buffer().cell((11, 3)).unwrap().bg,
        THEME.as_ref().surface()
    );
}