quelch 0.4.0

Ingest data from Jira, Confluence, and more directly into Azure AI Search
Documentation
use ratatui::{Terminal, backend::TestBackend};

use crate::config::{AuthConfig, AzureConfig, Config, JiraSourceConfig, SourceConfig, SyncConfig};
use crate::tui::app::App;
use crate::tui::prefs::Prefs;
use crate::tui::widgets::source_card::SourceCard;

fn cfg() -> Config {
    Config {
        azure: AzureConfig {
            endpoint: "x".into(),
            api_key: "k".into(),
        },
        sources: vec![SourceConfig::Jira(JiraSourceConfig {
            name: "my-jira".into(),
            url: "x".into(),
            auth: AuthConfig::DataCenter { pat: "p".into() },
            projects: vec!["DO".into()],
            index: "i".into(),
        })],
        sync: SyncConfig::default(),
    }
}

#[test]
fn source_card_renders_to_test_backend() {
    let backend = TestBackend::new(60, 6);
    let mut term = Terminal::new(backend).unwrap();
    let app = App::new(&cfg(), Prefs::default());
    term.draw(|f| {
        f.render_widget(
            SourceCard {
                view: &app.sources[0],
                collapsed: false,
                focused: true,
                focused_subsource: Some("DO"),
            },
            f.area(),
        );
    })
    .unwrap();
    let buf = term.backend().buffer();
    let text: String = (0..buf.area.height)
        .map(|y| {
            (0..buf.area.width)
                .map(|x| buf[(x, y)].symbol())
                .collect::<String>()
        })
        .collect::<Vec<_>>()
        .join("\n");
    assert!(text.contains("my-jira"), "rendered:\n{text}");
    assert!(text.contains("DO"));
}