package services import ( "image" "image/png" "os" "path/filepath" "testing" "time" ) func TestScanner_EndToEnd_NoQRCode(t *testing.T) { dir := t.TempDir() imgPath := filepath.Join(dir, "blank.png") f, err := os.Create(imgPath) if err != nil { t.Fatal(err) } img := image.NewRGBA(image.Rect(0, 0, 120, 120)) if err := png.Encode(f, img); err != nil { t.Fatal(err) } _ = f.Close() store := NewTaskStore() scanner := NewScanner(store, 0) task := &Task{ ID: "t1", TempDir: dir, CreatedAt: time.Now(), UpdatedAt: time.Now(), Status: TaskUploaded, Files: []TaskFile{ {Index: 1, RelPath: "blank.png", AbsPath: imgPath}, }, Concurrency: 1, TimeoutS: 5, } store.Put(task) if err := scanner.Start(task); err != nil { t.Fatal(err) } deadline := time.Now().Add(5 * time.Second) for time.Now().Before(deadline) { cur, _ := store.Get("t1") if cur.Status == TaskCompleted || cur.Status == TaskCanceled || cur.Status == TaskFailed { results := cur.Results() if len(results) != 1 { t.Fatalf("expected 1 result, got %d", len(results)) } if results[1].Success { t.Fatalf("expected failure") } return } time.Sleep(50 * time.Millisecond) } t.Fatalf("timeout waiting for task completion") }