use std::collections::BTreeMap;
use std::path::PathBuf;
use stern4rust::settings::package_config::PackageConfig;
use stern4rust::settings::package_sections::PackageSections;
use stern4rust::settings::scanned_package::ScannedPackage;
fn scanned(names: &[&str]) -> Vec<ScannedPackage> {
names
.iter()
.map(|name| ScannedPackage::new(name, PathBuf::from(*name), None))
.collect()
}
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();
assert_eq!(skipped, vec!["paired-test-file", "test-naming"]);
}
#[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();
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(&scanned(&["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_package_outside_this_run_is_an_error() {
let sections = sections(&["system-tests"]);
let result = sections.validate(&scanned(&["node"]));
assert!(result.is_err());
}
#[test]
fn validate_where_a_section_names_no_scanned_package_is_an_error() {
let sections = sections(&["validaton"]);
let result = sections.validate(&scanned(&["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(&scanned(&["node", "node-infra", "validation"]));
assert!(result.is_ok());
}