use crate::i18n::{tr, MessageKey};
use crate::state::{AppState, Message, SourceCard, ViewId};
use crate::views;
use iced_test::simulator;
#[test]
fn search_empty_state_offers_add_source() {
let state = AppState::default();
let mut ui = simulator(views::search_view(&state));
assert!(
ui.find(tr(state.locale, MessageKey::SearchAddSource)).is_ok(),
"empty search view must offer an 'add source' action"
);
}
#[test]
fn search_empty_cta_switches_to_sources() {
let state = AppState::default();
let mut ui = simulator(views::search_view(&state));
let _ = ui.click(tr(state.locale, MessageKey::SearchAddSource));
let messages: Vec<Message> = ui.into_messages().collect();
assert!(
messages.iter().any(|m| matches!(m, Message::Switch(ViewId::Sources))),
"clicking the CTA should switch to the Sources view"
);
}
#[test]
fn settings_view_has_advanced_toggle() {
let state = AppState::default();
let mut ui = simulator(views::settings_view(&state));
assert!(
ui.find(tr(state.locale, MessageKey::SettingsAdvancedOff)).is_ok(),
"settings must show the advanced-view toggle"
);
}
#[test]
fn sources_view_renders_both_states() {
let empty = AppState::default();
let _ = simulator(views::sources_view(&empty));
let mut populated = AppState::default();
populated.sources.push(SourceCard {
display_name: "Docs".into(),
display_path: "/home/user/Docs".into(),
indexed: 12,
stale: 0,
failed: 0,
active: true,
source_id: "src-1".into(),
});
let mut ui = simulator(views::sources_view(&populated));
assert!(ui.find("Docs").is_ok(), "populated sources view must list the source name");
}