use {
crate::{
instance_state::{FixableInstance::*, InstanceState, UnfixableInstance::*, ValidInstance::*},
test::{
builder::TestBuilder,
expect::{expect, ExpectedInstance},
},
},
serde_json::json,
};
#[test]
fn instance_in_a_same_range_group_satisfies_every_other_and_there_are_no_semver_groups() {
let ctx = TestBuilder::new()
.with_packages(vec![
json!({
"name": "package-a",
"dependencies": {
"foo": ">=1.0.0"
}
}),
json!({
"name": "package-b",
"dependencies": {
"foo": "<=2.0.0"
}
}),
])
.with_version_groups(vec![
json!({
"dependencyTypes": ["local"],
"isIgnored": true
}),
json!({
"dependencies": ["foo"],
"policy": "sameRange"
}),
])
.build_and_visit_packages();
expect(&ctx).to_have_instances(vec![
ExpectedInstance {
state: InstanceState::valid(IsIgnored),
dependency_name: "package-a",
id: "package-a in /version of package-a",
actual: "",
expected: Some(""),
overridden: None,
},
ExpectedInstance {
state: InstanceState::valid(IsIgnored),
dependency_name: "package-b",
id: "package-b in /version of package-b",
actual: "",
expected: Some(""),
overridden: None,
},
ExpectedInstance {
state: InstanceState::valid(SatisfiesSameRangeGroup),
dependency_name: "foo",
id: "foo in /dependencies of package-a",
actual: ">=1.0.0",
expected: Some(">=1.0.0"),
overridden: None,
},
ExpectedInstance {
state: InstanceState::valid(SatisfiesSameRangeGroup),
dependency_name: "foo",
id: "foo in /dependencies of package-b",
actual: "<=2.0.0",
expected: Some("<=2.0.0"),
overridden: None,
},
]);
}
#[test]
fn instance_in_a_same_range_group_satisfies_every_other_and_matches_its_semver_group() {
let ctx = TestBuilder::new()
.with_packages(vec![
json!({
"name": "package-a",
"dependencies": {
"foo": ">=1.0.0"
}
}),
json!({
"name": "package-b",
"dependencies": {
"foo": "^1.2.3"
}
}),
])
.with_semver_group(json!({
"packages": ["package-b"],
"range": "^"
}))
.with_version_groups(vec![
json!({
"dependencyTypes": ["local"],
"isIgnored": true
}),
json!({
"dependencies": ["foo"],
"policy": "sameRange"
}),
])
.build_and_visit_packages();
expect(&ctx).to_have_instances(vec![
ExpectedInstance {
state: InstanceState::valid(IsIgnored),
dependency_name: "package-a",
id: "package-a in /version of package-a",
actual: "",
expected: Some(""),
overridden: None,
},
ExpectedInstance {
state: InstanceState::valid(IsIgnored),
dependency_name: "package-b",
id: "package-b in /version of package-b",
actual: "",
expected: Some(""),
overridden: None,
},
ExpectedInstance {
state: InstanceState::valid(SatisfiesSameRangeGroup),
dependency_name: "foo",
id: "foo in /dependencies of package-a",
actual: ">=1.0.0",
expected: Some(">=1.0.0"),
overridden: None,
},
ExpectedInstance {
state: InstanceState::valid(SatisfiesSameRangeGroup),
dependency_name: "foo",
id: "foo in /dependencies of package-b",
actual: "^1.2.3",
expected: Some("^1.2.3"),
overridden: None,
},
]);
}
#[test]
fn instance_in_a_same_range_group_satisfies_every_other_but_mismatches_its_semver_group() {
let ctx = TestBuilder::new()
.with_packages(vec![
json!({
"name": "package-a",
"dependencies": {
"foo": ">=1.0.0"
}
}),
json!({
"name": "package-b",
"dependencies": {
"foo": "^1.2.3"
}
}),
])
.with_semver_group(json!({
"packages": ["package-b"],
"range": "~"
}))
.with_version_groups(vec![
json!({
"dependencyTypes": ["local"],
"isIgnored": true
}),
json!({
"dependencies": ["foo"],
"policy": "sameRange"
}),
])
.build_and_visit_packages();
expect(&ctx).to_have_instances(vec![
ExpectedInstance {
state: InstanceState::valid(IsIgnored),
dependency_name: "package-a",
id: "package-a in /version of package-a",
actual: "",
expected: Some(""),
overridden: None,
},
ExpectedInstance {
state: InstanceState::valid(IsIgnored),
dependency_name: "package-b",
id: "package-b in /version of package-b",
actual: "",
expected: Some(""),
overridden: None,
},
ExpectedInstance {
state: InstanceState::valid(SatisfiesSameRangeGroup),
dependency_name: "foo",
id: "foo in /dependencies of package-a",
actual: ">=1.0.0",
expected: Some(">=1.0.0"),
overridden: None,
},
ExpectedInstance {
state: InstanceState::fixable(SemverRangeMismatch),
dependency_name: "foo",
id: "foo in /dependencies of package-b",
actual: "^1.2.3",
expected: Some("~1.2.3"),
overridden: None,
},
]);
}
#[test]
fn instance_in_a_same_range_group_does_not_satisfy_another() {
let ctx = TestBuilder::new()
.with_packages(vec![
json!({
"name": "package-a",
"dependencies": {
"foo": ">=1.0.0"
}
}),
json!({
"name": "package-b",
"dependencies": {
"foo": "<1.0.0"
}
}),
])
.with_version_groups(vec![
json!({
"dependencyTypes": ["local"],
"isIgnored": true
}),
json!({
"dependencies": ["foo"],
"policy": "sameRange"
}),
])
.build_and_visit_packages();
expect(&ctx).to_have_instances(vec![
ExpectedInstance {
state: InstanceState::valid(IsIgnored),
dependency_name: "package-a",
id: "package-a in /version of package-a",
actual: "",
expected: Some(""),
overridden: None,
},
ExpectedInstance {
state: InstanceState::valid(IsIgnored),
dependency_name: "package-b",
id: "package-b in /version of package-b",
actual: "",
expected: Some(""),
overridden: None,
},
ExpectedInstance {
state: InstanceState::unfixable(SameRangeMismatch),
dependency_name: "foo",
id: "foo in /dependencies of package-a",
actual: ">=1.0.0",
expected: Some(">=1.0.0"),
overridden: None,
},
ExpectedInstance {
state: InstanceState::unfixable(SameRangeMismatch),
dependency_name: "foo",
id: "foo in /dependencies of package-b",
actual: "<1.0.0",
expected: Some("<1.0.0"),
overridden: None,
},
]);
}