spark-server/internal/module/squarebot/logic/media_test.go
2026-09-29 10:22:28 +08:00

60 lines
1.4 KiB
Go

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