spark-server/internal/infrastructure/media/image_test.go
DESKTOP-L8OUL9F\gfl0034 715ace7ac6 feat(square): 广场 Bot/RSS 发布与媒体校验
支持广场机器人发帖与媒体类型检查,并补充相关迁移与 i18n。
2026-09-24 23:07:06 +08:00

72 lines
1.8 KiB
Go

package media
import (
"image"
"image/color"
"testing"
pkgmedia "spark-server/internal/pkg/media"
)
func TestCompressImageDownscales(t *testing.T) {
img := image.NewRGBA(image.Rect(0, 0, 2000, 1000))
for y := 0; y < 1000; y++ {
for x := 0; x < 2000; x++ {
img.Set(x, y, color.RGBA{R: uint8(x % 255), G: uint8(y % 255), B: 40, A: 255})
}
}
src, err := EncodePNG(img)
if err != nil {
t.Fatal(err)
}
res, err := CompressImage(src, Options{Limits: pkgmedia.DefaultLimits(), JPEGQuality: 80})
if err != nil {
t.Fatal(err)
}
if pkgmedia.LongestEdge(res.Width, res.Height) > pkgmedia.DefaultImageMaxEdge {
t.Fatalf("edge %dx%d still over 1080", res.Width, res.Height)
}
if res.MIME != "image/jpeg" {
t.Fatalf("mime %s", res.MIME)
}
small := image.NewRGBA(image.Rect(0, 0, 100, 80))
smallSrc, err := EncodePNG(small)
if err != nil {
t.Fatal(err)
}
keep, err := CompressImage(smallSrc, Options{Limits: pkgmedia.DefaultLimits()})
if err != nil {
t.Fatal(err)
}
if keep.Width != 100 || keep.Height != 80 {
t.Fatalf("should keep small image dims, got %dx%d", keep.Width, keep.Height)
}
}
func TestCompressAvatar(t *testing.T) {
img := image.NewRGBA(image.Rect(0, 0, 500, 500))
src, err := EncodePNG(img)
if err != nil {
t.Fatal(err)
}
res, err := CompressAvatar(src, Options{Limits: pkgmedia.DefaultLimits()})
if err != nil {
t.Fatal(err)
}
if pkgmedia.LongestEdge(res.Width, res.Height) > pkgmedia.DefaultAvatarMaxEdge {
t.Fatalf("avatar %dx%d", res.Width, res.Height)
}
}
func TestPrepareBotImage(t *testing.T) {
img := image.NewRGBA(image.Rect(0, 0, 1600, 900))
src, err := EncodePNG(img)
if err != nil {
t.Fatal(err)
}
a, err := PrepareBotImage(src, Options{Limits: pkgmedia.DefaultLimits()})
if err != nil || a == nil || a.Size <= 0 {
t.Fatalf("%+v %v", a, err)
}
}