Files
NianAIGC/backend/internal/jobs/service_http_test.go

39 lines
1.7 KiB
Go

package jobs
import (
"context"
"testing"
"time"
)
func TestServiceDeletesScopedJobAndRetriesOnlyFailedImage(t *testing.T) {
now := time.Date(2026, 8, 13, 9, 0, 0, 0, time.UTC)
store := newMemoryJobStore()
store.jobs["failed"] = Job{ID: "failed", OwnerID: "user-1", Capability: "image.generate", Provider: "mock", ReqKey: "fixture", Status: StatusFailed, Prompt: "p", InputAssetIDs: []string{}, InputURLs: []string{}, OutputAssetIDs: []string{"asset-1"}, RequestPayload: []byte(`{"prompt":"p"}`), CreatedAt: now, UpdatedAt: now}
service := NewService(store, func() time.Time { return now })
retried, err := service.Retry(context.Background(), Scope{OwnerID: "user-1"}, "failed", "retry-1")
if err != nil || retried.ID != "retry-1" || retried.RetryOf != "failed" || retried.Status != StatusQueued || retried.OutputAssetIDs == nil || len(retried.OutputAssetIDs) != 0 {
t.Fatalf("Retry = %#v, %v", retried, err)
}
deleted, err := service.Delete(context.Background(), Scope{OwnerID: "user-1"}, "failed", nil)
if err != nil || deleted.ID != "failed" {
t.Fatalf("Delete = %#v, %v", deleted, err)
}
if _, ok := store.jobs["failed"]; ok {
t.Fatal("job was not deleted")
}
}
func TestServiceRejectsRetryForVideoOrActiveJob(t *testing.T) {
store := newMemoryJobStore()
store.jobs["video"] = Job{ID: "video", OwnerID: "user-1", Capability: "video.generate", Status: StatusFailed}
store.jobs["active"] = Job{ID: "active", OwnerID: "user-1", Capability: "image.generate", Status: StatusRunning}
service := NewService(store, nil)
for _, id := range []string{"video", "active"} {
if _, err := service.Retry(context.Background(), Scope{OwnerID: "user-1"}, id, "new"); err == nil {
t.Fatalf("Retry(%s) error=nil", id)
}
}
}