fix: guard state change event transitions

This commit is contained in:
2026-08-22 23:48:11 +09:00
parent ae8a0316d8
commit bc57ef38c1
+10 -1
View File
@@ -3923,7 +3923,8 @@ async fn scoped_close_ticket(
fn generic_ticket_state_change(operation: &TicketBackendOperation) -> Option<&TicketStateChange> { fn generic_ticket_state_change(operation: &TicketBackendOperation) -> Option<&TicketStateChange> {
match operation { match operation {
TicketBackendOperation::SetWorkflowState { change, .. } TicketBackendOperation::SetWorkflowState { change, .. }
| TicketBackendOperation::SetStateField { change, .. } => Some(change), | TicketBackendOperation::SetStateField { change, .. }
| TicketBackendOperation::AddStateChanged { change, .. } => Some(change),
_ => None, _ => None,
} }
} }
@@ -13352,6 +13353,10 @@ mod tests {
field: "state".to_string(), field: "state".to_string(),
change: change(), change: change(),
}, },
TicketBackendOperation::AddStateChanged {
id: TicketIdOrSlug::Query("T1".to_string()),
change: change(),
},
]; ];
for operation in operations { for operation in operations {
let error = reject_unguarded_ticket_completion(&operation).unwrap_err(); let error = reject_unguarded_ticket_completion(&operation).unwrap_err();
@@ -13384,6 +13389,10 @@ mod tests {
field: "state".to_string(), field: "state".to_string(),
change: change(), change: change(),
}, },
TicketBackendOperation::AddStateChanged {
id: TicketIdOrSlug::Query("T1".to_string()),
change: change(),
},
] { ] {
let error = reject_unguarded_ticket_completion(&operation).unwrap_err(); let error = reject_unguarded_ticket_completion(&operation).unwrap_err();
assert!(error.to_string().contains("MergeRequestComplete")); assert!(error.to_string().contains("MergeRequestComplete"));