sabiql 3.0.1

Fast, safe-by-design, Vim-first DB TUI with ER diagrams
use super::*;

#[test]
fn sql_completion_popup_uses_injected_theme_styles() {
    let mut state = postgres_connected_state();
    let now = test_instant();
    let mut terminal = create_test_terminal();
    let theme = ThemePalette {
        component: ComponentTokens {
            modal: ModalTokens {
                border: Color::Rgb(0xdd, 0x44, 0x11),
                ..DEFAULT_THEME.component.modal
            },
            editor: EditorTokens {
                completion_selected_bg: Color::Rgb(0x22, 0x66, 0x33),
                ..DEFAULT_THEME.component.editor
            },
            ..DEFAULT_THEME.component
        },
        ..DEFAULT_THEME
    };

    state.modal.set_mode(InputMode::SqlModal);
    state
        .sql_modal
        .editor_mut_for_input()
        .set_content("SELECT ".to_string());
    state.sql_modal.enter_editing();
    let candidates = vec![
        CompletionCandidate {
            text: "users".into(),
            kind: CompletionKind::Table,
            score: 100,
        },
        CompletionCandidate {
            text: "posts".into(),
            kind: CompletionKind::Table,
            score: 90,
        },
    ];
    state
        .sql_modal
        .apply_completion_update(&candidates, 7, true);

    let buffer = render_and_get_buffer_at_with_theme(&mut terminal, &mut state, now, &theme);

    let has_selected_completion = has_cell(&buffer, |cell| {
        cell.bg == theme.component.editor.completion_selected_bg
    });
    let has_completion_border = has_cell(&buffer, |cell| {
        cell.symbol() == "" && cell.fg == theme.component.modal.border
    });

    assert!(
        has_completion_border,
        "Expected completion popup border to use injected modal border color"
    );
    assert!(
        has_selected_completion,
        "Expected completion popup selection to use injected selected background"
    );
}