feat: 站点媒体库与移动端底部导航,服务测试补强
- 新增媒体库:media_library/media_thumbs 服务(WebP 缩略图)、管理端 media 页面 - 移动端底部导航 MobileTabBar 替换 MobilePostBar - 旧数据导入增强与测试、路由与登录会话/板块侧边栏测试补强 - site-doc 组件精简(移除 Breadcrumb),文档新增迁移公告说明
This commit is contained in:
69
backend/service/board_sidebar_test.go
Normal file
69
backend/service/board_sidebar_test.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/freefire/jiang13-bbs/model"
|
||||
"github.com/glebarez/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// 板块右栏聚合:管理员应携带等级(AfterFind 按累计积分计算)与颁发的徽章
|
||||
func TestBoardSidebarModeratorsCarryLevelAndBadges(t *testing.T) {
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatalf("open sqlite: %v", err)
|
||||
}
|
||||
if err := db.AutoMigrate(&model.User{}, &model.Board{}, &model.UserBoard{},
|
||||
&model.Post{}, &model.Comment{}, &model.Badge{}, &model.UserBadge{}); err != nil {
|
||||
t.Fatalf("migrate: %v", err)
|
||||
}
|
||||
|
||||
board := model.Board{Name: "综合讨论"}
|
||||
if err := db.Create(&board).Error; err != nil {
|
||||
t.Fatalf("seed board: %v", err)
|
||||
}
|
||||
// 高积分管理员 + 低积分管理员 + 普通用户(不入列)
|
||||
modHigh := model.User{Username: "mod_high", Password: "x", Role: model.RoleBoardAdmin, TotalPoints: 10000}
|
||||
modLow := model.User{Username: "mod_low", Password: "x", Role: model.RoleBoardAdmin}
|
||||
plain := model.User{Username: "plain", Password: "x"}
|
||||
for _, u := range []*model.User{&modHigh, &modLow, &plain} {
|
||||
if err := db.Create(u).Error; err != nil {
|
||||
t.Fatalf("seed user: %v", err)
|
||||
}
|
||||
}
|
||||
for _, uid := range []uint{modHigh.ID, modLow.ID, plain.ID} {
|
||||
if err := db.Create(&model.UserBoard{UserID: uid, BoardID: board.ID}).Error; err != nil {
|
||||
t.Fatalf("seed user_board: %v", err)
|
||||
}
|
||||
}
|
||||
badge := model.Badge{Name: "骨灰玩家", Icon: "medal", Color: "gold"}
|
||||
if err := db.Create(&badge).Error; err != nil {
|
||||
t.Fatalf("seed badge: %v", err)
|
||||
}
|
||||
if err := db.Create(&model.UserBadge{BadgeID: badge.ID, UserID: modHigh.ID, AwardedBy: 1}).Error; err != nil {
|
||||
t.Fatalf("seed user_badge: %v", err)
|
||||
}
|
||||
|
||||
s := NewBoardService(db)
|
||||
data, err := s.Sidebar(board.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("Sidebar: %v", err)
|
||||
}
|
||||
if len(data.Moderators) != 2 {
|
||||
t.Fatalf("应只含 2 名 board_admin,got %d", len(data.Moderators))
|
||||
}
|
||||
first := data.Moderators[0]
|
||||
if first.Username != "mod_high" {
|
||||
t.Fatalf("排序错位: %+v", first)
|
||||
}
|
||||
if first.Level <= 1 {
|
||||
t.Fatalf("高积分管理员等级应 >1,got %d", first.Level)
|
||||
}
|
||||
if len(first.Badges) != 1 || first.Badges[0].Badge.Name != "骨灰玩家" {
|
||||
t.Fatalf("徽章未随行加载: %+v", first.Badges)
|
||||
}
|
||||
if data.Moderators[1].Level != 1 || len(data.Moderators[1].Badges) != 0 {
|
||||
t.Fatalf("低积分管理员应为 Lv.1 无徽章: %+v", data.Moderators[1])
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user