fix(05): WR-02 delete thumb blob after a failed encode

This commit is contained in:
Jakub Zych
2026-09-19 15:31:37 +02:00
parent c211822448
commit e54f9d7f10
2 changed files with 49 additions and 5 deletions

View File

@@ -2,6 +2,7 @@ package attach
import (
"bytes"
"errors"
"image"
"image/color"
"image/jpeg"
@@ -129,6 +130,46 @@ func TestFileThumbResizesOnce(t *testing.T) {
}
}
func TestFileThumbEncodeFailureDoesNotCache(t *testing.T) {
ctx := t.Context()
bucket := memblob.OpenBucket(nil)
t.Cleanup(func() { _ = bucket.Close() })
f := &File{ID: 7, DiskName: "abc123xyz.jpg"}
if err := bucket.WriteAll(ctx, BlobKey(f.DiskName), testJPEG(t), &blob.WriterOptions{ContentType: "image/jpeg"}); err != nil {
t.Fatal(err)
}
orig := encodeImage
encodeImage = func(w io.Writer, img image.Image, ext string) error {
_, _ = w.Write([]byte("partial"))
return errors.New("encode boom")
}
t.Cleanup(func() { encodeImage = orig })
if _, err := f.Thumb(ctx, bucket, 200, 200, "crop"); err == nil {
t.Fatal("encode failure must surface")
}
thumbKey := PartitionDirectory(f.DiskName) + ThumbFilename(f.ID, 200, 200, 0, 0, "crop", "jpg")
exists, err := bucket.Exists(ctx, thumbKey)
if err != nil {
t.Fatal(err)
}
if exists {
t.Fatal("failed encode must not leave a cached thumb blob")
}
encodeImage = orig
url, err := f.Thumb(ctx, bucket, 200, 200, "crop")
if err != nil {
t.Fatalf("retry after failed encode: %v", err)
}
want := "/storage/uploads/abc/123/xyz/thumb_7_200_200_0_0_crop.jpg"
if url != want {
t.Fatalf("retry url = %q, want %q", url, want)
}
}
func testJPEG(t *testing.T) []byte {
t.Helper()
img := image.NewRGBA(image.Rect(0, 0, 8, 8))