package service import ( "testing" "affiliate_dash/internal/model" ) func TestUserListFiltersByMerchantMembership(t *testing.T) { db := newServiceTestDB(t) merchantA := model.Merchant{Code: "user-merchant-a", Name: "商户 A", Status: model.MerchantStatusActive} merchantB := model.Merchant{Code: "user-merchant-b", Name: "商户 B", Status: model.MerchantStatusActive} if err := db.Create(&merchantA).Error; err != nil { t.Fatalf("create merchant a: %v", err) } if err := db.Create(&merchantB).Error; err != nil { t.Fatalf("create merchant b: %v", err) } userA := model.User{Username: "user-a", PasswordHash: "hash", Role: model.RoleMerchant, Status: 1} userB := model.User{Username: "user-b", PasswordHash: "hash", Role: model.RoleMerchant, Status: 1} if err := db.Create(&userA).Error; err != nil { t.Fatalf("create user a: %v", err) } if err := db.Create(&userB).Error; err != nil { t.Fatalf("create user b: %v", err) } if err := db.Create(&model.MerchantMember{MerchantID: merchantA.ID, UserID: userA.ID, Role: model.MemberRoleOperator, Status: 1}).Error; err != nil { t.Fatalf("create member a: %v", err) } if err := db.Create(&model.MerchantMember{MerchantID: merchantB.ID, UserID: userB.ID, Role: model.MemberRoleOperator, Status: 1}).Error; err != nil { t.Fatalf("create member b: %v", err) } active := 1 list, total, err := NewUserService(db, nil).List(UserListQuery{ MerchantID: merchantA.ID, Page: 1, Size: 20, Role: model.RoleMerchant, Status: &active, }) if err != nil { t.Fatalf("list users: %v", err) } if total != 1 || len(list) != 1 || list[0].Username != "user-a" { t.Fatalf("expected only merchant A user, total=%d list=%+v", total, list) } }