govctl 0.9.4

Project governance CLI for RFC, ADR, and Work Item management
use super::*;

#[test]
fn test_work_journal_field_surface_is_unavailable() -> common::TestResult {
    let (temp_dir, date) = init_project_with_date()?;

    let wi_id = format!("WI-{date}-001");
    let output = run_commands(
        temp_dir.path(),
        &[
            &["work", "new", "Test Task"],
            &["work", "add", &wi_id, "journal", "First progress update"],
            &["work", "get", &wi_id, "journal"],
            &[
                "work",
                "edit",
                &wi_id,
                "journal",
                "--add",
                "Second progress update",
            ],
            &[
                "work",
                "edit",
                &wi_id,
                "journal[0].content",
                "--set",
                "Changed history",
            ],
            &["work", "remove", &wi_id, "journal", "--all"],
            &["work", "tick", &wi_id, "journal", "--at", "0"],
            &["work", "show", &wi_id],
        ],
    )?;
    let normalized = normalize_output(&output, temp_dir.path(), &date)?;
    assert!(
        normalized.contains("Unknown work item field: journal"),
        "output: {normalized}"
    );
    assert_eq!(
        normalized.matches("error[E0803]").count(),
        6,
        "all journal field-surface operations should be rejected: {normalized}"
    );
    assert!(
        !normalized.contains("## Journal"),
        "journal write should not persist: {normalized}"
    );
    Ok(())
}

#[test]
fn test_work_new_omits_journal_field() -> common::TestResult {
    let (temp_dir, date) = init_project_with_date()?;

    let output = run_commands(temp_dir.path(), &[&["work", "new", "Test Task"]])?;
    assert!(output.contains("Created work item"), "output: {output}");

    let work_path = temp_dir
        .path()
        .join("gov")
        .join("work")
        .join(format!("{date}-test-task.toml"));
    let content = std::fs::read_to_string(work_path)?;

    assert!(
        !content.contains("journal") && !content.contains("[[content.journal]]"),
        "new work items should omit journal: {content}"
    );
    Ok(())
}