| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- 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-0222: 正常查询(批量查用户)
- 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-0225: 空成员列表
- 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-0224: 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-0223: 成员用户已删除
- 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)
- }
- // TC-1305: 非超管不传productCode时从JWT获取
- func TestMemberList_NonSuperAdminUsesJWTProductCode(t *testing.T) {
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- conn := testutil.GetTestSqlConn()
- now := time.Now().Unix()
- pc := testutil.UniqueId()
- uRes, err := svcCtx.SysUserModel.Insert(ctxhelper.SuperAdminCtx(), &userModel.SysUser{
- Username: testutil.UniqueId(), Password: testutil.HashPassword("pass"), Nickname: "Nick",
- 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(ctxhelper.SuperAdminCtx(), &memberModel.SysProductMember{
- ProductCode: pc, UserId: uId, MemberType: "MEMBER",
- Status: 1, CreateTime: now, UpdateTime: now,
- })
- require.NoError(t, err)
- mId, _ := mRes.LastInsertId()
- t.Cleanup(func() {
- testutil.CleanTable(ctxhelper.SuperAdminCtx(), conn, "`sys_product_member`", mId)
- testutil.CleanTable(ctxhelper.SuperAdminCtx(), conn, "`sys_user`", uId)
- })
- ctx := ctxhelper.AdminCtx(pc)
- logic := NewMemberListLogic(ctx, svcCtx)
- resp, err := logic.MemberList(&types.MemberListReq{
- Page: 1,
- PageSize: 10,
- })
- require.NoError(t, err)
- assert.Equal(t, int64(1), resp.Total)
- }
- // TC-1306: 非超管传了其他产品code时被忽略,仍返回JWT产品数据
- func TestMemberList_NonSuperAdminIgnoresReqProductCode(t *testing.T) {
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- conn := testutil.GetTestSqlConn()
- now := time.Now().Unix()
- pc := testutil.UniqueId()
- uRes, err := svcCtx.SysUserModel.Insert(ctxhelper.SuperAdminCtx(), &userModel.SysUser{
- Username: testutil.UniqueId(), Password: testutil.HashPassword("pass"), Nickname: "Nick",
- 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(ctxhelper.SuperAdminCtx(), &memberModel.SysProductMember{
- ProductCode: pc, UserId: uId, MemberType: "MEMBER",
- Status: 1, CreateTime: now, UpdateTime: now,
- })
- require.NoError(t, err)
- mId, _ := mRes.LastInsertId()
- t.Cleanup(func() {
- testutil.CleanTable(ctxhelper.SuperAdminCtx(), conn, "`sys_product_member`", mId)
- testutil.CleanTable(ctxhelper.SuperAdminCtx(), conn, "`sys_user`", uId)
- })
- ctx := ctxhelper.AdminCtx(pc)
- logic := NewMemberListLogic(ctx, svcCtx)
- resp, err := logic.MemberList(&types.MemberListReq{
- ProductCode: "other_product_code",
- Page: 1,
- PageSize: 10,
- })
- require.NoError(t, err)
- assert.Equal(t, int64(1), resp.Total)
- }
- // TC-1307: 超管不传productCode时返回全量数据
- func TestMemberList_SuperAdminNoProductCodeReturnsAll(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- conn := testutil.GetTestSqlConn()
- now := time.Now().Unix()
- pc1 := testutil.UniqueId()
- pc2 := testutil.UniqueId()
- uRes, err := svcCtx.SysUserModel.Insert(ctx, &userModel.SysUser{
- Username: testutil.UniqueId(), Password: testutil.HashPassword("pass"), Nickname: "Nick",
- Avatar: sql.NullString{}, IsSuperAdmin: 2, MustChangePassword: 2,
- Status: 1, CreateTime: now, UpdateTime: now,
- })
- require.NoError(t, err)
- uId, _ := uRes.LastInsertId()
- m1Res, err := svcCtx.SysProductMemberModel.Insert(ctx, &memberModel.SysProductMember{
- ProductCode: pc1, UserId: uId, MemberType: "MEMBER",
- Status: 1, CreateTime: now, UpdateTime: now,
- })
- require.NoError(t, err)
- m1Id, _ := m1Res.LastInsertId()
- m2Res, err := svcCtx.SysProductMemberModel.Insert(ctx, &memberModel.SysProductMember{
- ProductCode: pc2, UserId: uId, MemberType: "ADMIN",
- Status: 1, CreateTime: now, UpdateTime: now,
- })
- require.NoError(t, err)
- m2Id, _ := m2Res.LastInsertId()
- t.Cleanup(func() {
- testutil.CleanTable(ctx, conn, "`sys_product_member`", m1Id, m2Id)
- testutil.CleanTable(ctx, conn, "`sys_user`", uId)
- })
- logic := NewMemberListLogic(ctx, svcCtx)
- resp, err := logic.MemberList(&types.MemberListReq{
- Page: 1,
- PageSize: 10000,
- })
- require.NoError(t, err)
- assert.GreaterOrEqual(t, resp.Total, int64(2))
- }
|