prosesmasher-app-core 0.1.7

Internal core checks crate for the prosesmasher workspace. Published to support the workspace dependency graph.
Documentation
use crate::check::Check;
use crate::test_helpers::make_doc;
use low_expectations::ExpectationSuite;
use prosesmasher_domain_types::{CheckConfig, Locale};

fn config_with_required(terms: &[&str]) -> CheckConfig {
    let mut config = CheckConfig::default();
    config.quality.lexical.required_terms = terms.iter().map(|t| (*t).to_owned()).collect();
    config
}

#[test]
fn all_required_terms_present_passes() {
    let doc = make_doc("Rust ownership and borrowing are key concepts.", Locale::En);
    let config = config_with_required(&["ownership", "borrowing"]);
    let mut suite = ExpectationSuite::new("test");
    super::RequiredTermsCheck.run(&doc, &config, &mut suite);
    let result = suite.into_suite_result();
    assert_eq!(result.statistics.unsuccessful_expectations, 0, "all present → no failures");
    assert_eq!(result.statistics.successful_expectations, 2, "2 terms checked");
}

#[test]
fn missing_required_term_fails() {
    let doc = make_doc("Rust ownership is a key concept.", Locale::En);
    let config = config_with_required(&["ownership", "borrowing"]);
    let mut suite = ExpectationSuite::new("test");
    super::RequiredTermsCheck.run(&doc, &config, &mut suite);
    let result = suite.into_suite_result();
    assert_eq!(result.statistics.unsuccessful_expectations, 1, "borrowing missing → 1 failure");
    assert_eq!(result.statistics.successful_expectations, 1, "ownership found → 1 pass");
}

#[test]
fn case_insensitive_match() {
    let doc = make_doc("RUST Ownership is great.", Locale::En);
    let config = config_with_required(&["rust", "ownership"]);
    let mut suite = ExpectationSuite::new("test");
    super::RequiredTermsCheck.run(&doc, &config, &mut suite);
    let result = suite.into_suite_result();
    assert_eq!(result.statistics.unsuccessful_expectations, 0, "case insensitive match");
}

#[test]
fn empty_required_list_skips() {
    let doc = make_doc("Some text.", Locale::En);
    let config = config_with_required(&[]);
    let mut suite = ExpectationSuite::new("test");
    super::RequiredTermsCheck.run(&doc, &config, &mut suite);
    let result = suite.into_suite_result();
    assert_eq!(result.statistics.evaluated_expectations, 0, "empty list → skip");
}

#[test]
fn check_id_and_label() {
    let check = super::RequiredTermsCheck;
    assert_eq!(check.id(), "required-terms");
    assert_eq!(check.label(), "Required Terms");
}