de40fe73c7
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
55 lines
1.6 KiB
Go
55 lines
1.6 KiB
Go
package statemachine
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"antidrift/internal/domain"
|
|
)
|
|
|
|
func TestPlanningActivatesOnlyWithAcceptedPolicy(t *testing.T) {
|
|
got, err := TransitionRuntime(domain.RuntimePlanning, ActivateAccepted)
|
|
if err != nil || got != domain.RuntimeActive {
|
|
t.Fatalf("accepted: got %s err %v", got, err)
|
|
}
|
|
_, err = TransitionRuntime(domain.RuntimePlanning, ActivateRejected)
|
|
if err == nil {
|
|
t.Fatalf("rejected policy should error")
|
|
}
|
|
}
|
|
|
|
func TestActiveCanCompleteForReview(t *testing.T) {
|
|
got, err := TransitionRuntime(domain.RuntimeActive, CompleteForReview)
|
|
if err != nil || got != domain.RuntimeReview {
|
|
t.Fatalf("got %s err %v", got, err)
|
|
}
|
|
}
|
|
|
|
func TestReviewEndsToLocked(t *testing.T) {
|
|
got, err := TransitionRuntime(domain.RuntimeReview, EndWorkPeriod)
|
|
if err != nil || got != domain.RuntimeLocked {
|
|
t.Fatalf("got %s err %v", got, err)
|
|
}
|
|
}
|
|
|
|
func TestLockedCannotBecomeActiveDirectly(t *testing.T) {
|
|
_, err := TransitionRuntime(domain.RuntimeLocked, ActivateAccepted)
|
|
if err == nil {
|
|
t.Fatalf("locked->active must be illegal")
|
|
}
|
|
}
|
|
|
|
func TestCommitmentDraftActivatesAndViolatedRecovers(t *testing.T) {
|
|
got, err := TransitionCommitment(domain.CommitmentDraft, CommitmentActivate)
|
|
if err != nil || got != domain.CommitmentActive {
|
|
t.Fatalf("draft->active: got %s err %v", got, err)
|
|
}
|
|
got, err = TransitionCommitment(domain.CommitmentViolated, RecoverExplicitly)
|
|
if err != nil || got != domain.CommitmentActive {
|
|
t.Fatalf("violated->active: got %s err %v", got, err)
|
|
}
|
|
_, err = TransitionCommitment(domain.CommitmentViolated, ReturnFromPause)
|
|
if err == nil {
|
|
t.Fatalf("violated->returnFromPause must be illegal")
|
|
}
|
|
}
|