use debtmap::{
analysis::FileContext,
core::AnalysisResults,
priority::scoring::file_context_scoring::{
apply_context_adjustments, context_label, is_test_context,
},
};
use std::collections::HashMap;
use std::path::PathBuf;
#[test]
fn test_file_context_scoring_reduction() {
let test_context = FileContext::Test {
confidence: 0.95,
test_framework: Some("rust-std".to_string()),
test_count: 10,
};
let base_score = 100.0;
let adjusted_score = apply_context_adjustments(base_score, &test_context);
assert_eq!(adjusted_score, 20.0);
assert!(adjusted_score < base_score);
let probable_test = FileContext::Test {
confidence: 0.65,
test_framework: None,
test_count: 5,
};
let probable_score = apply_context_adjustments(base_score, &probable_test);
assert_eq!(probable_score, 60.0);
assert!(probable_score < base_score);
assert!(probable_score > adjusted_score);
let prod_context = FileContext::Production;
let prod_score = apply_context_adjustments(base_score, &prod_context);
assert_eq!(prod_score, base_score); }
#[test]
fn test_file_context_labels() {
let high_conf_test = FileContext::Test {
confidence: 0.95,
test_framework: Some("rust-std".to_string()),
test_count: 10,
};
assert_eq!(context_label(&high_conf_test), "TEST FILE");
let probable_test = FileContext::Test {
confidence: 0.65,
test_framework: None,
test_count: 3,
};
assert_eq!(context_label(&probable_test), "PROBABLE TEST");
let prod_context = FileContext::Production;
assert_eq!(context_label(&prod_context), "PRODUCTION");
}
#[test]
fn test_file_context_detection_predicates() {
let high_conf = FileContext::Test {
confidence: 0.9,
test_framework: None,
test_count: 5,
};
assert!(high_conf.is_test()); assert!(high_conf.is_probable_test());
assert!(is_test_context(&high_conf));
let probable = FileContext::Test {
confidence: 0.6,
test_framework: None,
test_count: 2,
};
assert!(!probable.is_test()); assert!(probable.is_probable_test());
assert!(is_test_context(&probable));
let low_conf = FileContext::Test {
confidence: 0.3,
test_framework: None,
test_count: 1,
};
assert!(!low_conf.is_test());
assert!(!low_conf.is_probable_test());
assert!(!is_test_context(&low_conf));
let prod = FileContext::Production;
assert!(!prod.is_test());
assert!(!prod.is_probable_test());
assert!(!is_test_context(&prod));
}
#[test]
fn test_analysis_results_contains_file_contexts() {
let test_file = PathBuf::from("src/lib_test.rs");
let prod_file = PathBuf::from("src/lib.rs");
let mut file_contexts = HashMap::new();
file_contexts.insert(
test_file.clone(),
FileContext::Test {
confidence: 0.95,
test_framework: Some("rust-std".to_string()),
test_count: 10,
},
);
file_contexts.insert(prod_file.clone(), FileContext::Production);
let results = AnalysisResults {
project_path: PathBuf::from("."),
timestamp: chrono::Utc::now(),
complexity: debtmap::core::ComplexityReport {
metrics: vec![],
summary: debtmap::core::ComplexitySummary {
total_functions: 0,
average_complexity: 0.0,
max_complexity: 0,
high_complexity_count: 0,
},
},
technical_debt: debtmap::core::TechnicalDebtReport {
items: vec![],
by_type: HashMap::new(),
priorities: vec![],
duplications: vec![],
},
dependencies: debtmap::core::DependencyReport {
modules: vec![],
circular: vec![],
},
duplications: vec![],
file_contexts: file_contexts.clone(),
};
assert_eq!(results.file_contexts.len(), 2);
assert!(results.file_contexts.contains_key(&test_file));
assert!(results.file_contexts.contains_key(&prod_file));
let test_ctx = results.file_contexts.get(&test_file).unwrap();
assert!(test_ctx.is_test()); assert_eq!(test_ctx.test_confidence(), Some(0.95));
let prod_ctx = results.file_contexts.get(&prod_file).unwrap();
assert!(!prod_ctx.is_test()); }