Restrict admin override exits
This commit is contained in:
+35
-5
@@ -109,12 +109,11 @@ pub fn transition_runtime(
|
|||||||
(Review, ContinuePlanning) => Ok(Planning),
|
(Review, ContinuePlanning) => Ok(Planning),
|
||||||
(Review, EndWorkPeriod) => Ok(Locked),
|
(Review, EndWorkPeriod) => Ok(Locked),
|
||||||
(_, EnterAdminOverride) => Ok(AdminOverride),
|
(_, EnterAdminOverride) => Ok(AdminOverride),
|
||||||
(AdminOverride, ExitAdminOverride(AdminOverride)) => {
|
(AdminOverride, ExitAdminOverride(Locked)) => Ok(Locked),
|
||||||
Err(TransitionError::InvalidAdminOverrideExitTarget {
|
(AdminOverride, ExitAdminOverride(Planning)) => Ok(Planning),
|
||||||
target: AdminOverride,
|
(AdminOverride, ExitAdminOverride(target)) => {
|
||||||
})
|
Err(TransitionError::InvalidAdminOverrideExitTarget { target })
|
||||||
}
|
}
|
||||||
(AdminOverride, ExitAdminOverride(next)) => Ok(next),
|
|
||||||
_ => Err(TransitionError::IllegalRuntimeTransition { current, action }),
|
_ => Err(TransitionError::IllegalRuntimeTransition { current, action }),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -237,6 +236,37 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn admin_override_cannot_exit_to_active_or_transition() {
|
||||||
|
for target in [RuntimeState::Active, RuntimeState::Transition] {
|
||||||
|
let err = transition_runtime(
|
||||||
|
RuntimeState::AdminOverride,
|
||||||
|
RuntimeAction::ExitAdminOverride(target),
|
||||||
|
)
|
||||||
|
.unwrap_err();
|
||||||
|
|
||||||
|
assert_eq!(err, TransitionError::InvalidAdminOverrideExitTarget { target });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn admin_override_can_exit_to_locked_or_planning() {
|
||||||
|
assert_eq!(
|
||||||
|
transition_runtime(
|
||||||
|
RuntimeState::AdminOverride,
|
||||||
|
RuntimeAction::ExitAdminOverride(RuntimeState::Locked),
|
||||||
|
),
|
||||||
|
Ok(RuntimeState::Locked)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
transition_runtime(
|
||||||
|
RuntimeState::AdminOverride,
|
||||||
|
RuntimeAction::ExitAdminOverride(RuntimeState::Planning),
|
||||||
|
),
|
||||||
|
Ok(RuntimeState::Planning)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn commitment_violation_recovery_is_explicit() {
|
fn commitment_violation_recovery_is_explicit() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
|||||||
Reference in New Issue
Block a user