package user import ( "context" "testing" "time" productMemberModel "perms-system-server/internal/model/productmember" "perms-system-server/internal/svc" "perms-system-server/internal/testutil" "perms-system-server/internal/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // TC-0125: 含productCode func TestUserList_WithProductCode(t *testing.T) { ctx := context.Background() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) conn := testutil.GetTestSqlConn() username := testutil.UniqueId() userId := insertTestUser(t, ctx, username, testutil.HashPassword("pass")) productCode := testutil.UniqueId() now := time.Now().Unix() memberRes, err := svcCtx.SysProductMemberModel.Insert(ctx, &productMemberModel.SysProductMember{ ProductCode: productCode, UserId: userId, MemberType: "ADMIN", Status: 1, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) memberId, _ := memberRes.LastInsertId() t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_product_member`", memberId) testutil.CleanTable(ctx, conn, "`sys_user`", userId) }) logic := NewUserListLogic(ctx, svcCtx) resp, err := logic.UserList(&types.UserListReq{ ProductCode: productCode, Page: 1, PageSize: 100, }) require.NoError(t, err) require.NotNil(t, resp) assert.Greater(t, resp.Total, int64(0)) items := resp.List.([]types.UserItem) found := false for _, item := range items { if item.Id == userId { found = true assert.Equal(t, "ADMIN", item.MemberType) break } } assert.True(t, found, "should find the inserted user in the list") } // TC-0126: 不含productCode func TestUserList_WithoutProductCode(t *testing.T) { ctx := context.Background() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) conn := testutil.GetTestSqlConn() username := testutil.UniqueId() userId := insertTestUser(t, ctx, username, testutil.HashPassword("pass")) t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_user`", userId) }) logic := NewUserListLogic(ctx, svcCtx) resp, err := logic.UserList(&types.UserListReq{ Page: 1, PageSize: 100, }) require.NoError(t, err) require.NotNil(t, resp) items := resp.List.([]types.UserItem) for _, item := range items { if item.Id == userId { assert.Equal(t, "", item.MemberType) return } } t.Fatal("should find inserted user in the list") } // TC-0127: pageSize超过上限 func TestUserList_PageSizeOver100_Capped(t *testing.T) { ctx := context.Background() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) logic := NewUserListLogic(ctx, svcCtx) resp, err := logic.UserList(&types.UserListReq{ Page: 1, PageSize: 200, }) require.NoError(t, err) require.NotNil(t, resp) items := resp.List.([]types.UserItem) assert.LessOrEqual(t, len(items), 100) } // TC-0128: 用户不在产品中 func TestUserList_PartialNonMember(t *testing.T) { ctx := context.Background() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) conn := testutil.GetTestSqlConn() now := time.Now().Unix() u1Name := testutil.UniqueId() u1Id := insertTestUser(t, ctx, u1Name, testutil.HashPassword("pass")) u2Name := testutil.UniqueId() u2Id := insertTestUser(t, ctx, u2Name, testutil.HashPassword("pass")) productCode := testutil.UniqueId() memberRes, err := svcCtx.SysProductMemberModel.Insert(ctx, &productMemberModel.SysProductMember{ ProductCode: productCode, UserId: u1Id, MemberType: "MEMBER", Status: 1, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) memberId, _ := memberRes.LastInsertId() t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_product_member`", memberId) testutil.CleanTable(ctx, conn, "`sys_user`", u1Id, u2Id) }) logic := NewUserListLogic(ctx, svcCtx) resp, err := logic.UserList(&types.UserListReq{ ProductCode: productCode, Page: 1, PageSize: 100, }) require.NoError(t, err) require.NotNil(t, resp) items := resp.List.([]types.UserItem) for _, item := range items { if item.Id == u1Id { assert.Equal(t, "MEMBER", item.MemberType) } if item.Id == u2Id { assert.Equal(t, "", item.MemberType) } } }