62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
package service
|
|
|
|
import "testing"
|
|
|
|
func TestNormalizeBgURL(t *testing.T) {
|
|
okEmpty, ok := NormalizeBgURL(" ")
|
|
if !ok || okEmpty != "" {
|
|
t.Fatalf("empty should clear, got %q ok=%v", okEmpty, ok)
|
|
}
|
|
good := "/uploads/backgrounds/0123456789abcdef0123456789abcdef.webp"
|
|
got, ok := NormalizeBgURL(good)
|
|
if !ok || got != good {
|
|
t.Fatalf("want %s, got %q ok=%v", good, got, ok)
|
|
}
|
|
rejects := []string{
|
|
"http://evil.test/x.webp",
|
|
"/uploads/backgrounds/../avatars/x.webp",
|
|
"/uploads/images/0123456789abcdef0123456789abcdef.webp",
|
|
"/uploads/backgrounds/0123456789abcdef0123456789abcdef.gif",
|
|
`/uploads/backgrounds/0123456789abcdef0123456789abcdef.webp")`,
|
|
"/uploads/backgrounds/short.webp",
|
|
"javascript:alert(1)",
|
|
}
|
|
for _, u := range rejects {
|
|
if _, ok := NormalizeBgURL(u); ok {
|
|
t.Fatalf("should reject %q", u)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNormalizeBgMode(t *testing.T) {
|
|
m, ok := NormalizeBgMode("")
|
|
if !ok || m != DefaultBgMode {
|
|
t.Fatalf("empty mode want cover, got %q ok=%v", m, ok)
|
|
}
|
|
if _, ok := NormalizeBgMode("zoom"); ok {
|
|
t.Fatal("unknown mode should fail")
|
|
}
|
|
for _, legacy := range []string{"repeat-x", "repeat-y", "center"} {
|
|
if _, ok := NormalizeBgMode(legacy); ok {
|
|
t.Fatalf("legacy mode %s should fail", legacy)
|
|
}
|
|
}
|
|
for _, want := range []string{
|
|
BgModeCover, BgModeContain, BgModeRepeat, BgModeStretch,
|
|
} {
|
|
got, ok := NormalizeBgMode(" " + want + " ")
|
|
if !ok || got != want {
|
|
t.Fatalf("mode %s: got %q ok=%v", want, got, ok)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNormalizeBgSurface(t *testing.T) {
|
|
if s, ok := NormalizeBgSurface("SITE"); !ok || s != BgSurfaceSite {
|
|
t.Fatalf("site: %q %v", s, ok)
|
|
}
|
|
if _, ok := NormalizeBgSurface("frontend"); ok {
|
|
t.Fatal("frontend is not a surface")
|
|
}
|
|
}
|