use crate::grid::{
DisabledFeature, PRESET_GRID, PRESET_KINDS, PresetKind, preset_plan_for, preset_plan_for_name,
};
#[test]
fn receipt_enables_core_enrichers() {
let plan = preset_plan_for(PresetKind::Receipt);
assert!(!plan.assets);
assert!(!plan.deps);
assert!(!plan.todo);
assert!(plan.dup);
assert!(!plan.imports);
assert!(plan.git);
assert!(!plan.fun);
assert!(!plan.archetype);
assert!(!plan.topics);
assert!(!plan.entropy);
assert!(!plan.license);
assert!(plan.complexity);
assert!(plan.api_surface);
}
#[test]
fn receipt_needs_files() {
let plan = preset_plan_for(PresetKind::Receipt);
assert!(plan.needs_files());
}
#[test]
fn fun_only_enables_fun() {
let plan = preset_plan_for(PresetKind::Fun);
assert!(plan.fun);
assert!(!plan.assets);
assert!(!plan.deps);
assert!(!plan.todo);
assert!(!plan.dup);
assert!(!plan.imports);
assert!(!plan.git);
assert!(!plan.archetype);
assert!(!plan.topics);
assert!(!plan.entropy);
assert!(!plan.license);
assert!(!plan.complexity);
assert!(!plan.api_surface);
}
#[test]
fn supply_enables_assets_and_deps() {
let plan = preset_plan_for(PresetKind::Supply);
assert!(plan.assets);
assert!(plan.deps);
assert!(!plan.todo);
assert!(!plan.git);
assert!(!plan.fun);
}
#[test]
fn architecture_enables_imports_and_api_surface() {
let plan = preset_plan_for(PresetKind::Architecture);
assert!(plan.imports);
assert!(plan.api_surface);
assert!(!plan.assets);
assert!(!plan.deps);
assert!(!plan.git);
}
#[test]
fn health_enables_todo_and_complexity() {
let plan = preset_plan_for(PresetKind::Health);
assert!(plan.todo);
assert!(plan.complexity);
assert!(!plan.git);
assert!(!plan.assets);
}
#[test]
fn risk_enables_git_and_complexity() {
let plan = preset_plan_for(PresetKind::Risk);
assert!(plan.git);
assert!(plan.complexity);
assert!(!plan.assets);
assert!(!plan.fun);
}
#[test]
fn security_enables_entropy_and_license() {
let plan = preset_plan_for(PresetKind::Security);
assert!(plan.entropy);
assert!(plan.license);
assert!(!plan.git);
assert!(!plan.todo);
}
#[test]
fn deep_is_superset_of_all_base_flags() {
let deep = preset_plan_for(PresetKind::Deep);
assert!(deep.assets);
assert!(deep.deps);
assert!(deep.todo);
assert!(deep.dup);
assert!(deep.imports);
assert!(deep.git);
assert!(deep.archetype);
assert!(deep.topics);
assert!(deep.entropy);
assert!(deep.license);
assert!(deep.complexity);
assert!(deep.api_surface);
assert!(!deep.fun);
}
#[test]
fn deep_needs_files() {
let plan = preset_plan_for(PresetKind::Deep);
assert!(plan.needs_files());
}
#[test]
fn needs_files_true_for_file_dependent_presets() {
let file_presets = [
PresetKind::Receipt,
PresetKind::Estimate,
PresetKind::Health,
PresetKind::Supply,
PresetKind::Architecture,
PresetKind::Security,
PresetKind::Deep,
];
for kind in &file_presets {
let plan = preset_plan_for(*kind);
assert!(plan.needs_files(), "preset {:?} should need files", kind);
}
}
#[test]
fn grid_has_twelve_entries() {
assert_eq!(PRESET_GRID.len(), 12);
assert_eq!(PRESET_KINDS.len(), 12);
assert_eq!(PresetKind::all().len(), 12);
}
#[test]
fn every_kind_has_grid_row() {
for kind in PresetKind::all() {
let found = PRESET_GRID.iter().any(|row| row.preset == *kind);
assert!(found, "PresetKind::{:?} missing from PRESET_GRID", kind);
}
}
#[test]
fn disabled_feature_warnings_non_empty_and_unique() {
let features = [
DisabledFeature::FileInventory,
DisabledFeature::TodoScan,
DisabledFeature::DuplicationScan,
DisabledFeature::NearDuplicateScan,
DisabledFeature::ImportScan,
DisabledFeature::GitMetrics,
DisabledFeature::EntropyProfiling,
DisabledFeature::LicenseRadar,
DisabledFeature::ComplexityAnalysis,
DisabledFeature::ApiSurfaceAnalysis,
DisabledFeature::Archetype,
DisabledFeature::Topics,
DisabledFeature::Fun,
];
let mut seen = std::collections::BTreeSet::new();
for feat in &features {
let msg = feat.warning();
assert!(!msg.is_empty(), "{:?} has empty warning", feat);
assert!(seen.insert(msg), "duplicate warning message: {}", msg);
}
}
#[test]
fn preset_plan_for_name_rejects_invalid() {
assert!(preset_plan_for_name("").is_none());
assert!(preset_plan_for_name("DEEP").is_none());
assert!(preset_plan_for_name("unknown").is_none());
assert!(preset_plan_for_name("receipt ").is_none());
assert!(preset_plan_for_name(" receipt").is_none());
}