use crate::tui::onboarding::{AuthField, OnboardingStep, OnboardingWizard, PROVIDERS};
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
#[test]
fn xiaomi_keyed_lands_on_api_key_field() {
let mut wizard = OnboardingWizard::new();
let idx = PROVIDERS
.iter()
.position(|p| p.id == "xiaomi")
.expect("xiaomi present in onboarding PROVIDERS");
wizard.step = OnboardingStep::ProviderAuth;
wizard.auth_field = AuthField::Provider;
wizard.ps.selected_provider = idx;
let _ = wizard.handle_key(KeyEvent::new(KeyCode::Enter, KeyModifiers::empty()));
assert_eq!(
wizard.auth_field,
AuthField::ApiKey,
"Xiaomi is keyed now — selecting it must land on the API-key field"
);
}
#[test]
fn xiaomi_provider_entry_requires_a_key() {
let xiaomi = PROVIDERS
.iter()
.find(|p| p.id == "xiaomi")
.expect("xiaomi in PROVIDERS");
assert!(
!xiaomi.key_label.is_empty(),
"Xiaomi must have a non-empty key_label so onboarding prompts for a key"
);
}
#[test]
#[allow(clippy::field_reassign_with_default)]
fn xiaomi_enabled_without_key_is_not_active() {
use crate::config::{ProviderConfig, ProviderConfigs};
let mut providers = ProviderConfigs::default();
providers.xiaomi = Some(ProviderConfig {
enabled: true,
default_model: Some("mimo-v2.5-pro".to_string()),
..Default::default()
});
let (provider, _) = providers.active_provider_and_model();
assert_eq!(
provider, "none",
"an enabled but key-less Xiaomi must be skipped, not selected as active"
);
}
#[test]
#[allow(clippy::field_reassign_with_default)]
fn xiaomi_enabled_with_key_is_active() {
use crate::config::{ProviderConfig, ProviderConfigs};
let mut providers = ProviderConfigs::default();
providers.xiaomi = Some(ProviderConfig {
enabled: true,
api_key: Some("sk-user-key".to_string()),
default_model: Some("mimo-v2.5-pro".to_string()),
..Default::default()
});
let (provider, model) = providers.active_provider_and_model();
assert_eq!(provider, "xiaomi", "a keyed, enabled Xiaomi must be active");
assert_eq!(model, "mimo-v2.5-pro");
}
#[tokio::test]
async fn xiaomi_models_fetch_returns_mimo_list() {
let idx = PROVIDERS
.iter()
.position(|p| p.id == "xiaomi")
.expect("xiaomi in PROVIDERS");
let models = crate::tui::onboarding::fetch_provider_models(idx, None, None, None).await;
assert!(
!models.is_empty(),
"/models must show a model list for Xiaomi (was empty)"
);
assert!(
models.iter().any(|m| m.contains("mimo")),
"expected mimo models, got {models:?}"
);
}