userListLogic_test.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package user
  2. import (
  3. "testing"
  4. "time"
  5. productMemberModel "perms-system-server/internal/model/productmember"
  6. "perms-system-server/internal/svc"
  7. "perms-system-server/internal/testutil"
  8. "perms-system-server/internal/testutil/ctxhelper"
  9. "perms-system-server/internal/types"
  10. "github.com/stretchr/testify/assert"
  11. "github.com/stretchr/testify/require"
  12. )
  13. // TC-0149: 含productCode
  14. func TestUserList_WithProductCode(t *testing.T) {
  15. ctx := ctxhelper.SuperAdminCtx()
  16. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  17. conn := testutil.GetTestSqlConn()
  18. username := testutil.UniqueId()
  19. userId := insertTestUser(t, ctx, username, testutil.HashPassword("pass"))
  20. productCode := testutil.UniqueId()
  21. now := time.Now().Unix()
  22. memberRes, err := svcCtx.SysProductMemberModel.Insert(ctx, &productMemberModel.SysProductMember{
  23. ProductCode: productCode,
  24. UserId: userId,
  25. MemberType: "ADMIN",
  26. Status: 1,
  27. CreateTime: now,
  28. UpdateTime: now,
  29. })
  30. require.NoError(t, err)
  31. memberId, _ := memberRes.LastInsertId()
  32. t.Cleanup(func() {
  33. testutil.CleanTable(ctx, conn, "`sys_product_member`", memberId)
  34. testutil.CleanTable(ctx, conn, "`sys_user`", userId)
  35. })
  36. logic := NewUserListLogic(ctx, svcCtx)
  37. resp, err := logic.UserList(&types.UserListReq{
  38. ProductCode: productCode,
  39. Page: 1,
  40. PageSize: 100,
  41. })
  42. require.NoError(t, err)
  43. require.NotNil(t, resp)
  44. assert.Greater(t, resp.Total, int64(0))
  45. items := resp.List.([]types.UserItem)
  46. found := false
  47. for _, item := range items {
  48. if item.Id == userId {
  49. found = true
  50. assert.Equal(t, "ADMIN", item.MemberType)
  51. break
  52. }
  53. }
  54. assert.True(t, found, "should find the inserted user in the list")
  55. }
  56. // TC-0150: 不含productCode
  57. func TestUserList_WithoutProductCode(t *testing.T) {
  58. ctx := ctxhelper.SuperAdminCtx()
  59. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  60. conn := testutil.GetTestSqlConn()
  61. username := testutil.UniqueId()
  62. userId := insertTestUser(t, ctx, username, testutil.HashPassword("pass"))
  63. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_user`", userId) })
  64. logic := NewUserListLogic(ctx, svcCtx)
  65. resp, err := logic.UserList(&types.UserListReq{
  66. Page: 1,
  67. PageSize: 100,
  68. })
  69. require.NoError(t, err)
  70. require.NotNil(t, resp)
  71. items := resp.List.([]types.UserItem)
  72. for _, item := range items {
  73. if item.Id == userId {
  74. assert.Equal(t, "", item.MemberType)
  75. return
  76. }
  77. }
  78. t.Fatal("should find inserted user in the list")
  79. }
  80. // TC-0151: pageSize超过上限
  81. func TestUserList_PageSizeOver100_Capped(t *testing.T) {
  82. ctx := ctxhelper.SuperAdminCtx()
  83. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  84. logic := NewUserListLogic(ctx, svcCtx)
  85. resp, err := logic.UserList(&types.UserListReq{
  86. Page: 1,
  87. PageSize: 200,
  88. })
  89. require.NoError(t, err)
  90. require.NotNil(t, resp)
  91. items := resp.List.([]types.UserItem)
  92. assert.LessOrEqual(t, len(items), 100)
  93. }
  94. // TC-0152: 用户不在产品中
  95. func TestUserList_PartialNonMember(t *testing.T) {
  96. ctx := ctxhelper.SuperAdminCtx()
  97. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  98. conn := testutil.GetTestSqlConn()
  99. now := time.Now().Unix()
  100. u1Name := testutil.UniqueId()
  101. u1Id := insertTestUser(t, ctx, u1Name, testutil.HashPassword("pass"))
  102. u2Name := testutil.UniqueId()
  103. u2Id := insertTestUser(t, ctx, u2Name, testutil.HashPassword("pass"))
  104. productCode := testutil.UniqueId()
  105. memberRes, err := svcCtx.SysProductMemberModel.Insert(ctx, &productMemberModel.SysProductMember{
  106. ProductCode: productCode,
  107. UserId: u1Id,
  108. MemberType: "MEMBER",
  109. Status: 1,
  110. CreateTime: now,
  111. UpdateTime: now,
  112. })
  113. require.NoError(t, err)
  114. memberId, _ := memberRes.LastInsertId()
  115. t.Cleanup(func() {
  116. testutil.CleanTable(ctx, conn, "`sys_product_member`", memberId)
  117. testutil.CleanTable(ctx, conn, "`sys_user`", u1Id, u2Id)
  118. })
  119. logic := NewUserListLogic(ctx, svcCtx)
  120. resp, err := logic.UserList(&types.UserListReq{
  121. ProductCode: productCode,
  122. Page: 1,
  123. PageSize: 100,
  124. })
  125. require.NoError(t, err)
  126. require.NotNil(t, resp)
  127. items := resp.List.([]types.UserItem)
  128. for _, item := range items {
  129. if item.Id == u1Id {
  130. assert.Equal(t, "MEMBER", item.MemberType)
  131. }
  132. if item.Id == u2Id {
  133. assert.Equal(t, "", item.MemberType)
  134. }
  135. }
  136. }