gitv-tui 0.4.4

A terminal-based GitHub client built with Rust and Ratatui.
mod support;
use crate::support::buffer_to_string;
use gitv_tui::ui::AppState;
use gitv_tui::ui::components::Component;
use gitv_tui::ui::components::search_bar::TextSearch;
use gitv_tui::ui::layout::Layout;
use insta::assert_snapshot;
use ratatui::buffer::Buffer;
use ratatui::layout::Rect;

fn render_text_search<F>(setup: F) -> String
where
    F: FnOnce(&mut TextSearch),
{
    let area = Layout::new(Rect::new(0, 0, 80, 10));
    let mut buf = Buffer::empty(Rect::new(0, 0, 80, 10));

    let mut search = TextSearch::new(AppState::new(
        "owner".to_string(),
        "repo".to_string(),
        "user".to_string(),
    ));

    setup(&mut search);

    search.render(area, &mut buf);
    buffer_to_string(&buf)
}

#[test]
fn text_search_loaded_state() {
    let result = render_text_search(|_| {});
    assert_snapshot!(result);
}

#[test]
fn text_search_with_input() {
    let result = render_text_search(|search| {
        search.search_state.set_text("bug fix");
    });
    assert_snapshot!(result);
}

#[test]
fn text_search_label_input() {
    let result = render_text_search(|search| {
        search.label_state.set_text("priority:high");
    });
    assert_snapshot!(result);
}

#[test]
fn text_search_both_inputs() {
    let result = render_text_search(|search| {
        search.search_state.set_text("authentication");
        search.label_state.set_text("security;bug");
    });
    assert_snapshot!(result);
}