feat: 统一 Admin 主列表分页 (#64)
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user