wsi-annotation-tests 0.1.3

DICOM Annotation Test Suite for WSI ANN, SEG, SR, and Parametric Map
Documentation
mod support;

use std::fs;

use serde_json::Value;
use tempfile::tempdir;
use wsi_annotation_tests::run_core_profile;

#[test]
#[ignore = "requires the external annotation_probe built by scripts/check-core.sh"]
fn rust_core_profile_writes_matrix_and_nonprimary_qualification_results() {
    let (reference, probe) = support::real_adapters();
    let directory = tempdir().unwrap();

    let result = run_core_profile(&reference, &probe, directory.path(), "rust-core-test").unwrap();

    assert!(result.manifest.is_file());
    let manifest: Value = serde_json::from_slice(&fs::read(&result.manifest).unwrap()).unwrap();
    assert_eq!(
        manifest["metadata"]["reference"]["packages"]["highdicom"],
        "0.28.1"
    );
    assert_eq!(manifest["metadata"]["baseline_definition_version"], 1);
    assert!(
        manifest["metadata"]["reference"]["packages"]
            .as_object()
            .unwrap()
            .contains_key("pydcm")
    );
    let observations: Vec<Value> =
        fs::read_to_string(result.manifest.parent().unwrap().join("observations.jsonl"))
            .unwrap()
            .lines()
            .map(|line| serde_json::from_str(line).unwrap())
            .collect();
    assert_eq!(
        observations
            .iter()
            .filter(|item| item["phase"] == "matrix")
            .count(),
        9
    );
    assert_eq!(
        observations
            .iter()
            .filter(|item| item["phase"] == "conversion")
            .count(),
        6
    );
    let qualification = observations
        .iter()
        .find(|item| item["phase"] == "qualification")
        .unwrap();
    assert_eq!(qualification["primary_failure"], false);
    assert!(matches!(
        qualification["status"].as_str(),
        Some("qualified" | "unqualified")
    ));
    assert_eq!(
        result.ok,
        observations.iter().all(|item| {
            item["phase"] == "qualification" || item["status"].as_str() == Some("passed")
        })
    );
}