use pmat::red_team::{ClaimCategory, ClaimExtractor};
#[test]
fn test_extract_all_tests_passing_claim() {
let extractor = ClaimExtractor::new();
let commit_msg = "fix: All tests passing";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 1);
assert_eq!(claims[0].category, ClaimCategory::TestStatus);
assert_eq!(claims[0].text, "All tests passing");
assert!(claims[0].is_absolute);
}
#[test]
fn test_extract_coverage_percentage_claim() {
let extractor = ClaimExtractor::new();
let commit_msg = "test: Coverage stable at 85%";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 1);
assert_eq!(claims[0].category, ClaimCategory::Coverage);
assert_eq!(claims[0].text, "Coverage stable at 85%");
assert_eq!(claims[0].numeric_value, Some(85.0));
}
#[test]
fn test_extract_feature_completion_claim() {
let extractor = ClaimExtractor::new();
let commit_msg = "feat: Complete user authentication (MVP - Sprint 42)";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 1);
assert_eq!(claims[0].category, ClaimCategory::FeatureCompletion);
assert_eq!(claims[0].text, "Complete user authentication");
assert!(claims[0].has_scope_qualifier); }
#[test]
fn test_extract_documentation_claim() {
let extractor = ClaimExtractor::new();
let commit_msg = "docs: Fix all broken documentation links (18 → 0)";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 1);
assert_eq!(claims[0].category, ClaimCategory::Documentation);
assert_eq!(claims[0].text, "Fix all broken documentation links");
assert!(claims[0].is_absolute); }
#[test]
fn test_extract_migration_claim() {
let extractor = ClaimExtractor::new();
let commit_msg = "feat: Complete migration to libsql";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 1);
assert_eq!(claims[0].category, ClaimCategory::Migration);
assert_eq!(claims[0].text, "Complete migration to libsql");
assert!(claims[0].is_absolute);
}
#[test]
fn test_extract_bug_fix_claim() {
let extractor = ClaimExtractor::new();
let commit_msg = "fix: Resolve issue #42 - parser bug";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 1);
assert_eq!(claims[0].category, ClaimCategory::BugFix);
assert_eq!(claims[0].text, "Resolve issue #42");
assert_eq!(claims[0].issue_number, Some(42));
}
#[test]
fn test_extract_performance_claim() {
let extractor = ClaimExtractor::new();
let commit_msg = "perf: 50% faster parsing";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 1);
assert_eq!(claims[0].category, ClaimCategory::Performance);
assert_eq!(claims[0].text, "50% faster parsing");
assert_eq!(claims[0].numeric_value, Some(50.0));
}
#[test]
fn test_extract_security_claim() {
let extractor = ClaimExtractor::new();
let commit_msg = "security: Zero vulnerabilities after audit";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 1);
assert_eq!(claims[0].category, ClaimCategory::Security);
assert_eq!(claims[0].text, "Zero vulnerabilities");
assert!(claims[0].is_absolute);
}
#[test]
fn test_extract_multiple_claims() {
let extractor = ClaimExtractor::new();
let commit_msg = "feat: Complete X feature\n\nAll tests passing\nCoverage at 90%";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 3);
assert_eq!(claims[0].category, ClaimCategory::FeatureCompletion);
assert_eq!(claims[1].category, ClaimCategory::TestStatus);
assert_eq!(claims[2].category, ClaimCategory::Coverage);
}
#[test]
fn test_extract_no_claims_from_vague_message() {
let extractor = ClaimExtractor::new();
let commit_msg = "refactor: Update code";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 0);
}
#[test]
fn test_extract_qualified_claim() {
let extractor = ClaimExtractor::new();
let commit_msg = "fix: Most tests passing (293/309)";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 1);
assert!(!claims[0].is_absolute); assert_eq!(claims[0].numeric_value, Some(293.0));
}
#[test]
fn test_detect_phase_marker() {
let extractor = ClaimExtractor::new();
let commit_msg = "feat: Phase 1 complete - read operations";
let claims = extractor.extract(commit_msg);
assert_eq!(claims.len(), 1);
assert!(claims[0].has_scope_qualifier);
assert_eq!(claims[0].scope, Some("Phase 1".to_string()));
}