60 lines
1.4 KiB
Go
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, "")
|
|
}
|