thread-master/apps/backend/internal/module/scout/usecase/run_progress_test.go

46 lines
1.4 KiB
Go
Raw Normal View History

2026-08-13 02:22:24 +00:00
package usecase
import (
"context"
"errors"
"testing"
"apps/backend/internal/module/scout/domain"
"apps/backend/internal/module/scout/repository"
)
func TestStartRunGuardsQueuedRunningAndTerminal(t *testing.T) {
ctx := context.Background()
store := repository.NewMemory()
run := domain.NewRun("progress", "job-progress", 7, domain.RunBrief{Intent: "市集"}, 1)
if err := store.CreateRun(ctx, run); err != nil {
t.Fatal(err)
}
svc := New(store)
started, err := svc.StartRun(ctx, 7, run.ID, run.JobID)
if err != nil || started.Status != domain.RunRunning {
t.Fatalf("start=%+v err=%v", started, err)
}
retry, err := svc.StartRun(ctx, 7, run.ID, run.JobID)
if err != nil || retry.Status != domain.RunRunning {
t.Fatalf("idempotent retry=%+v err=%v", retry, err)
}
if err := svc.FailRun(ctx, 7, run.ID, "timeout"); err != nil {
t.Fatal(err)
}
if _, err := svc.StartRun(ctx, 7, run.ID, run.JobID); !errors.Is(err, domain.ErrIllegalRunStatus) {
t.Fatalf("terminal restart error=%v", err)
}
}
func TestStartRunRejectsWrongJobBinding(t *testing.T) {
store := repository.NewMemory()
run := domain.NewRun("wrong-job", "job-a", 7, domain.RunBrief{Intent: "市集"}, 1)
if err := store.CreateRun(context.Background(), run); err != nil {
t.Fatal(err)
}
if _, err := New(store).StartRun(context.Background(), 7, run.ID, "job-b"); !errors.Is(err, domain.ErrIllegalRunStatus) {
t.Fatalf("wrong binding error=%v", err)
}
}