artifactize-core 0.13.1

The library behind artifactize: Artifacts, evals, reviews, the monitor and review models, and the shared operations every interface calls.
Documentation
//! Independent old status output literals pin every actual state/action branch.
use super::*;
use crate::graph::{ArtifactStatus, EvalStatus};
use serde_json::json;

#[test]
fn all_artifact_and_eval_projections_keep_json_and_text_api_literals() {
    for (status, expected, saved) in [
        (ArtifactStatus::Deferred, "DEFERRED", "DEFERRED"),
        (ArtifactStatus::Provisional, "PROVISIONAL", "PROVISIONAL"),
        (ArtifactStatus::Basis, "BASIS", "BASIS"),
        (ArtifactStatus::Green, "PASS", "GREEN"),
        (ArtifactStatus::Incomplete, "INCOMPLETE", "INCOMPLETE"),
        (ArtifactStatus::Error, "ERROR", "ERROR"),
        (ArtifactStatus::Red, "RED", "RED"),
        (ArtifactStatus::Blocked, "BLOCKED", "BLOCKED"),
        (ArtifactStatus::Wait, "WAIT_DEPENDENCY", "WAIT"),
        (ArtifactStatus::Stale, "STALE", "STALE"),
        (ArtifactStatus::Unreviewed, "UNREVIEWED", "UNREVIEWED"),
    ] {
        let state = ArtifactCondition::from(status);
        assert_eq!(state.to_string(), expected);
        assert_eq!(serde_json::to_value(state).unwrap(), json!(expected));
        assert_eq!(
            serde_json::to_value(crate::types::ArtifactValidationStatus::from(status)).unwrap(),
            json!(saved)
        );
    }
    for (status, expected) in [
        (EvalStatus::Green, "PASS"),
        (EvalStatus::Red, "RED"),
        (EvalStatus::Error, "ERROR"),
        (EvalStatus::Stale, "STALE"),
        (EvalStatus::Unreviewed, "UNREVIEWED"),
        (EvalStatus::Wait, "WAIT_DEPENDENCY"),
        (EvalStatus::Blocked, "BLOCKED"),
    ] {
        let state = EvalCondition::from(status);
        assert_eq!(state.to_string(), expected);
        assert_eq!(serde_json::to_value(state).unwrap(), json!(expected));
    }
    assert_eq!(EvalCondition::WaitingHuman.to_string(), "WAITING_HUMAN");
    assert_eq!(
        serde_json::to_value(EvalCondition::WaitingHuman).unwrap(),
        json!("WAITING_HUMAN")
    );
}

#[test]
fn actions_count_exhaustively_and_count_object_order_matches_old_string_keys() {
    let mut counts = Counts::default();
    for (action, expected) in [
        (VerifyAction::Execute, "execute"),
        (VerifyAction::Reuse, "reuse"),
        (VerifyAction::Wait, "wait"),
        (VerifyAction::Blocked, "blocked"),
    ] {
        assert_eq!(action.to_string(), expected);
        assert_eq!(serde_json::to_value(action).unwrap(), json!(expected));
        counts.action(action);
    }
    counts.artifacts = BTreeMap::from([
        (ArtifactCondition::WaitDependency, 1),
        (ArtifactCondition::Unreviewed, 1),
        (ArtifactCondition::Stale, 1),
        (ArtifactCondition::Red, 1),
        (ArtifactCondition::Pass, 1),
        (ArtifactCondition::Incomplete, 1),
        (ArtifactCondition::Error, 1),
        (ArtifactCondition::Blocked, 1),
        (ArtifactCondition::Basis, 1),
    ]);
    counts.evals = BTreeMap::from([
        (EvalCondition::WaitingHuman, 1),
        (EvalCondition::WaitDependency, 1),
        (EvalCondition::Unreviewed, 1),
        (EvalCondition::Stale, 1),
        (EvalCondition::Red, 1),
        (EvalCondition::Pass, 1),
        (EvalCondition::Error, 1),
        (EvalCondition::Blocked, 1),
    ]);
    let expected = r#"{"artifacts":{"BASIS":1,"BLOCKED":1,"ERROR":1,"INCOMPLETE":1,"PASS":1,"RED":1,"STALE":1,"UNREVIEWED":1,"WAIT_DEPENDENCY":1},"evals":{"BLOCKED":1,"ERROR":1,"PASS":1,"RED":1,"STALE":1,"UNREVIEWED":1,"WAIT_DEPENDENCY":1,"WAITING_HUMAN":1},"execute":1,"reuse":1,"wait":1,"blocked":1}"#;
    assert_eq!(serde_json::to_string(&counts).unwrap(), expected);
}