huskies: merge 945

This commit is contained in:
dave
2026-05-13 06:05:01 +00:00
parent 3a8894ea8f
commit 9ce5a8df0c
53 changed files with 497 additions and 654 deletions
+24 -16
View File
@@ -300,6 +300,9 @@ fn supersede_from_any_active_or_done() {
#[test]
fn review_hold_from_active_stages() {
// Story 945: `ReviewHold` transitions to `Stage::ReviewHold { resume_to }`
// with the resume_to set to the originating stage, replacing the legacy
// boolean flag.
for s in [Stage::Backlog, Stage::Coding, Stage::Qa] {
let result = transition(
s.clone(),
@@ -307,13 +310,14 @@ fn review_hold_from_active_stages() {
reason: "review".into(),
},
);
assert!(matches!(
result,
Ok(Stage::Archived {
reason: ArchiveReason::ReviewHeld { .. },
..
})
));
let resumed = match result {
Ok(Stage::ReviewHold { resume_to, .. }) => *resume_to,
other => panic!("ReviewHold should produce Stage::ReviewHold; got {other:?}"),
};
assert_eq!(
resumed, s,
"resume_to should preserve the originating stage"
);
}
}
@@ -578,7 +582,9 @@ fn cannot_reject_from_archived() {
/// to "restore". Tests the freeze/unfreeze API on the apply layer, since
/// freeze/unfreeze are no longer pure stage transitions.
#[test]
fn freeze_sets_flag_without_changing_stage() {
fn freeze_transitions_to_frozen_variant_with_resume_to() {
// Story 945: freeze/unfreeze move the typed stage to `Stage::Frozen
// { resume_to }` and back, replacing the orthogonal boolean flag.
crate::crdt_state::init_for_test();
crate::db::ensure_content_store();
@@ -597,24 +603,26 @@ fn freeze_sets_flag_without_changing_stage() {
super::apply::transition_to_frozen(story_id).expect("freeze should succeed");
let item = read_typed(story_id).unwrap().unwrap();
assert!(
matches!(item.stage, Stage::Coding),
"stage register stays at Coding after freeze: {:?}",
item.stage
);
assert!(item.is_frozen(), "frozen flag should be set after freeze");
match &item.stage {
Stage::Frozen { resume_to } => assert!(
matches!(**resume_to, Stage::Coding),
"resume_to should preserve the previous stage; got {resume_to:?}"
),
other => panic!("stage should be Stage::Frozen after freeze; got {other:?}"),
}
assert!(item.is_frozen(), "is_frozen() should be true after freeze");
super::apply::transition_to_unfrozen(story_id).expect("unfreeze should succeed");
let item = read_typed(story_id).unwrap().unwrap();
assert!(
matches!(item.stage, Stage::Coding),
"stage register still at Coding after unfreeze: {:?}",
"stage should return to Coding after unfreeze: {:?}",
item.stage
);
assert!(
!item.is_frozen(),
"frozen flag should be cleared after unfreeze"
"is_frozen() should be false after unfreeze"
);
}