provenant-cli 0.0.8

Provenant is a high-performance Rust scanner for licenses, packages, and source provenance.
Documentation
#[cfg(test)]
mod tests {
    use std::path::Path;

    use super::super::scan_test_utils::{
        assert_dependency_present, assert_file_links_to_package, scan_and_assemble,
    };
    use crate::models::{DatasourceId, PackageType};

    #[test]
    fn test_cargo_basic_scan_assembles_manifest_and_lockfile() {
        let (files, result) = scan_and_assemble(Path::new("testdata/assembly-golden/cargo-basic"));

        let package = result
            .packages
            .iter()
            .find(|package| package.name.as_deref() == Some("test-crate"))
            .expect("cargo package should be assembled");

        assert_eq!(package.package_type, Some(PackageType::Cargo));
        assert_eq!(package.version.as_deref(), Some("0.1.0"));
        assert_eq!(package.purl.as_deref(), Some("pkg:cargo/test-crate@0.1.0"));
        assert_dependency_present(&result.dependencies, "pkg:cargo/serde", "Cargo.toml");
        assert_dependency_present(
            &result.dependencies,
            "pkg:cargo/serde@1.0.195",
            "Cargo.lock",
        );
        assert_file_links_to_package(
            &files,
            "/Cargo.toml",
            &package.package_uid,
            DatasourceId::CargoToml,
        );
        assert_file_links_to_package(
            &files,
            "/Cargo.lock",
            &package.package_uid,
            DatasourceId::CargoLock,
        );
    }

    #[test]
    fn test_cargo_scan_assigns_workspace_resources_to_package() {
        let (files, result) = scan_and_assemble(Path::new("testdata/assembly-golden/cargo-basic"));

        let package = result
            .packages
            .iter()
            .find(|package| package.name.as_deref() == Some("test-crate"))
            .expect("cargo package should be assembled");

        let readme = files
            .iter()
            .find(|file| file.path.ends_with("/README.md"))
            .expect("README should be scanned");
        let lib_rs = files
            .iter()
            .find(|file| file.path.ends_with("/src/lib.rs"))
            .expect("src/lib.rs should be scanned");

        assert!(readme.for_packages.contains(&package.package_uid));
        assert!(lib_rs.for_packages.contains(&package.package_uid));
    }
}