package member import ( "database/sql" "testing" "time" productModel "perms-system-server/internal/model/product" memberModel "perms-system-server/internal/model/productmember" userModel "perms-system-server/internal/model/user" "perms-system-server/internal/svc" "perms-system-server/internal/testutil" "perms-system-server/internal/testutil/ctxhelper" "perms-system-server/internal/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // TC-0187: 正常查询(批量查用户) func TestMemberList_Normal(t *testing.T) { ctx := ctxhelper.SuperAdminCtx() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) conn := testutil.GetTestSqlConn() now := time.Now().Unix() uid := testutil.UniqueId() pRes, err := svcCtx.SysProductModel.Insert(ctx, &productModel.SysProduct{ Code: uid, Name: "test_prod", AppKey: uid, AppSecret: "s1", Status: 1, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) pId, _ := pRes.LastInsertId() uRes, err := svcCtx.SysUserModel.Insert(ctx, &userModel.SysUser{ Username: uid, Password: testutil.HashPassword("pass"), Nickname: "TestNick", Avatar: sql.NullString{}, IsSuperAdmin: 2, MustChangePassword: 2, Status: 1, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) uId, _ := uRes.LastInsertId() mRes, err := svcCtx.SysProductMemberModel.Insert(ctx, &memberModel.SysProductMember{ ProductCode: uid, UserId: uId, MemberType: "MEMBER", Status: 1, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) mId, _ := mRes.LastInsertId() t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_product_member`", mId) testutil.CleanTable(ctx, conn, "`sys_user`", uId) testutil.CleanTable(ctx, conn, "`sys_product`", pId) }) logic := NewMemberListLogic(ctx, svcCtx) resp, err := logic.MemberList(&types.MemberListReq{ ProductCode: uid, Page: 1, PageSize: 10, }) require.NoError(t, err) assert.Equal(t, int64(1), resp.Total) items, ok := resp.List.([]types.MemberItem) require.True(t, ok) require.Len(t, items, 1) assert.Equal(t, uid, items[0].Username) assert.Equal(t, "TestNick", items[0].Nickname) assert.Equal(t, "MEMBER", items[0].MemberType) assert.Equal(t, uId, items[0].UserId) } // TC-0190: 空成员列表 func TestMemberList_Empty(t *testing.T) { ctx := ctxhelper.SuperAdminCtx() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) uid := testutil.UniqueId() logic := NewMemberListLogic(ctx, svcCtx) resp, err := logic.MemberList(&types.MemberListReq{ ProductCode: uid, Page: 1, PageSize: 10, }) require.NoError(t, err) assert.Equal(t, int64(0), resp.Total) } // TC-0189: pageSize超过上限 func TestMemberList_PageSizeLimit(t *testing.T) { ctx := ctxhelper.SuperAdminCtx() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) uid := testutil.UniqueId() logic := NewMemberListLogic(ctx, svcCtx) resp, err := logic.MemberList(&types.MemberListReq{ ProductCode: uid, Page: 1, PageSize: 200, }) require.NoError(t, err) assert.Equal(t, int64(0), resp.Total) } // TC-0188: 成员用户已删除 func TestMemberList_DeletedUserEmptyInfo(t *testing.T) { ctx := ctxhelper.SuperAdminCtx() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) conn := testutil.GetTestSqlConn() now := time.Now().Unix() uid := testutil.UniqueId() pRes, err := svcCtx.SysProductModel.Insert(ctx, &productModel.SysProduct{ Code: uid, Name: "test_prod", AppKey: uid, AppSecret: "s1", Status: 1, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) pId, _ := pRes.LastInsertId() nonExistUserId := int64(999999888) mRes, err := svcCtx.SysProductMemberModel.Insert(ctx, &memberModel.SysProductMember{ ProductCode: uid, UserId: nonExistUserId, MemberType: "MEMBER", Status: 1, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) mId, _ := mRes.LastInsertId() t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_product_member`", mId) testutil.CleanTable(ctx, conn, "`sys_product`", pId) }) logic := NewMemberListLogic(ctx, svcCtx) resp, err := logic.MemberList(&types.MemberListReq{ ProductCode: uid, Page: 1, PageSize: 10, }) require.NoError(t, err) require.NotNil(t, resp) assert.Equal(t, int64(1), resp.Total) items, ok := resp.List.([]types.MemberItem) require.True(t, ok) require.Len(t, items, 1) assert.Equal(t, "", items[0].Username) assert.Equal(t, "", items[0].Nickname) }