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) } }) } }