use super::*;
use harness::{explorer_selected_state, table_detail_loaded_state, with_current_result};
use sabiql_app::model::shared::ui_state::FocusMode;
use sabiql_domain::{QueryResult, QuerySource};
fn adhoc_result(query: &str) -> QueryResult {
QueryResult::success(
query.to_string(),
vec!["count".to_string()],
vec![vec!["42".to_string()]],
5,
QuerySource::Adhoc,
)
}
#[test]
fn preview_with_history_hint() {
let mut state = table_detail_loaded_state();
let mut terminal = create_test_terminal();
with_current_result(&mut state);
state.query.push_history(Arc::new(adhoc_result("SELECT 1")));
state.ui.focused_pane = FocusedPane::Result;
let output = render_to_string(&mut terminal, &mut state);
insta::assert_snapshot!(output);
}
#[test]
fn result_pane_history_mode() {
let mut state = explorer_selected_state();
let mut terminal = create_test_terminal();
for i in 1..=3 {
state
.query
.push_history(Arc::new(adhoc_result(&format!("SELECT {i}"))));
}
state
.query
.set_current_result(Arc::new(adhoc_result("SELECT 3")));
state.query.enter_history(1); state.ui.focused_pane = FocusedPane::Result;
let output = render_to_string(&mut terminal, &mut state);
insta::assert_snapshot!(output);
}
fn wide_adhoc_result(query: &str) -> QueryResult {
QueryResult::success(
query.to_string(),
(1..=10).map(|i| format!("column_{i}")).collect(),
vec![(1..=10).map(|i| format!("value_{i}")).collect()],
12,
QuerySource::Adhoc,
)
}
#[test]
fn history_mode_with_horizontal_scroll() {
let mut state = explorer_selected_state();
let mut terminal = create_test_terminal();
let long_query = "SELECT column_1, column_2, column_3, column_4, column_5 FROM very_long_table_name WHERE id > 100";
for i in 1..=3 {
state
.query
.push_history(Arc::new(wide_adhoc_result(&format!("SELECT {i}"))));
}
state
.query
.set_current_result(Arc::new(wide_adhoc_result(long_query)));
state.query.enter_history(2); state.ui.focus_mode = FocusMode::focused(state.ui.focused_pane);
let output = render_to_string(&mut terminal, &mut state);
insta::assert_snapshot!(output);
}
#[test]
fn result_query_with_history_hint() {
let mut state = explorer_selected_state();
let mut terminal = create_test_terminal();
for i in 1..=2 {
state
.query
.push_history(Arc::new(adhoc_result(&format!("SELECT {i}"))));
}
state
.query
.set_current_result(Arc::new(adhoc_result("SELECT 2")));
state.ui.focused_pane = FocusedPane::Result;
let output = render_to_string(&mut terminal, &mut state);
insta::assert_snapshot!(output);
}
#[test]
fn focus_mode_history_mode() {
let mut state = explorer_selected_state();
let mut terminal = create_test_terminal();
for i in 1..=3 {
state
.query
.push_history(Arc::new(adhoc_result(&format!("SELECT {i}"))));
}
state
.query
.set_current_result(Arc::new(adhoc_result("SELECT 3")));
state.query.enter_history(0); state.ui.focus_mode = FocusMode::focused(state.ui.focused_pane);
let output = render_to_string(&mut terminal, &mut state);
insta::assert_snapshot!(output);
}