Files
EveryPublish/server/internal/task/state_test.go
T

83 lines
1.7 KiB
Go

package task
import "testing"
func TestHappyPath(t *testing.T) {
path := []struct {
action Action
want string
}{
{ActionSubmit, PendingReview},
{ActionApprove, Queued},
{ActionDispatch, Dispatched},
{ActionStart, Running},
{ActionSuccess, Success},
}
cur := Draft
for _, step := range path {
next, ok := Next(cur, step.action)
if !ok || next != step.want {
t.Fatalf("step %s from %s: got %s ok=%v, want %s", step.action, cur, next, ok, step.want)
}
cur = next
}
}
func TestFailureRetry(t *testing.T) {
cur, ok := Next(Draft, ActionSubmit)
if !ok {
t.Fatal("submit failed")
}
cur, ok = Next(cur, ActionApprove)
if !ok {
t.Fatal("approve failed")
}
cur, ok = Next(cur, ActionDispatch)
if !ok {
t.Fatal("dispatch failed")
}
cur, ok = Next(cur, ActionStart)
if !ok {
t.Fatal("start failed")
}
cur, ok = Next(cur, ActionFail)
if !ok || cur != Failed {
t.Fatalf("fail: got %s ok=%v", cur, ok)
}
cur, ok = Next(cur, ActionRetry)
if !ok || cur != Queued {
t.Fatalf("retry: got %s ok=%v", cur, ok)
}
}
func TestSuspendResume(t *testing.T) {
cur, _ := Next(Running, ActionSuspend)
if cur != Suspended {
t.Fatalf("suspend: got %s", cur)
}
cur, ok := Next(cur, ActionResume)
if !ok || cur != Queued {
t.Fatalf("resume: got %s ok=%v", cur, ok)
}
}
func TestIllegalTransitions(t *testing.T) {
cases := []struct {
cur string
action Action
}{
{Draft, ActionApprove},
{PendingReview, ActionStart},
{Queued, ActionSuccess},
{Success, ActionRetry},
{Cancelled, ActionResubmit},
{Running, ActionApprove},
{Dispatched, ActionSuspend},
}
for _, c := range cases {
if _, ok := Next(c.cur, c.action); ok {
t.Fatalf("illegal transition should fail: %s -> %s", c.cur, c.action)
}
}
}