package queue import ( "context" "testing" "time" "github.com/backupper-unraid/backupper/internal/model" ) func TestQueueDeduplicatesJobAndRunsTask(t *testing.T) { done := make(chan struct{}) q := New(func(_ context.Context, run model.Run) model.Run { run.Status = "success"; close(done); return run }, nil) run := model.Run{ID: "one", JobID: "job", TaskType: "backup", CreatedAt: time.Now()} if err := q.Enqueue(run); err != nil { t.Fatal(err) } if err := q.Enqueue(model.Run{ID: "two", JobID: "job"}); err != ErrDuplicate { t.Fatalf("duplicate error = %v", err) } ctx, cancel := context.WithCancel(context.Background()) defer cancel() go q.Run(ctx) select { case <-done: case <-time.After(time.Second): t.Fatal("queue did not execute task") } q.Stop() }