use crate::phases::review::xsd_retry_input_strategy::{
decide_xsd_retry_input_source, XsdRetryInputSource,
};
use std::path::Path;
#[test]
fn xsd_retry_input_source_decision_is_pure() {
let source = decide_xsd_retry_input_source(
true,
false,
Path::new(".agent/tmp/issues.xml"),
Path::new(".agent/tmp/issues.xml.processed"),
);
assert!(matches!(source, XsdRetryInputSource::Primary { .. }));
let source = decide_xsd_retry_input_source(
false,
true,
Path::new(".agent/tmp/issues.xml"),
Path::new(".agent/tmp/issues.xml.processed"),
);
assert!(matches!(
source,
XsdRetryInputSource::ArchivedFallback { .. }
));
let source = decide_xsd_retry_input_source(
false,
false,
Path::new(".agent/tmp/issues.xml"),
Path::new(".agent/tmp/issues.xml.processed"),
);
assert_eq!(source, XsdRetryInputSource::EmptyFallback);
}
#[test]
fn boundary_uses_decided_source_not_inline_fallback_chain() {
let primary_path = Path::new(".agent/tmp/issues.xml");
let archived_path = Path::new(".agent/tmp/issues.xml.processed");
let decision_both_missing =
decide_xsd_retry_input_source(false, false, primary_path, archived_path);
let decision_archived_only =
decide_xsd_retry_input_source(false, true, primary_path, archived_path);
let decision_primary_exists =
decide_xsd_retry_input_source(true, true, primary_path, archived_path);
assert_eq!(decision_both_missing, XsdRetryInputSource::EmptyFallback);
assert!(matches!(
decision_archived_only,
XsdRetryInputSource::ArchivedFallback { .. }
));
assert!(matches!(
decision_primary_exists,
XsdRetryInputSource::Primary { .. }
));
}