feat: 友链/书库/移动端导航/排行榜等多模块功能
新增模块: - 友链(friendlink)后端处理 + 前端管理页与友链板 - 书库(library):导入、章节、封面、阅读页、横竖版自适应 AdaptiveCoverSlot - 顶栏导航(header_nav)配置与 MobileTabBar/MobileRailDrawers 移动端抽屉 - 排行榜 service 测试、站点页面测试、时间线发布(timeline_release) 其它改动: - 后端 handlers/services 全量小幅调整 - 前端组件、库函数、URL/品牌/站点 URL 工具更新 - Lightbox 图片、MdEntries 条目卡、coverColor 派生色相等前端能力
This commit is contained in:
@@ -1,6 +1,34 @@
|
||||
package service
|
||||
|
||||
import "testing"
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestOpenBrandFile(t *testing.T) {
|
||||
s, dir := newMediaLibraryService(t)
|
||||
png := "/uploads/brand/0123456789abcdef0123456789abcdef.png"
|
||||
if _, err := s.OpenBrandFile(png); !errors.Is(err, os.ErrNotExist) {
|
||||
t.Fatalf("missing file want ErrNotExist, got %v", err)
|
||||
}
|
||||
writeMediaFile(t, dir, "brand/0123456789abcdef0123456789abcdef.png", []byte("png"))
|
||||
f, err := s.OpenBrandFile(png)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
f.Close()
|
||||
for _, bad := range []string{
|
||||
"",
|
||||
"/uploads/images/0123456789abcdef0123456789abcdef.png",
|
||||
"/uploads/brand/../avatars/x.png",
|
||||
"http://evil.test/x.png",
|
||||
} {
|
||||
if _, err := s.OpenBrandFile(bad); !errors.Is(err, os.ErrNotExist) {
|
||||
t.Fatalf("should reject %q, got %v", bad, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizeBrandURL(t *testing.T) {
|
||||
png := "/uploads/brand/0123456789abcdef0123456789abcdef.png"
|
||||
|
||||
Reference in New Issue
Block a user