gobby-wiki 0.2.0

Gobby wiki CLI shell
use std::fs;

mod common;

#[test]
fn export_workflow_assets_writes_outputs_without_mutating_wiki_pages() {
    let tmp = tempfile::tempdir().expect("tempdir");
    let hub = tmp.path().join("hub");
    let vault = hub.join("topics").join("rust");
    let wiki_page = vault.join("wiki/topics/ownership.md");
    fs::create_dir_all(wiki_page.parent().expect("wiki parent")).expect("create wiki dir");
    fs::write(&wiki_page, "# Ownership\n\nCanonical page.\n").expect("write wiki page");
    let before = fs::read_to_string(&wiki_page).expect("read before");

    let output = common::gwiki_command()
        .args([
            "--topic",
            "rust",
            "export",
            "workflow-assets",
            "--output",
            "workflow-bundle.md",
        ])
        .env("GOBBY_WIKI_HUB", &hub)
        .current_dir(tmp.path())
        .output()
        .expect("gwiki binary runs");

    assert!(
        output.status.success(),
        "export failed\nstdout:\n{}\nstderr:\n{}",
        String::from_utf8_lossy(&output.stdout),
        String::from_utf8_lossy(&output.stderr)
    );

    let export_path = vault.join("outputs/workflow-bundle.md");
    let exported = fs::read_to_string(&export_path).expect("read export");
    assert!(exported.contains("# GWiki Workflow Assets"));
    assert!(exported.contains("## research"));
    assert!(exported.contains("## compile"));
    assert_eq!(fs::read_to_string(&wiki_page).expect("read after"), before);

    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(stdout.contains("\"command\": \"export\""), "{stdout}");
    assert!(stdout.contains("workflow-bundle.md"), "{stdout}");

    let report = tmp.path().join("health.md");
    fs::write(&report, "# Health\n\nGenerated report.\n").expect("write report");
    let output = common::gwiki_command()
        .args([
            "--topic",
            "rust",
            "export",
            "report",
            "--from",
            report.to_str().expect("utf8 path"),
            "--output",
            "reports/health.md",
        ])
        .env("GOBBY_WIKI_HUB", &hub)
        .current_dir(tmp.path())
        .output()
        .expect("gwiki binary runs");

    assert!(
        output.status.success(),
        "report export failed\nstdout:\n{}\nstderr:\n{}",
        String::from_utf8_lossy(&output.stdout),
        String::from_utf8_lossy(&output.stderr)
    );
    assert_eq!(
        fs::read_to_string(vault.join("outputs/reports/health.md")).expect("report export"),
        "# Health\n\nGenerated report.\n"
    );
    assert_eq!(fs::read_to_string(&wiki_page).expect("read final"), before);
}