const EMPTY_CONFIG: &str = r##"
# cargo-vet config file

[cargo-vet]
version = "1.0"
"##;
const EMPTY_AUDITS: &str = r##"
# cargo-vet audits file

[audits]
"##;
const EMPTY_IMPORTS: &str = r##"
# cargo-vet imports lock
"##;

fn get_valid_store(config: &str, audits: &str, imports: &str) -> String {
    let today = chrono::NaiveDate::from_ymd_opt(2023, 1, 1).unwrap();
    let res = crate::Store::mock_acquire(config, audits, imports, today, true);
    match res {
        Ok(_) => String::new(),
        Err(e) => format!("{:?}", miette::Report::new(e)),
    }
}

#[test]
fn test_all_empty() {
    let acquire_errors = get_valid_store("\n", "\n", "\n");
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_all_min() {
    let acquire_errors = get_valid_store(EMPTY_CONFIG, EMPTY_AUDITS, EMPTY_IMPORTS);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_simple_bad_audit() {
    let audits = r##"
# cargo-vet audits file

[[audits.serde]]
criteria = "bad"
version = "1.0.0"
"##;

    let acquire_errors = get_valid_store(EMPTY_CONFIG, audits, EMPTY_IMPORTS);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_many_bad_audits() {
    let audits = r##"
# cargo-vet audits file

[criteria.good]
description = "great"
implies = ["safe-to-deploy", "bad-imply"]

[[audits.serde]]
criteria = "bad"
version = "1.0.0"

[[audits.serde]]
criteria = "safe-to-jog"
version = "2.0.0"

[[audits.serde]]
criteria = "oops"
delta = "1.0.0 -> 1.1.0"

[[audits.serde]]
criteria = ["safe-to-run", "dang"]
delta = "1.0.0 -> 1.1.0"

[[audits.serde]]
criteria = "no-good-bad-bad"
violation = "^5.0.0"
"##;

    let acquire_errors = get_valid_store(EMPTY_CONFIG, audits, EMPTY_IMPORTS);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_many_bad_config() {
    let config = r##"
# cargo-vet config file

[cargo-vet]
version = "1.0"

[policy.boring]
audit-as-crates-io = true

[policy.clap]
criteria = "safe-to-deploy"
dev-criteria = "safe-to-run"
dependency-criteria = { clap_derive = "good" }

[policy.serde]
criteria = "bad"
dev-criteria = "nope"
dependency-criteria = { clap = ["safe-to-run", "unsafe-for-all", "good"], serde_derive = "nada" }

[[exemptions.clap]]
version = "1.0.0"
criteria = "oops"

[[exemptions.clap_derive]]
version = "1.0.0"
criteria = "safe-to-run"
"##;

    let audits = r##"
# cargo-vet audits file

[criteria.good]
description = "great"
implies = "safe-to-deploy"

[audits]
"##;

    let acquire_errors = get_valid_store(config, audits, EMPTY_IMPORTS);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_outdated_imports_lock_extra_peer() {
    let config = r##"
# cargo-vet config file

[cargo-vet]
version = "1.0"

[imports.peer1]
url = "https://peer1.com"
"##;

    let imports = r##"
# cargo-vet imports lock

[[audits.peer1.audits.third-party1]]
criteria = "safe-to-deploy"
version = "10.0.0"

[[audits.peer2.audits.third-party2]]
criteria = "safe-to-deploy"
version = "10.0.0"
"##;

    let acquire_errors = get_valid_store(config, EMPTY_AUDITS, imports);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_outdated_imports_lock_missing_peer() {
    let config = r##"
# cargo-vet config file

[cargo-vet]
version = "1.0"

[imports.peer1]
url = "https://peer1.com"

[imports.peer2]
url = "https://peer2.com"
"##;

    let imports = r##"
# cargo-vet imports lock

[[audits.peer1.audits.third-party1]]
criteria = "safe-to-deploy"
version = "10.0.0"
"##;

    let acquire_errors = get_valid_store(config, EMPTY_AUDITS, imports);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_outdated_imports_lock_excluded_crate() {
    let config = r##"
# cargo-vet config file

[cargo-vet]
version = "1.0"

[imports.peer1]
url = "https://peer1.com"
exclude = ["third-party1"]
"##;

    let imports = r##"
# cargo-vet imports lock

[[audits.peer1.audits.third-party1]]
criteria = "safe-to-deploy"
version = "10.0.0"

[[audits.peer1.audits.third-party2]]
criteria = "safe-to-deploy"
version = "10.0.0"
"##;

    let acquire_errors = get_valid_store(config, EMPTY_AUDITS, imports);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_outdated_imports_lock_ok() {
    let config = r##"
# cargo-vet config file

[cargo-vet]
version = "1.0"

[imports.peer1]
url = "https://peer1.com"
exclude = ["third-party2"]

[imports.peer2]
url = "https://peer1.com"
"##;

    let imports = r##"
# cargo-vet imports lock

[[audits.peer1.audits.third-party1]]
criteria = "safe-to-deploy"
version = "10.0.0"

[[audits.peer2.audits.third-party2]]
criteria = "safe-to-deploy"
version = "10.0.0"
"##;

    let acquire_errors = get_valid_store(config, EMPTY_AUDITS, imports);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_unknown_field_config() {
    let config = r##"
# cargo-vet config file

[cargo-vet]
version = "1.0"

[imports.peer1]
url = "https://peer1.com"
exclude = ["zzz", "aaa"]
unknown-field = "hi"

[[exemptions.zzz]]
version = "1.0.0"
criteria = "safe-to-deploy"
unknown-field = "hi"
"##;

    let imports = r##"
# cargo-vet imports lock

[[audits.peer1.audits.third-party1]]
criteria = "safe-to-deploy"
version = "10.0.0"
"##;

    let acquire_errors = get_valid_store(config, EMPTY_AUDITS, imports);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_unknown_field_criteria() {
    let audits = r##"
# cargo-vet audits file

[criteria.good]
description = "great"
implies = "safe-to-deploy"
unknown-field = "invalid"

[audits]
"##;

    let acquire_errors = get_valid_store(EMPTY_CONFIG, audits, EMPTY_IMPORTS);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_unknown_field_audit() {
    let audits = r##"
# cargo-vet audits file

[[audits.zzz]]
criteria = "safe-to-deploy"
version = "2.0.0"
unknown-field = "invalid"
"##;

    let acquire_errors = get_valid_store(EMPTY_CONFIG, audits, EMPTY_IMPORTS);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_distant_future_end_date() {
    // NOTE: `get_valid_store` pretends that "today" is 2023-01-01, so this will
    // always be over a year in the future.
    let audits = r##"
# cargo-vet audits file

[[wildcard-audits.zzz]]
criteria = "safe-to-deploy"
user-id = 1
start = "2015-05-15"
end = "2024-05-15"

[audits]
"##;

    let acquire_errors = get_valid_store(EMPTY_CONFIG, audits, EMPTY_IMPORTS);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_distant_future_end_date_leap_year() {
    // Make sure that we handle the day being on Feb. 29th. We'll treat 1 year
    // in the future as Feb. 28th, as it won't be a leap-year.
    let audits = r##"
# cargo-vet audits file

[[wildcard-audits.zzz]]
criteria = "safe-to-deploy"
user-id = 1
start = "2015-05-15"
end = "2021-03-01"

[audits]
"##;

    let today = chrono::NaiveDate::from_ymd_opt(2020, 2, 29).unwrap();
    let acquire_errors =
        match crate::Store::mock_acquire(EMPTY_CONFIG, audits, EMPTY_IMPORTS, today, true) {
            Ok(_) => String::new(),
            Err(e) => format!("{:?}", miette::Report::new(e)),
        };
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn test_invalid_formatting() {
    let config = r##"
# cargo-vet config file

[cargo-vet]
version = "1.0"

[imports.peer1]
url = "https://peer1.com"
exclude = ["zzz", "aaa"]

[imports.peer2]
url = "https://peer1.com"

[[exemptions.zzz]]
version = "1.0.0"
criteria = "safe-to-deploy"

[[exemptions.bbb]]
criteria = "safe-to-deploy"
version = "1.0.0"

[[exemptions.aaa]]
version = "1.0.0"
criteria = "safe-to-deploy"
"##;

    let audits = r##"
# cargo-vet audits file

[criteria.good]
description = "great"
implies = "safe-to-deploy"

[[audits.serde]]
criteria = ["safe-to-deploy", "good"]
version = "2.0.0"

[[audits.serde]]
criteria = ["safe-to-deploy", "good"]
version = "1.0.0"
notes = "valid field"
"##;

    let imports = r##"
# cargo-vet imports lock

[[audits.peer1.audits.third-party1]]
criteria = "safe-to-deploy"
version = "10.0.0"

[[audits.peer2.audits.third-party2]]
criteria = "safe-to-deploy"
version = "10.0.0"
"##;

    let acquire_errors = get_valid_store(config, audits, imports);
    insta::assert_snapshot!(acquire_errors);
}

#[test]
fn parse_criteria_map() {
    let config = r##"
# cargo-vet config file

[cargo-vet]
version = "1.0"

[imports.peer1]
url = "https://peer1.com"

[imports.peer1.criteria-map]
fuzzed = "safe-to-run"
safe-to-deploy = "safe-to-run"
"##;

    let imports = r##"
# cargo-vet imports lock

[audits.peer1.criteria.fuzzed]
description = "fuzzed"

[audits.peer1.audits]
"##;

    let acquire_errors = get_valid_store(config, EMPTY_AUDITS, imports);
    insta::assert_snapshot!(acquire_errors);
}
