package storage import ( "testing" ) func TestIsValidTransition(t *testing.T) { tests := []struct { from, to Status want bool }{ {StatusDraft, StatusCollecting, true}, {StatusDraft, StatusCancelled, true}, {StatusDraft, StatusRunning, false}, {StatusDraft, StatusClosed, false}, {StatusRunning, StatusSuccess, true}, {StatusRunning, StatusFailed, true}, {StatusRunning, StatusTimeout, true}, {StatusSuccess, StatusClosed, true}, {StatusSuccess, StatusDraft, false}, {StatusFailed, StatusReady, true}, // retry {StatusFailed, StatusClosed, true}, {StatusFailed, StatusRunning, false}, {StatusFailed, StatusCollecting, true}, // retry: перезапуск сбора {StatusTimeout, StatusReady, true}, // retry {StatusTimeout, StatusCollecting, true}, // retry: перезапуск сбора {StatusTimeout, StatusRunning, false}, {StatusClosed, StatusDraft, false}, {StatusClosed, StatusRunning, false}, } for _, tc := range tests { got := IsValidTransition(tc.from, tc.to) if got != tc.want { t.Errorf("IsValidTransition(%q → %q) = %v, want %v", tc.from, tc.to, got, tc.want) } } } func TestIsTerminal(t *testing.T) { if !IsTerminal(StatusSuccess) { t.Error("StatusSuccess should be terminal") } if !IsTerminal(StatusCancelled) { t.Error("StatusCancelled should be terminal") } if IsTerminal(StatusDraft) { t.Error("StatusDraft should NOT be terminal") } if IsTerminal(StatusRunning) { t.Error("StatusRunning should NOT be terminal") } }