package logic import ( "bytes" "context" "image" "image/color" "image/png" "net/http" "net/http/httptest" "testing" infmedia "spark-server/internal/infrastructure/media" pkgmedia "spark-server/internal/pkg/media" ) func tinyPNG(t *testing.T) []byte { t.Helper() img := image.NewRGBA(image.Rect(0, 0, 8, 8)) img.Set(0, 0, color.RGBA{R: 1, G: 2, B: 3, A: 255}) var buf bytes.Buffer if err := png.Encode(&buf, img); err != nil { t.Fatal(err) } return buf.Bytes() } func TestMediaCompressorDownloadAndCompress(t *testing.T) { body := tinyPNG(t) srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { _, _ = w.Write(body) })) defer srv.Close() c := NewMediaCompressor(pkgmedia.DefaultLimits(), 80, 28, "") c.Client = srv.Client() ctx := context.Background() asset, err := c.FetchImage(ctx, srv.URL) if err != nil || asset == nil || asset.Size <= 0 { t.Fatalf("fetch %+v %v", asset, err) } av, err := c.FetchAvatar(ctx, srv.URL) if err != nil || av == nil { t.Fatalf("avatar %+v %v", av, err) } raw, err := c.CompressBytesImage(body) if err != nil || raw.MIME == "" { t.Fatalf("bytes %+v %v", raw, err) } if _, err := c.download(ctx, ""); err == nil { t.Fatal("empty url") } } func TestExtForMIME(t *testing.T) { if extForMIME("image/png") != "png" || extForMIME("image/jpeg") != "jpg" { t.Fatal("ext") } _ = infmedia.OptionsFromLimits(pkgmedia.DefaultLimits(), 80, 28, "") }