use crate::tui::onboarding::{OnboardingStep, OnboardingWizard, VoiceField, voice};
use crate::tui::provider_selector::EXISTING_KEY_SENTINEL;
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
fn seeded(field: VoiceField) -> OnboardingWizard {
let mut wizard = OnboardingWizard::new();
wizard.step = OnboardingStep::VoiceSetup;
wizard.voice_field = field;
wizard.stt_openai_compat_key_input = EXISTING_KEY_SENTINEL.to_string();
wizard.tts_openai_compat_key_input = EXISTING_KEY_SENTINEL.to_string();
wizard.tts_api_key_input = EXISTING_KEY_SENTINEL.to_string();
wizard
}
fn press(wizard: &mut OnboardingWizard, c: char) {
voice::handle_key(wizard, KeyEvent::new(KeyCode::Char(c), KeyModifiers::NONE));
}
#[test]
fn typing_into_a_seeded_tts_key_replaces_the_marker() {
let mut wizard = seeded(VoiceField::TtsApiKey);
press(&mut wizard, 's');
press(&mut wizard, 'k');
assert_eq!(wizard.tts_api_key_input, "sk");
}
#[test]
fn pasting_over_a_seeded_tts_key_replaces_the_marker() {
let mut wizard = seeded(VoiceField::TtsApiKey);
wizard.handle_paste("sk-pasted-key");
assert_eq!(wizard.tts_api_key_input, "sk-pasted-key");
}
#[test]
fn the_openai_compatible_key_fields_behave_the_same() {
let mut stt = seeded(VoiceField::SttOpenaiCompatKey);
stt.handle_paste("sk-stt-compat");
assert_eq!(stt.stt_openai_compat_key_input, "sk-stt-compat");
let mut tts = seeded(VoiceField::TtsOpenaiCompatKey);
press(&mut tts, 'x');
assert_eq!(tts.tts_openai_compat_key_input, "x");
}
#[test]
fn backspace_clears_a_seeded_key_whole() {
let mut wizard = seeded(VoiceField::TtsApiKey);
voice::handle_key(
&mut wizard,
KeyEvent::new(KeyCode::Backspace, KeyModifiers::NONE),
);
assert!(wizard.tts_api_key_input.is_empty());
}
#[test]
fn an_ordinary_typed_key_is_still_appended_to() {
let mut wizard = seeded(VoiceField::TtsApiKey);
press(&mut wizard, 'a');
press(&mut wizard, 'b');
press(&mut wizard, 'c');
assert_eq!(wizard.tts_api_key_input, "abc");
}
#[test]
fn a_non_secret_voice_field_is_unaffected() {
let mut wizard = seeded(VoiceField::SttOpenaiCompatUrl);
wizard.stt_openai_compat_base_url = "https://example.invalid".to_string();
press(&mut wizard, '/');
assert_eq!(
wizard.stt_openai_compat_base_url,
"https://example.invalid/"
);
}