use debtmap::*;
use std::path::PathBuf;
#[test]
fn test_todo_fixme_detection() {
let content = r#"
// TODO: Implement this feature
// FIXME: This is broken
// HACK: Temporary workaround
// XXX: This needs review
// BUG: Known issue here
// OPTIMIZE: Can be improved
// REFACTOR: Needs cleanup
"#;
let path = PathBuf::from("test.rs");
let items = find_todos_and_fixmes(content, &path);
assert_eq!(items.len(), 7, "Should find all debt markers");
let has_high_priority = items.iter().any(|item| item.priority == Priority::High);
let has_medium_priority = items.iter().any(|item| item.priority == Priority::Medium);
assert!(
has_high_priority,
"Should have high priority items (FIXME, BUG)"
);
assert!(
has_medium_priority,
"Should have medium priority items (TODO)"
);
let todo_item = items.iter().find(|i| i.message.contains("TODO")).unwrap();
assert_eq!(todo_item.priority, Priority::Medium);
assert!(matches!(todo_item.debt_type, DebtType::Todo { .. }));
let fixme_item = items.iter().find(|i| i.message.contains("FIXME")).unwrap();
assert_eq!(fixme_item.priority, Priority::High);
assert!(matches!(fixme_item.debt_type, DebtType::Fixme { .. }));
}
#[test]
fn test_debt_item_creation() {
let item = DebtItem {
id: "test-debt-1".to_string(),
debt_type: DebtType::Complexity {
cyclomatic: 10,
cognitive: 8,
},
priority: Priority::High,
file: PathBuf::from("complex.rs"),
line: 42,
column: None,
message: "Function has high complexity".to_string(),
context: Some("fn complex_function() { ... }".to_string()),
};
assert!(matches!(item.debt_type, DebtType::Complexity { .. }));
assert_eq!(item.priority, Priority::High);
assert_eq!(item.line, 42);
assert!(item.context.is_some());
}
#[test]
fn test_priority_ordering() {
let low = Priority::Low;
let medium = Priority::Medium;
let high = Priority::High;
let critical = Priority::Critical;
assert!(low < medium);
assert!(medium < high);
assert!(high < critical);
assert!(critical > low);
}
#[test]
fn test_language_detection() {
assert_eq!(Language::from_extension("rs"), Language::Rust);
assert_eq!(Language::from_extension("py"), Language::Python);
assert_eq!(Language::from_extension("unknown"), Language::Unknown);
}