39 lines
1.7 KiB
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)
|
|
}
|
|
}
|
|
}
|