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::components::help::{HelpComponent, HelpElementKind};
use insta::assert_snapshot;
use ratatui::buffer::Buffer;
use ratatui::layout::Rect;
use ratatui::widgets::{Block, Widget};

fn render_help_component(elements: &[HelpElementKind], width: u16, height: u16) -> String {
    let area = Rect::new(0, 0, width, height);
    let mut buf = Buffer::empty(area);
    let component = HelpComponent::new(elements).set_constraint(50).block(
        Block::bordered()
            .title("Help")
            .padding(ratatui::widgets::Padding::horizontal(2))
            .border_type(ratatui::widgets::BorderType::Rounded),
    );
    component.render(area, &mut buf);
    buffer_to_string(&buf)
}

#[test]
fn help_elements_keybinds_only() {
    let elements = &[
        HelpElementKind::Keybind("Up", "navigate up"),
        HelpElementKind::Keybind("Down", "navigate down"),
        HelpElementKind::Keybind("Enter", "select item"),
    ];
    let result = render_help_component(elements, 60, 20);
    assert_snapshot!(result);
}

#[test]
fn help_elements_text_wrapping() {
    let elements = &[HelpElementKind::Text(
        "This is a very long description that should wrap properly across multiple lines when rendered in the help component.",
    )];
    let result = render_help_component(elements, 50, 15);
    assert_snapshot!(result);
}

#[test]
fn help_elements_mixed_content() {
    let elements = &[
        HelpElementKind::Text("Global Help"),
        HelpElementKind::Keybind("q", "quit application"),
        HelpElementKind::Text(""),
        HelpElementKind::Keybind("?", "toggle this help"),
        HelpElementKind::Keybind("Esc", "close dialog"),
    ];
    let result = render_help_component(elements, 55, 20);
    assert_snapshot!(result);
}

#[test]
fn help_component_empty() {
    let elements: &[HelpElementKind] = &[];
    let result = render_help_component(elements, 40, 10);
    assert_snapshot!(result);
}