Files
MyGoNavi/internal/app/methods_brand_icon_test.go
Syngnat 176b100274 🐛 fix(app): 修复品牌图标与 SQLite 查询展示
- 修复 Windows、macOS 与关于页的品牌图标展示及资源裁切问题
- 补齐 SQLite 表记录数与 SELECT 查询结果渲染
- 增加品牌图标和 SQLite 回归测试
2026-07-15 22:53:47 +08:00

51 lines
1.7 KiB
Go

package app
import (
"encoding/base64"
"errors"
"testing"
)
const validBrandIconPNGBase64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScL9dgAAAABJRU5ErkJggg=="
func TestDecodeApplicationBrandIconPayloadAcceptsDataURLAndURLSafeBase64(t *testing.T) {
want, err := base64.StdEncoding.DecodeString(validBrandIconPNGBase64)
if err != nil {
t.Fatalf("decode fixture: %v", err)
}
for name, payload := range map[string]string{
"data URL": "data:image/png;base64,\n" + validBrandIconPNGBase64,
"URL-safe": base64.RawURLEncoding.EncodeToString(want),
} {
t.Run(name, func(t *testing.T) {
got, err := decodeApplicationBrandIconPayload(payload)
if err != nil {
t.Fatalf("decode payload: %v", err)
}
if string(got) != string(want) {
t.Fatal("decoded payload did not match fixture")
}
})
}
}
func TestDecodeApplicationBrandIconPayloadRejectsEmptyInvalidAndOversizedInput(t *testing.T) {
if _, err := decodeApplicationBrandIconPayload(" "); !errors.Is(err, errApplicationBrandIconPayloadEmpty) {
t.Fatalf("empty payload error = %v, want empty payload error", err)
}
invalidPNG := base64.StdEncoding.EncodeToString([]byte("not a PNG"))
if _, err := decodeApplicationBrandIconPayload(invalidPNG); !errors.Is(err, errApplicationBrandIconPayloadInvalid) {
t.Fatalf("invalid PNG error = %v, want invalid payload error", err)
}
overLimit := make([]byte, base64.StdEncoding.EncodedLen(applicationBrandIconMaxPNGBytes+1)+1)
for index := range overLimit {
overLimit[index] = 'A'
}
if _, err := decodeApplicationBrandIconPayload(string(overLimit)); !errors.Is(err, errApplicationBrandIconPayloadInvalid) {
t.Fatalf("oversized payload error = %v, want invalid payload error", err)
}
}