#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_pdmt_config_default() {
let config = PdmtConfig::default();
assert_eq!(config.seed, 42);
assert_eq!(config.quality_level, QualityLevel::Strict);
assert_eq!(config.granularity, Granularity::High);
assert!(config.enforce_standards);
}
#[test]
fn test_issue_type_labels() {
assert_eq!(
IssueType::Feature.default_labels(),
vec!["enhancement", "feature"]
);
assert_eq!(IssueType::Bug.default_labels(), vec!["bug"]);
assert_eq!(
IssueType::Refactor.default_labels(),
vec!["refactor", "technical-debt"]
);
}
#[test]
fn test_issue_type_title_prefix() {
assert_eq!(IssueType::Feature.title_prefix(), "feat:");
assert_eq!(IssueType::Bug.title_prefix(), "fix:");
assert_eq!(IssueType::Enhancement.title_prefix(), "enhance:");
}
#[test]
fn test_priority_labels() {
assert_eq!(Priority::Low.label(), "priority:low");
assert_eq!(Priority::High.label(), "priority:high");
assert_eq!(Priority::Critical.label(), "priority:critical");
}
#[test]
fn test_quality_requirements_default() {
let reqs = QualityRequirements::default();
assert_eq!(reqs.test_coverage, 85);
assert_eq!(reqs.max_complexity, 20);
assert_eq!(reqs.satd_tolerance, 0);
assert!(reqs.documentation_required);
assert!(reqs.property_tests_required);
}
#[test]
fn test_pdmt_service_creation() {
let service = PdmtGitHubService::new();
assert_eq!(service.config.seed, 42);
let custom_config = PdmtConfig {
seed: 123,
quality_level: QualityLevel::Advisory,
granularity: Granularity::Medium,
enforce_standards: false,
};
let service_custom = PdmtGitHubService::with_config(custom_config);
assert_eq!(service_custom.config.seed, 123);
assert_eq!(service_custom.config.quality_level, QualityLevel::Advisory);
}
#[test]
fn test_request_validation() {
let service = PdmtGitHubService::new();
let valid_request = PdmtIssueRequest {
title: "Test feature".to_string(),
description: "Test description".to_string(),
issue_type: IssueType::Feature,
priority: Priority::Medium,
complexity_estimate: Some(10),
assignees: vec![],
custom_labels: vec![],
config: None,
};
assert!(service.validate_request(&valid_request).is_ok());
let invalid_request = PdmtIssueRequest {
title: "".to_string(),
description: "Test description".to_string(),
issue_type: IssueType::Feature,
priority: Priority::Medium,
complexity_estimate: None,
assignees: vec![],
custom_labels: vec![],
config: None,
};
assert!(service.validate_request(&invalid_request).is_err());
}
#[test]
fn test_issue_template_generation() {
let service = PdmtGitHubService::new();
let request = PdmtIssueRequest {
title: "Implement user authentication".to_string(),
description: "Add secure login and registration system".to_string(),
issue_type: IssueType::Feature,
priority: Priority::High,
complexity_estimate: Some(18),
assignees: vec!["developer".to_string()],
custom_labels: vec!["security".to_string()],
config: None,
};
let template = service.generate_issue_template(&request).unwrap();
assert_eq!(template.title, "feat: Implement user authentication");
assert!(template.body.contains("## PDMT Configuration"));
assert!(template.body.contains("- **Seed**: 42"));
assert!(template.body.contains("## Quality Requirements"));
assert!(template.body.contains("## Validation Commands"));
assert!(template.body.contains("## Success Criteria"));
assert!(template.labels.contains(&"enhancement".to_string()));
assert!(template.labels.contains(&"feature".to_string()));
assert!(template.labels.contains(&"priority:high".to_string()));
assert!(template.labels.contains(&"security".to_string()));
assert!(template.labels.contains(&"pdmt".to_string()));
assert!(template.labels.contains(&"complexity:high".to_string()));
assert_eq!(template.assignees, vec!["developer"]);
}
#[test]
fn test_complexity_categories() {
let service = PdmtGitHubService::new();
assert_eq!(service.complexity_category(3), "trivial");
assert_eq!(service.complexity_category(8), "low");
assert_eq!(service.complexity_category(13), "medium");
assert_eq!(service.complexity_category(20), "high");
assert_eq!(service.complexity_category(30), "very-high");
}
#[test]
fn test_issue_type_extraction() {
let service = PdmtGitHubService::new();
assert_eq!(
service.extract_issue_type_from_title("feat: New feature"),
IssueType::Feature
);
assert_eq!(
service.extract_issue_type_from_title("fix: Bug fix"),
IssueType::Bug
);
assert_eq!(
service.extract_issue_type_from_title("enhance: Improvement"),
IssueType::Enhancement
);
assert_eq!(
service.extract_issue_type_from_title("refactor: Code cleanup"),
IssueType::Refactor
);
assert_eq!(
service.extract_issue_type_from_title("docs: Documentation"),
IssueType::Documentation
);
assert_eq!(
service.extract_issue_type_from_title("test: Add tests"),
IssueType::Testing
);
assert_eq!(
service.extract_issue_type_from_title("Random title"),
IssueType::Feature
);
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod property_tests {
use proptest::prelude::*;
proptest! {
#[test]
fn basic_property_stability(_input in ".*") {
prop_assert!(true);
}
#[test]
fn module_consistency_check(_x in 0u32..1000) {
prop_assert!(_x < 1001);
}
}
}