use std::collections::BTreeMap;
use stern4rust::settings::package_config::PackageConfig;
use stern4rust::settings::package_sections::PackageSections;
fn sections(names: &[&str]) -> PackageSections {
PackageSections::new(
names
.iter()
.map(|name| ((*name).to_string(), PackageConfig::default()))
.collect::<BTreeMap<_, _>>(),
)
}
fn skipping(entries: &[(&str, &[&str])]) -> PackageSections {
PackageSections::new(
entries
.iter()
.map(|(name, skip)| {
(
(*name).to_string(),
PackageConfig {
skip: skip.iter().map(|rule| (*rule).to_string()).collect(),
..PackageConfig::default()
},
)
})
.collect::<BTreeMap<_, _>>(),
)
}
#[test]
fn is_empty_without_any_section_is_true() {
let sections = sections(&[]);
assert!(sections.is_empty());
}
#[test]
fn of_a_package_with_a_section_returns_it() {
let sections = sections(&["validation"]);
let section = sections.of("validation");
assert!(section.is_some());
}
#[test]
fn of_a_package_without_a_section_returns_nothing() {
let sections = sections(&["validation"]);
let section = sections.of("node");
assert!(section.is_none());
}
#[test]
fn skipped_anywhere_collects_what_any_section_stands_down_on() {
let sections = skipping(&[
("validation", &["paired-test-file"]),
("system-tests", &["paired-test-file", "test-naming"]),
]);
let skipped = sections.skipped_anywhere(&["validation", "system-tests"]);
assert_eq!(skipped, vec!["paired-test-file", "test-naming"]);
}
#[test]
fn skipped_anywhere_counts_a_section_for_a_package_this_run_does_scan() {
let sections = skipping(&[("validation", &["paired-test-file"])]);
let skipped = sections.skipped_anywhere(&["node", "validation"]);
assert_eq!(skipped, vec!["paired-test-file"]);
}
#[test]
fn skipped_anywhere_ignores_sections_for_packages_this_run_does_not_scan() {
let sections = skipping(&[("validation", &["paired-test-file"])]);
let skipped = sections.skipped_anywhere(&["node"]);
assert!(skipped.is_empty());
}
#[test]
fn skipped_anywhere_names_a_rule_two_sections_share_once() {
let sections = skipping(&[
("validation", &["paired-test-file"]),
("system-tests", &["paired-test-file"]),
]);
let skipped = sections.skipped_anywhere(&["validation", "system-tests"]);
assert_eq!(skipped, vec!["paired-test-file"]);
}
#[test]
fn skipped_anywhere_without_any_section_is_empty() {
let skipped = sections(&[]).skipped_anywhere(&[]);
assert!(skipped.is_empty());
}
#[test]
fn validate_names_the_packages_the_run_does_scan() {
let sections = sections(&["nope"]);
let result = sections.validate(&["node", "validation"][..]);
let error = format!("{}", result.expect_err("an error"));
assert!(error.contains("node"));
assert!(error.contains("validation"));
}
#[test]
fn validate_of_a_section_for_a_workspace_package_outside_this_run_is_ok() {
let sections = sections(&["system-tests"]);
let result = sections.validate(&["node", "system-tests"][..]);
assert!(result.is_ok());
}
#[test]
fn validate_where_a_section_names_no_scanned_package_is_an_error() {
let sections = sections(&["validaton"]);
let result = sections.validate(&["node", "validation"][..]);
let error = result.expect_err("a section naming nothing must not pass");
assert!(format!("{error}").contains("validaton"));
}
#[test]
fn validate_where_every_section_names_a_scanned_package_is_ok() {
let sections = sections(&["node", "validation"]);
let result = sections.validate(&["node", "node-infra", "validation"][..]);
assert!(result.is_ok());
}