46 lines
1.3 KiB
Go
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)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|