use super::*;
#[test]
fn test_review_output_validation_failed_resets_agent_invoked_pass() {
let state = PipelineState {
phase: PipelinePhase::Review,
reviewer_pass: 0,
review_agent_invoked_pass: Some(0), review_issues_xml_extracted_pass: None, ..create_test_state()
};
let new_state = reduce(
state,
PipelineEvent::review_output_validation_failed(0, 0, None),
);
assert!(
new_state.review_agent_invoked_pass.is_none(),
"review_agent_invoked_pass should be reset after validation failure, got {:?}",
new_state.review_agent_invoked_pass
);
}
#[test]
fn test_review_issues_xml_missing_resets_agent_invoked_pass() {
let state = PipelineState {
phase: PipelinePhase::Review,
reviewer_pass: 0,
review_agent_invoked_pass: Some(0), review_issues_xml_extracted_pass: None,
..create_test_state()
};
let new_state = reduce(state, PipelineEvent::review_issues_xml_missing(0, 0, None));
assert!(
new_state.review_agent_invoked_pass.is_none(),
"review_agent_invoked_pass should be reset after issues.xml missing, got {:?}",
new_state.review_agent_invoked_pass
);
}
#[test]
fn test_fix_output_validation_failed_resets_agent_invoked_pass() {
let state = PipelineState {
phase: PipelinePhase::Review,
reviewer_pass: 0,
review_issues_found: true, fix_agent_invoked_pass: Some(0), fix_result_xml_extracted_pass: None,
..create_test_state()
};
let new_state = reduce(
state,
PipelineEvent::fix_output_validation_failed(0, 0, None),
);
assert!(
new_state.fix_agent_invoked_pass.is_none(),
"fix_agent_invoked_pass should be reset after validation failure, got {:?}",
new_state.fix_agent_invoked_pass
);
}
#[test]
fn test_fix_result_xml_missing_resets_agent_invoked_pass() {
let state = PipelineState {
phase: PipelinePhase::Review,
reviewer_pass: 0,
review_issues_found: true, fix_agent_invoked_pass: Some(0), fix_result_xml_extracted_pass: None,
..create_test_state()
};
let new_state = reduce(state, PipelineEvent::fix_result_xml_missing(0, 0, None));
assert!(
new_state.fix_agent_invoked_pass.is_none(),
"fix_agent_invoked_pass should be reset after fix_result.xml missing, got {:?}",
new_state.fix_agent_invoked_pass
);
}
#[test]
fn test_planning_output_validation_failed_resets_agent_invoked_iteration() {
let state = PipelineState {
phase: PipelinePhase::Planning,
iteration: 0,
planning_agent_invoked_iteration: Some(0), planning_xml_extracted_iteration: None, ..create_test_state()
};
let new_state = reduce(
state,
PipelineEvent::planning_output_validation_failed(0, 0),
);
assert!(
new_state.planning_agent_invoked_iteration.is_none(),
"planning_agent_invoked_iteration should be reset after validation failure, got {:?}",
new_state.planning_agent_invoked_iteration
);
assert!(
new_state.planning_prompt_prepared_iteration.is_none(),
"planning_prompt_prepared_iteration should be reset for XSD retry prompt preparation"
);
}
#[test]
fn test_planning_plan_xml_missing_resets_agent_invoked_iteration() {
let state = PipelineState {
phase: PipelinePhase::Planning,
iteration: 0,
planning_agent_invoked_iteration: Some(0), planning_xml_extracted_iteration: None,
..create_test_state()
};
let new_state = reduce(state, PipelineEvent::planning_xml_missing(0, 0));
assert!(
new_state.planning_agent_invoked_iteration.is_none(),
"planning_agent_invoked_iteration should be reset after plan.xml missing, got {:?}",
new_state.planning_agent_invoked_iteration
);
}
#[test]
fn test_development_output_validation_failed_resets_analysis_agent_invoked() {
let state = PipelineState {
phase: PipelinePhase::Development,
iteration: 1,
development_agent_invoked_iteration: Some(1), analysis_agent_invoked_iteration: Some(1), development_xml_extracted_iteration: None, ..create_test_state()
};
let new_state = reduce(
state,
PipelineEvent::development_output_validation_failed(1, 0),
);
assert_eq!(
new_state.development_agent_invoked_iteration,
Some(1),
"development_agent_invoked_iteration should be preserved (XSD retry is for analysis)"
);
assert!(
new_state.analysis_agent_invoked_iteration.is_none(),
"analysis_agent_invoked_iteration should be reset for XSD retry, got {:?}",
new_state.analysis_agent_invoked_iteration
);
}
#[test]
fn test_development_xml_missing_resets_analysis_agent_invoked() {
let state = PipelineState {
phase: PipelinePhase::Development,
iteration: 1,
development_agent_invoked_iteration: Some(1),
analysis_agent_invoked_iteration: Some(1),
development_xml_extracted_iteration: None,
..create_test_state()
};
let new_state = reduce(state, PipelineEvent::development_xml_missing(1, 0));
assert_eq!(
new_state.development_agent_invoked_iteration,
Some(1),
"development_agent_invoked_iteration should be preserved"
);
assert!(
new_state.analysis_agent_invoked_iteration.is_none(),
"analysis_agent_invoked_iteration should be reset after xml missing, got {:?}",
new_state.analysis_agent_invoked_iteration
);
}
#[test]
fn test_commit_message_validation_failed_resets_agent_invoked() {
let state = PipelineState {
phase: PipelinePhase::CommitMessage,
commit: CommitState::Generating {
attempt: 1,
max_attempts: 3,
},
commit_agent_invoked: true, commit_xml_extracted: false,
..create_test_state()
};
let new_state = reduce(
state,
PipelineEvent::commit_message_validation_failed("Invalid XML".to_string(), 1),
);
assert!(
!new_state.commit_agent_invoked,
"commit_agent_invoked should be reset after validation failure"
);
assert!(
!new_state.commit_prompt_prepared,
"commit_prompt_prepared should be reset for XSD retry prompt preparation"
);
}