fix: 修复缺少渠道表时商务列表失败并补充接口实测
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/glebarez/sqlite"
|
||||
"gorm.io/gorm"
|
||||
businessbiz "kra/internal/biz/business"
|
||||
"kra/internal/biz/system"
|
||||
businessdata "kra/internal/data/business"
|
||||
systemdata "kra/internal/data/system"
|
||||
"kra/internal/server/handler"
|
||||
"kra/internal/server/router"
|
||||
businessservice "kra/internal/service/business"
|
||||
)
|
||||
|
||||
type businessHTTPData struct{ db *gorm.DB }
|
||||
|
||||
func (d businessHTTPData) DB() *gorm.DB { return d.db }
|
||||
|
||||
func TestBusinessHTTPListWithSystemOnlyAndCompleteDatabase(t *testing.T) {
|
||||
db, err := gorm.Open(sqlite.Open(filepath.Join(t.TempDir(), "http.db")), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Cleanup(func() { _ = sqlDB.Close() })
|
||||
for _, step := range append(systemdata.Migrations(), businessdata.Migrations()...) {
|
||||
if err := step.Migrate(db); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
for _, statement := range []string{
|
||||
"INSERT INTO sys_users(id,uuid,username,authority_id,level,id_path) VALUES (1,'admin','admin',888,0,'0'),(2,'child','child',901,1,'0'),(3,'empty','empty',901,1,'0')",
|
||||
"INSERT INTO sys_user_bind_platform(user_id,source_db,platform_busier_id,status) VALUES (2,'lx',9,'0')",
|
||||
} {
|
||||
if err := db.Exec(statement).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
provider := businessHTTPData{db}
|
||||
accounts := businessservice.NewAccountService(businessbiz.NewAccountUsecase(businessdata.NewAccountRepo(provider)))
|
||||
prefs := businessservice.NewUserPreferenceService(businessbiz.NewUserPreferenceUsecase(businessdata.NewUserPreferenceRepo(provider)))
|
||||
engine := gin.New()
|
||||
// 此契约测试固定已认证身份;真实登录另通过运行实例验证。
|
||||
engine.Use(func(c *gin.Context) {
|
||||
c.Request = c.Request.WithContext(system.NewActorContext(c.Request.Context(), system.Actor{UserID: 1, AuthorityID: 888}))
|
||||
c.Next()
|
||||
})
|
||||
router.RegisterBusiness(engine.Group(""), handler.NewBusiness(prefs, accounts))
|
||||
server := httptest.NewServer(engine)
|
||||
defer server.Close()
|
||||
requestList := func() map[string]any {
|
||||
t.Helper()
|
||||
req, _ := http.NewRequestWithContext(context.Background(), http.MethodGet, server.URL+"/sw/business/list?pageNum=1&pageSize=10", nil)
|
||||
response, err := server.Client().Do(req)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer response.Body.Close()
|
||||
var body map[string]any
|
||||
if err := json.NewDecoder(response.Body).Decode(&body); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if response.StatusCode != 200 || body["code"] != float64(0) {
|
||||
t.Fatalf("真实 HTTP 列表请求失败: %+v", body)
|
||||
}
|
||||
return body["data"].(map[string]any)
|
||||
}
|
||||
data := requestList()
|
||||
rows := data["rows"].([]any)
|
||||
if data["total"] != float64(3) || len(rows) != 3 {
|
||||
t.Fatalf("系统数据未完整返回: %+v", data)
|
||||
}
|
||||
child := rows[1].(map[string]any)
|
||||
if child["promoteCount"] != nil || child["bindCount"] != float64(1) {
|
||||
t.Fatalf("未接入统计不能伪装为零: %+v", child)
|
||||
}
|
||||
if rows[2].(map[string]any)["promoteCount"] != float64(0) {
|
||||
t.Fatal("无绑定账号的直属渠道应明确为零")
|
||||
}
|
||||
if err := db.Exec("CREATE TABLE tab_promote(id INTEGER,source_db TEXT,busier_id INTEGER,promote_level INTEGER)").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.Exec("INSERT INTO tab_promote VALUES(1,'lx',9,1),(2,'lx',9,2),(1,'hw',9,1)").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
data = requestList()
|
||||
child = data["rows"].([]any)[1].(map[string]any)
|
||||
if child["promoteCount"] != float64(1) {
|
||||
t.Fatalf("完整数据应恢复真实且按平台隔离的渠道数: %+v", child)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user