Files
cmroubao/backend-api/internal/domain/lifecycle_test.go
T

46 lines
1.3 KiB
Go

package domain
import "testing"
func TestLifecycleStatusPredicates(t *testing.T) {
statuses := []TaskStatus{
TaskStatusPending,
TaskStatusClaimed,
TaskStatusRunning,
TaskStatusWaitingConfirmation,
TaskStatusSucceeded,
TaskStatusFailed,
TaskStatusCanceled,
}
for _, status := range statuses {
t.Run(string(status), func(t *testing.T) {
active := status == TaskStatusClaimed ||
status == TaskStatusRunning ||
status == TaskStatusWaitingConfirmation
if IsActiveTaskStatus(status) != active {
t.Fatalf("IsActiveTaskStatus(%s) = %v", status, !active)
}
if CanStart(status) != (status == TaskStatusClaimed) {
t.Fatalf("CanStart(%s) mismatch", status)
}
heartbeat := status == TaskStatusRunning ||
status == TaskStatusWaitingConfirmation
if CanHeartbeat(status) != heartbeat {
t.Fatalf("CanHeartbeat(%s) mismatch", status)
}
if CanRelease(status) != (status == TaskStatusClaimed) {
t.Fatalf("CanRelease(%s) mismatch", status)
}
immediateCancel := status == TaskStatusPending ||
status == TaskStatusClaimed
if CanAdminCancelImmediately(status) != immediateCancel {
t.Fatalf("CanAdminCancelImmediately(%s) mismatch", status)
}
if CanRequestCancel(status) != heartbeat ||
CanAcknowledgeCancel(status) != heartbeat {
t.Fatalf("cancel predicates for %s mismatch", status)
}
})
}
}