#![allow(clippy::unwrap_used)]
#![allow(clippy::expect_used)]
#[cfg(test)]
#[test]
fn test_metrics_thresholds_default_values() {
let t = MetricsThresholds::default();
assert!((t.lint_ms - 5000.0).abs() < f64::EPSILON);
assert!((t.test_ms - 60000.0).abs() < f64::EPSILON);
assert!((t.coverage_ms - 120000.0).abs() < f64::EPSILON);
assert!((t.binary_size_kb - 10240.0).abs() < f64::EPSILON);
}
#[test]
fn test_metrics_sub_struct_defaults() {
let e = MetricsEnforcement::default();
assert!(e.fail_on_stale);
assert!(e.fail_on_performance_regression);
let p = PerformanceBudget::default();
assert!((p.max_transpile_ms_per_entry - 100.0).abs() < f64::EPSILON);
assert!((p.max_memory_mb_per_entry - 10.0).abs() < f64::EPSILON);
let s = StalenessConfig::default();
assert_eq!(s.max_age_days, 7);
let t = TrendAnalysisConfig::default();
assert!(t.enabled);
assert_eq!(t.retention_days, 90);
let q = MetricsQualityGates::default();
assert!((q.min_coverage - 95.0).abs() < f64::EPSILON);
assert!((q.min_mutation_score - 90.0).abs() < f64::EPSILON);
assert_eq!(q.min_tdg_grade, "A");
}
#[test]
fn test_coverage_run_gate_clippy_disabled() {
let config = GateConfig {
gates: GatesConfig {
run_clippy: false,
..GatesConfig::default()
},
..GateConfig::default()
};
let gate = QualityGate::new(config);
let result = gate.run_gate("clippy");
assert!(result.passed, "disabled clippy gate should pass");
assert!(
result.message.contains("disabled"),
"disabled gate message should say disabled: {}",
result.message
);
assert_eq!(result.gate_name, "clippy");
}
#[test]
fn test_coverage_run_gate_tests_disabled() {
let config = GateConfig {
gates: GatesConfig {
run_tests: false,
..GatesConfig::default()
},
..GateConfig::default()
};
let gate = QualityGate::new(config);
let result = gate.run_gate("tests");
assert!(result.passed, "disabled tests gate should pass");
assert!(
result.message.contains("disabled"),
"message: {}",
result.message
);
assert_eq!(result.gate_name, "tests");
}
#[test]
fn test_coverage_run_gate_satd_disabled() {
let config = GateConfig {
gates: GatesConfig {
satd: SatdConfig {
enabled: false,
..SatdConfig::default()
},
..GatesConfig::default()
},
..GateConfig::default()
};
let gate = QualityGate::new(config);
let result = gate.run_gate("satd");
assert!(result.passed, "disabled SATD gate should pass");
assert!(
result.message.contains("disabled"),
"message: {}",
result.message
);
assert_eq!(result.gate_name, "satd");
}
#[test]
fn test_coverage_run_gate_coverage_disabled() {
let config = GateConfig {
gates: GatesConfig {
check_coverage: false,
..GatesConfig::default()
},
..GateConfig::default()
};
let gate = QualityGate::new(config);
let result = gate.run_gate("coverage");
assert!(result.passed, "disabled coverage gate should pass");
assert!(
result.message.contains("disabled"),
"message: {}",
result.message
);
assert_eq!(result.gate_name, "coverage");
}
#[test]
fn test_coverage_run_gate_complexity_disabled() {
let config = GateConfig {
gates: GatesConfig {
check_complexity: false,
..GatesConfig::default()
},
..GateConfig::default()
};
let gate = QualityGate::new(config);
let result = gate.run_gate("complexity");
assert!(result.passed, "disabled complexity gate should pass");
assert!(
result.message.contains("disabled"),
"message: {}",
result.message
);
}
#[test]
fn test_coverage_run_gate_mutation_disabled() {
let config = GateConfig {
gates: GatesConfig {
mutation: MutationConfig {
enabled: false,
..MutationConfig::default()
},
..GatesConfig::default()
},
..GateConfig::default()
};
let gate = QualityGate::new(config);
let result = gate.run_gate("mutation");
assert!(result.passed, "disabled mutation gate should pass");
assert_eq!(result.gate_name, "mutation");
}
#[test]
fn test_coverage_run_gate_security_disabled() {
let config = GateConfig {
gates: GatesConfig {
security: SecurityConfig {
enabled: false,
..SecurityConfig::default()
},
..GatesConfig::default()
},
..GateConfig::default()
};
let gate = QualityGate::new(config);
let result = gate.run_gate("security");
assert!(result.passed, "disabled security gate should pass");
assert_eq!(result.gate_name, "security");
}
#[test]
fn test_coverage_run_gate_coverage_enabled_placeholder() {
let config = GateConfig {
gates: GatesConfig {
check_coverage: true,
min_coverage: 85.0,
..GatesConfig::default()
},
..GateConfig::default()
};
let gate = QualityGate::new(config);
let result = gate.run_gate("coverage");
assert!(result.passed);
assert!(!result.message.is_empty());
assert_eq!(result.gate_name, "coverage");
}
#[test]
fn test_coverage_run_gate_satd_enabled_empty_patterns() {
let config = GateConfig {
gates: GatesConfig {
satd: SatdConfig {
enabled: true,
max_count: 100,
patterns: vec![], fail_on_violation: true,
require_issue_links: false,
},
..GatesConfig::default()
},
..GateConfig::default()
};
let gate = QualityGate::new(config);
let result = gate.run_gate("satd");
assert!(result.passed);
assert_eq!(result.gate_name, "satd");
assert!(result.metrics.contains_key("count"));
}
#[test]
fn test_coverage_run_gate_all_known_names_return_named_results() {
let gate = QualityGate::with_defaults();
for name in &[
"clippy",
"complexity",
"tests",
"coverage",
"satd",
"mutation",
"security",
] {
let result = gate.run_gate(name);
assert_eq!(result.gate_name, *name, "gate_name mismatch for {name}");
}
}