67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
package handler
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestValidateImageFileRejectsOversize(t *testing.T) {
|
|
if err := validateImageFile("a.png", maxImageSize+1); err == nil {
|
|
t.Error("超过 5MB 的图片应被拒绝")
|
|
}
|
|
}
|
|
|
|
func TestValidateImageFileRejectsEmptyAndBadExt(t *testing.T) {
|
|
if err := validateImageFile("a.png", 0); err == nil {
|
|
t.Error("空文件应被拒绝")
|
|
}
|
|
if err := validateImageFile("a.txt", 1024); err == nil {
|
|
t.Error("非图片扩展名应被拒绝")
|
|
}
|
|
}
|
|
|
|
func TestValidateImageFileAcceptsAllowed(t *testing.T) {
|
|
for _, name := range []string{"a.jpg", "a.jpeg", "a.png", "a.webp"} {
|
|
if err := validateImageFile(name, 1024); err != nil {
|
|
t.Errorf("%s 应被允许: %v", name, err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestImageContentType(t *testing.T) {
|
|
cases := map[string]string{
|
|
".jpg": "image/jpeg",
|
|
".jpeg": "image/jpeg",
|
|
".png": "image/png",
|
|
".webp": "image/webp",
|
|
}
|
|
for ext, want := range cases {
|
|
got, ok := imageContentType(ext)
|
|
if !ok || got != want {
|
|
t.Errorf("imageContentType(%s) = %q, %v; want %q", ext, got, ok, want)
|
|
}
|
|
}
|
|
if _, ok := imageContentType(".gif"); ok {
|
|
t.Error(".gif 不应被支持")
|
|
}
|
|
}
|
|
|
|
func TestBuildImageKey(t *testing.T) {
|
|
key, ext, err := buildImageKey("病蚕照片.PNG")
|
|
if err != nil {
|
|
t.Fatalf("buildImageKey 失败: %v", err)
|
|
}
|
|
if !strings.HasPrefix(key, "knowledge/") {
|
|
t.Errorf("key 应以 knowledge/ 开头: %s", key)
|
|
}
|
|
if !strings.HasSuffix(key, ".png") {
|
|
t.Errorf("key 应以 .png 结尾: %s", key)
|
|
}
|
|
if ext != ".png" {
|
|
t.Errorf("ext = %s, want .png", ext)
|
|
}
|
|
if len(key) <= len("knowledge/")+8 {
|
|
t.Errorf("key 应包含日期与随机部分: %s", key)
|
|
}
|
|
}
|