feat: 统一 Admin 主列表分页 (#64)

This commit is contained in:
chengma
2026-08-09 21:51:20 +08:00
parent 5c9ebd968c
commit 155dd3b4a2
23 changed files with 549 additions and 120 deletions
+37
View File
@@ -3,6 +3,7 @@ package service
import (
"database/sql"
"errors"
"fmt"
"path/filepath"
"sync"
"testing"
@@ -12,6 +13,42 @@ import (
"cmautobuy/admin/repository"
)
func TestListClientPageForUser_分页统计不泄露其他采购员客户端(t *testing.T) {
db := newTestDB(t)
admin, buyerA, _ := prepareClientAssignmentUsers(t, db)
now := time.Now().UTC()
for i := 0; i < 22; i++ {
clientID := fmt.Sprintf("page-client-%02d", i)
if err := RegisterClient(db, model.Client{ClientID: clientID, Name: clientID}, true); err != nil {
t.Fatal(err)
}
if i < 21 {
if _, _, err := AssignClient(db, admin, clientID, buyerA.UserID, now); err != nil {
t.Fatalf("绑定 %s 失败: %v", clientID, err)
}
}
}
buyerPage, err := ListClientPageForUser(db, buyerA, "", time.Hour, 2)
if err != nil {
t.Fatal(err)
}
if len(buyerPage.Rows) != 1 || buyerPage.Total != 21 || buyerPage.Page != 2 || buyerPage.TotalPages != 2 {
t.Fatalf("采购员分页不对: rows=%d total=%d page=%d/%d",
len(buyerPage.Rows), buyerPage.Total, buyerPage.Page, buyerPage.TotalPages)
}
if buyerPage.Online+buyerPage.Offline != 21 {
t.Fatalf("采购员统计泄露或漏算: online=%d offline=%d", buyerPage.Online, buyerPage.Offline)
}
adminPage, err := ListClientPageForUser(db, admin, "", time.Hour, 999)
if err != nil {
t.Fatal(err)
}
if adminPage.Total != 22 || adminPage.Page != 2 || len(adminPage.Rows) != 2 {
t.Fatalf("管理员分页不对: rows=%d total=%d page=%d", len(adminPage.Rows), adminPage.Total, adminPage.Page)
}
}
// newTestDB 建一个临时库,测试结束自动删。
// 用真实的 migrations,这样表结构变了测试会跟着失败。
func newTestDB(t *testing.T) *sql.DB {