cargo-artifact-dependency 0.4.1

Stable crate alternative for cargo artifact dependency.
Documentation
use std::fs;

use crate::{ArtifactDependency, ArtifactDependencyBuilder, BuildProfile};

fn ripgrep_request() -> ArtifactDependency {
    ArtifactDependencyBuilder::default()
        .crate_name("ripgrep")
        .version("14.1.1")
        .bin_name("rg")
        .profile(BuildProfile::Release)
        .build()
        .unwrap()
}

#[test]
#[ignore = "requires network access and runs cargo install"]
fn resolves_real_binary_crate() {
    let request = ripgrep_request();

    let artifact_path = request.resolve().unwrap();

    assert!(artifact_path.is_file());
}

#[test]
#[ignore = "requires network access and runs cargo install"]
fn resolves_real_binary_crate_from_cache_on_second_run() {
    let request = ripgrep_request();
    let install_root = request.install_root();
    _ = fs::remove_dir_all(&install_root);

    let first_artifact_path = request.resolve().unwrap();
    let first_modified = first_artifact_path.metadata().unwrap().modified().unwrap();
    let second_artifact_path = request.resolve().unwrap();
    let second_modified = second_artifact_path.metadata().unwrap().modified().unwrap();

    assert_eq!(first_artifact_path, second_artifact_path);
    assert_eq!(first_modified, second_modified);
}

#[test]
#[ignore = "requires network access and runs cargo install"]
fn falls_back_to_registry_when_local_path_is_unavailable() {
    let request = ArtifactDependencyBuilder::default()
        .crate_name("ripgrep")
        .version("14.1.1")
        .path("/definitely/not/existing/cargo-artifact-dependency-ripgrep")
        .bin_name("rg")
        .profile(BuildProfile::Release)
        .build()
        .unwrap();
    let install_root = request.install_root();
    _ = fs::remove_dir_all(&install_root);

    let artifact_path = request.resolve().unwrap();

    assert!(artifact_path.is_file());
}