subsyt/internal/server/queue_test.go
Viktor Varland fa0d5183cd
Some checks are pending
build / build (push) Waiting to run
feat: add ability to download a specific video
2025-09-30 11:42:12 +02:00

93 lines
1.8 KiB
Go

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)
}
}