use anyhow::Result;
use std::collections::HashMap;
use tempfile::TempDir;
use xchecker::fixup::{FixupMode, FixupParser};
use xchecker::orchestrator::OrchestratorConfig;
#[test]
fn test_apply_fixups_config_handling() -> Result<()> {
let mut config_preview = HashMap::new();
config_preview.insert("apply_fixups".to_string(), "false".to_string());
let orchestrator_config_preview = OrchestratorConfig {
dry_run: false,
config: config_preview,
full_config: None,
selectors: None,
strict_validation: false,
redactor: Default::default(),
hooks: None,
};
let apply_fixups_preview = orchestrator_config_preview
.config
.get("apply_fixups")
.is_some_and(|s| s == "true");
let fixup_mode_preview = if apply_fixups_preview {
FixupMode::Apply
} else {
FixupMode::Preview
};
assert_eq!(fixup_mode_preview, FixupMode::Preview);
let mut config_apply = HashMap::new();
config_apply.insert("apply_fixups".to_string(), "true".to_string());
let orchestrator_config_apply = OrchestratorConfig {
dry_run: false,
config: config_apply,
full_config: None,
selectors: None,
strict_validation: false,
redactor: Default::default(),
hooks: None,
};
let apply_fixups_apply = orchestrator_config_apply
.config
.get("apply_fixups")
.is_some_and(|s| s == "true");
let fixup_mode_apply = if apply_fixups_apply {
FixupMode::Apply
} else {
FixupMode::Preview
};
assert_eq!(fixup_mode_apply, FixupMode::Apply);
Ok(())
}
#[test]
fn test_fixup_parser_mode_behavior() -> Result<()> {
let sandbox = TempDir::new()?;
let temp_dir = sandbox.path().to_path_buf();
let parser_preview = FixupParser::new(FixupMode::Preview, temp_dir.clone())?;
let test_content = r"
FIXUP PLAN:
The following changes are needed:
```diff
--- a/test.txt
+++ b/test.txt
@@ -1,1 +1,2 @@
line 1
+line 2
```
";
if parser_preview.has_fixup_markers(test_content) {
let diffs = parser_preview.parse_diffs(test_content)?;
assert_eq!(diffs.len(), 1);
assert_eq!(diffs[0].target_file, "test.txt");
let preview = parser_preview.preview_changes(&diffs)?;
assert_eq!(preview.target_files.len(), 1);
assert_eq!(preview.target_files[0], "test.txt");
}
let parser_apply = FixupParser::new(FixupMode::Apply, temp_dir)?;
if parser_apply.has_fixup_markers(test_content) {
let diffs = parser_apply.parse_diffs(test_content)?;
assert_eq!(diffs.len(), 1);
assert_eq!(diffs[0].target_file, "test.txt");
}
Ok(())
}
#[test]
fn test_fixup_mode_enum() {
assert_eq!(FixupMode::Preview.as_str(), "preview");
assert_eq!(FixupMode::Apply.as_str(), "apply");
assert_eq!(FixupMode::Preview, FixupMode::Preview);
assert_eq!(FixupMode::Apply, FixupMode::Apply);
assert_ne!(FixupMode::Preview, FixupMode::Apply);
}