harn-cli 0.10.49

CLI for the Harn programming language — run, test, REPL, format, and lint
Documentation
use crate::package::registry::verify::verify_package_registry_impl;
use crate::package::test_support::run_git;
use crate::package::*;

fn valid_index() -> &'static str {
    r#"
version = 2

[[package]]
name = "@acme/pkg"
repository = "https://github.com/acme/pkg"
provenance = "https://github.com/acme/pkg"

[[package.version]]
version = "1.0.0"
git = "https://github.com/acme/pkg"
tag = "v1.0.0"
rev = "0123456789abcdef0123456789abcdef01234567"
package = "pkg"
provenance = "https://github.com/acme/pkg/releases/tag/v1.0.0"
"#
}

#[test]
fn verification_receipt_reports_validated_inventory() {
    let temp = tempfile::tempdir().unwrap();
    let index = temp.path().join("index.toml");
    fs::write(&index, valid_index()).unwrap();
    let receipt = verify_package_registry_impl(index.to_str().unwrap(), false);
    assert!(receipt.ok);
    assert_eq!(
        receipt.schema_version,
        "harn.package_registry_verification.v1"
    );
    assert_eq!(receipt.index_version, 2);
    assert_eq!(receipt.package_count, 1);
    assert_eq!(receipt.version_count, 1);
    assert_eq!(receipt.resolved_git_versions, 0);
}

#[test]
fn verification_receipt_retains_schema_failure() {
    let temp = tempfile::tempdir().unwrap();
    let index = temp.path().join("index.toml");
    fs::write(
        &index,
        valid_index().replacen("version = 2", "version = 1", 1),
    )
    .unwrap();
    let receipt = verify_package_registry_impl(index.to_str().unwrap(), false);
    assert!(!receipt.ok);
    assert!(receipt.errors[0].contains("expected 2"));
}

#[test]
fn remote_verification_rejects_a_tag_commit_mismatch() {
    let temp = tempfile::tempdir().unwrap();
    let repository = temp.path().join("package");
    fs::create_dir(&repository).unwrap();
    run_git(&repository, &["init"]);
    fs::write(repository.join("harn.toml"), "[package]\nname = \"pkg\"\n").unwrap();
    run_git(&repository, &["add", "harn.toml"]);
    run_git(&repository, &["commit", "-m", "fixture"]);
    run_git(&repository, &["tag", "v1.0.0"]);
    let repository_url = Url::from_directory_path(&repository).unwrap().to_string();
    let index = temp.path().join("index.toml");
    fs::write(
        &index,
        format!(
            r#"version = 2

[[package]]
name = "@acme/pkg"
repository = "{repository_url}"
provenance = "{repository_url}"

[[package.version]]
version = "1.0.0"
git = "{repository_url}"
tag = "v1.0.0"
rev = "ffffffffffffffffffffffffffffffffffffffff"
package = "pkg"
provenance = "{repository_url}"
"#
        ),
    )
    .unwrap();

    let receipt = verify_package_registry_impl(index.to_str().unwrap(), true);
    assert!(!receipt.ok);
    assert_eq!(receipt.resolved_git_versions, 0);
    assert!(
        receipt.errors[0].contains("tag v1.0.0 resolves to"),
        "{}",
        receipt.errors[0]
    );
}