gy 0.5.0

good,yes — the ledger of what work rests on before a requirement is confirmed
mod common;

use common::{first_line, fixture, stderr, stdout};

#[test]
fn question_add_then_close() {
    let fx = fixture();
    let out = fx.run(&[
        "question",
        "add",
        "a question",
        "--decider",
        "master",
        "--options",
        "a",
        "--options",
        "b",
    ]);
    assert!(out.status.success(), "{}", stderr(&out));
    assert!(stdout(&out).contains("changed: created, decider, options"));
    assert!(stdout(&out).contains("missing: 本文(選択肢の根拠)"));
    let id = first_line(&out);

    let out = fx.run(&[
        "question",
        "close",
        &id,
        "--by",
        "fact",
        "--evidence",
        "observed",
    ]);
    assert!(out.status.success(), "{}", stderr(&out));
    assert!(stdout(&out).contains("changed: closed"));

    let out = fx.run(&["show", &id]);
    assert!(stdout(&out).contains("state: closed"));
}

#[test]
fn question_errors_and_json() {
    let fx = fixture();
    let out = fx.run(&[
        "--json",
        "question",
        "add",
        "q",
        "--decider",
        "m",
        "--options",
        "a",
        "--options",
        "b",
    ]);
    assert!(out.status.success(), "{}", stderr(&out));
    let json: serde_json::Value = serde_json::from_slice(&out.stdout).unwrap();
    assert!(json["id"].is_string());

    let out = fx.run(&[
        "question",
        "add",
        "q",
        "--decider",
        "m",
        "--options",
        "only",
    ]);
    assert_eq!(out.status.code(), Some(2));

    let id = first_line(&fx.run(&[
        "question",
        "add",
        "q",
        "--decider",
        "m",
        "--options",
        "a",
        "--options",
        "b",
    ]));
    let out = fx.run(&[
        "question",
        "close",
        &id,
        "--by",
        "decision",
        "--evidence",
        "decided",
    ]);
    assert_eq!(out.status.code(), Some(2));

    let out = fx.run_without_actor(&[
        "question",
        "add",
        "q",
        "--decider",
        "m",
        "--options",
        "a",
        "--options",
        "b",
    ]);
    assert_eq!(out.status.code(), Some(2));
    assert!(stderr(&out).contains("GY_ACTOR"));
}