package server import ( "context" "os" "path/filepath" "testing" "time" ) func TestQueueEnqueueNextMarkDone(t *testing.T) { q, err := NewQueue("") if err != nil { t.Fatalf("new queue: %v", err) } req := VideoRequest{URL: "https://example.com/watch?v=1", OutDir: "/tmp/videos", MetadataOnly: false} id, err := q.Enqueue(req) if err != nil { t.Fatalf("enqueue: %v", err) } ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() item, err := q.Next(ctx) if err != nil { t.Fatalf("next: %v", err) } if item.ID != id { t.Fatalf("expected id %s, got %s", id, item.ID) } if item.Request.URL != req.URL { t.Fatalf("unexpected url: %s", item.Request.URL) } if err := q.MarkDone(item.ID); err != nil { t.Fatalf("mark done: %v", err) } select { case <-time.After(20 * time.Millisecond): default: } } func TestQueuePersistence(t *testing.T) { tmpDir := t.TempDir() queuePath := filepath.Join(tmpDir, "queue.json") q, err := NewQueue(queuePath) if err != nil { t.Fatalf("new queue: %v", err) } req := VideoRequest{URL: "https://example.com/watch?v=2", OutDir: "/data", MetadataOnly: true} id, err := q.Enqueue(req) if err != nil { t.Fatalf("enqueue: %v", err) } if _, err := os.Stat(queuePath); err != nil { t.Fatalf("queue file missing: %v", err) } q2, err := NewQueue(queuePath) if err != nil { t.Fatalf("reload queue: %v", err) } ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() item, err := q2.Next(ctx) if err != nil { t.Fatalf("next: %v", err) } if item.ID != id { t.Fatalf("expected persisted id %s, got %s", id, item.ID) } if err := q2.MarkDone(item.ID); err != nil { t.Fatalf("mark done: %v", err) } if _, err := os.Stat(queuePath); !os.IsNotExist(err) { t.Fatalf("expected queue file removed after draining, got %v", err) } }