81 lines
2.2 KiB
Go
81 lines
2.2 KiB
Go
package services
|
|
|
|
import (
|
|
"errors"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"cmbone/internal/models"
|
|
)
|
|
|
|
func TestMigrateCreatesImageTaskTables(t *testing.T) {
|
|
store := newTestStore(t)
|
|
|
|
for _, table := range []string{"image_tasks", "image_task_results"} {
|
|
var name string
|
|
if err := store.DB.QueryRow("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?", table).Scan(&name); err != nil {
|
|
t.Fatalf("query table %s: %v", table, err)
|
|
}
|
|
if name != table {
|
|
t.Fatalf("table = %q, want %q", name, table)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestImageOptimizationServiceCreateTask(t *testing.T) {
|
|
store := newTestStore(t)
|
|
service := NewImageOptimizationService(store)
|
|
sourcePath := filepath.Join(t.TempDir(), "sku-main.jpg")
|
|
|
|
detail, err := service.CreateTask(models.ImageTaskInput{
|
|
SourcePath: sourcePath,
|
|
Operation: "enhance",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("create task: %v", err)
|
|
}
|
|
|
|
if detail.Task.ID == 0 {
|
|
t.Fatal("task id is empty")
|
|
}
|
|
if detail.Task.Status != imageTaskStatusSucceeded {
|
|
t.Fatalf("status = %q, want %q", detail.Task.Status, imageTaskStatusSucceeded)
|
|
}
|
|
if detail.Task.Operation != "enhance" {
|
|
t.Fatalf("operation = %q, want enhance", detail.Task.Operation)
|
|
}
|
|
if detail.Result.TaskID != detail.Task.ID {
|
|
t.Fatalf("result task id = %d, want %d", detail.Result.TaskID, detail.Task.ID)
|
|
}
|
|
if !strings.Contains(detail.Result.OutputPath, "sku-main_enhance_optimized.jpg") {
|
|
t.Fatalf("output path = %q, want simulated optimized path", detail.Result.OutputPath)
|
|
}
|
|
|
|
got, err := service.GetTask(detail.Task.ID)
|
|
if err != nil {
|
|
t.Fatalf("get task: %v", err)
|
|
}
|
|
if got.Task.ID != detail.Task.ID {
|
|
t.Fatalf("got task id = %d, want %d", got.Task.ID, detail.Task.ID)
|
|
}
|
|
|
|
tasks, err := service.ListTasks(models.ImageTaskFilter{Status: imageTaskStatusSucceeded})
|
|
if err != nil {
|
|
t.Fatalf("list tasks: %v", err)
|
|
}
|
|
if len(tasks) != 1 {
|
|
t.Fatalf("tasks len = %d, want 1", len(tasks))
|
|
}
|
|
}
|
|
|
|
func TestImageOptimizationServiceCreateTaskRequiresSourcePath(t *testing.T) {
|
|
store := newTestStore(t)
|
|
service := NewImageOptimizationService(store)
|
|
|
|
_, err := service.CreateTask(models.ImageTaskInput{})
|
|
if !errors.Is(err, errImageTaskSourcePathRequired) {
|
|
t.Fatalf("create task error = %v, want source path required", err)
|
|
}
|
|
}
|