use super::coverage_scan;
use camino::Utf8PathBuf;
fn tree(source: &str) -> tempfile::TempDir {
let dir = tempfile::tempdir().unwrap();
std::fs::write(dir.path().join("payroll.rs"), source).unwrap();
dir
}
fn scan(source: &str) -> provenance_core::coverage::CoverageScan {
let dir = tree(source);
let path = Utf8PathBuf::from_path_buf(dir.path().to_path_buf()).unwrap();
coverage_scan(&path, &path, "default", false).unwrap()
}
#[test]
fn a_legacy_statesman_block_warns_that_the_marker_is_deprecated() {
let report = scan("// @statesman rule: rule_overtime\nfn pays_overtime() {}\n");
assert_eq!(report.warnings.len(), 1);
assert!(report.warnings[0].message.contains("legacy marker"));
assert_eq!(
report.warnings[0]
.file_path
.as_ref()
.unwrap()
.file_name()
.unwrap(),
"payroll.rs"
);
assert!(report.warnings[0].line.is_some());
}
#[test]
fn a_malformed_directive_surfaces_too() {
let report = scan("// @provenance rule: rule_overtime\n// @provenance nonsense\nfn f() {}\n");
assert_eq!(report.warnings.len(), 1);
assert!(report.warnings[0]
.message
.contains("malformed directive: expected `key: value`"));
}
#[test]
fn a_parse_warning_names_no_rule() {
let report = scan("// @statesman rule: rule_overtime\nfn pays_overtime() {}\n");
assert_eq!(report.warnings[0].rule_id, "");
}
#[test]
fn parse_warnings_do_not_need_rule_validation() {
let report = scan("// @provenance confidence: 4.2\n// @provenance rule: rule_overtime\n");
assert!(report
.warnings
.iter()
.any(|warning| warning.message.contains("confidence")));
}
#[test]
fn a_clean_file_warns_about_nothing() {
let report = scan("// @provenance rule: rule_overtime\nfn pays_overtime() {}\n");
assert!(report.warnings.is_empty());
}