updateUserStatusLogic_test.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package user
  2. import (
  3. "context"
  4. "database/sql"
  5. "errors"
  6. "testing"
  7. "time"
  8. "perms-system-server/internal/loaders"
  9. "perms-system-server/internal/middleware"
  10. userModel "perms-system-server/internal/model/user"
  11. "perms-system-server/internal/response"
  12. "perms-system-server/internal/svc"
  13. "perms-system-server/internal/testutil"
  14. "perms-system-server/internal/testutil/ctxhelper"
  15. "perms-system-server/internal/types"
  16. "github.com/stretchr/testify/assert"
  17. "github.com/stretchr/testify/require"
  18. )
  19. func ctxWithUserId(userId int64) context.Context {
  20. return middleware.WithUserDetails(context.Background(), &loaders.UserDetails{UserId: userId})
  21. }
  22. // TC-0141: 正常冻结
  23. func TestUpdateUserStatus_Freeze(t *testing.T) {
  24. ctx := context.Background()
  25. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  26. conn := testutil.GetTestSqlConn()
  27. username := testutil.UniqueId()
  28. userId := insertTestUser(t, ctx, username, testutil.HashPassword("pass"))
  29. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_user`", userId) })
  30. callerId := int64(999999998)
  31. logic := NewUpdateUserStatusLogic(ctxhelper.SuperAdminCtxWithUserId(callerId), svcCtx)
  32. err := logic.UpdateUserStatus(&types.UpdateUserStatusReq{
  33. Id: userId,
  34. Status: 2,
  35. })
  36. require.NoError(t, err)
  37. user, err := svcCtx.SysUserModel.FindOne(ctx, userId)
  38. require.NoError(t, err)
  39. assert.Equal(t, int64(2), user.Status)
  40. }
  41. // TC-0142: 正常解冻
  42. func TestUpdateUserStatus_Unfreeze(t *testing.T) {
  43. ctx := context.Background()
  44. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  45. conn := testutil.GetTestSqlConn()
  46. username := testutil.UniqueId()
  47. userId := insertTestUserFull(t, ctx, &userModel.SysUser{
  48. Username: username,
  49. Password: testutil.HashPassword("pass"),
  50. Nickname: "frozen",
  51. Avatar: sql.NullString{},
  52. IsSuperAdmin: 2,
  53. MustChangePassword: 2,
  54. Status: 2,
  55. })
  56. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_user`", userId) })
  57. callerId := int64(999999998)
  58. logic := NewUpdateUserStatusLogic(ctxhelper.SuperAdminCtxWithUserId(callerId), svcCtx)
  59. err := logic.UpdateUserStatus(&types.UpdateUserStatusReq{
  60. Id: userId,
  61. Status: 1,
  62. })
  63. require.NoError(t, err)
  64. user, err := svcCtx.SysUserModel.FindOne(ctx, userId)
  65. require.NoError(t, err)
  66. assert.Equal(t, int64(1), user.Status)
  67. }
  68. // TC-0143: 非法status(0)
  69. func TestUpdateUserStatus_InvalidStatus(t *testing.T) {
  70. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  71. logic := NewUpdateUserStatusLogic(ctxWithUserId(1), svcCtx)
  72. err := logic.UpdateUserStatus(&types.UpdateUserStatusReq{
  73. Id: 1,
  74. Status: 0,
  75. })
  76. require.Error(t, err)
  77. var codeErr *response.CodeError
  78. require.True(t, errors.As(err, &codeErr))
  79. assert.Equal(t, 400, codeErr.Code())
  80. assert.Contains(t, codeErr.Error(), "状态值无效")
  81. }
  82. // TC-0144: 冻结自己
  83. func TestUpdateUserStatus_FreezeSelf(t *testing.T) {
  84. ctx := context.Background()
  85. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  86. conn := testutil.GetTestSqlConn()
  87. username := testutil.UniqueId()
  88. userId := insertTestUser(t, ctx, username, testutil.HashPassword("pass"))
  89. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_user`", userId) })
  90. logic := NewUpdateUserStatusLogic(ctxWithUserId(userId), svcCtx)
  91. err := logic.UpdateUserStatus(&types.UpdateUserStatusReq{
  92. Id: userId,
  93. Status: 2,
  94. })
  95. require.Error(t, err)
  96. var codeErr *response.CodeError
  97. require.True(t, errors.As(err, &codeErr))
  98. assert.Equal(t, 400, codeErr.Code())
  99. assert.Equal(t, "不能修改自己的状态", codeErr.Error())
  100. }
  101. // TC-0145: 冻结超管
  102. func TestUpdateUserStatus_FreezeSuperAdmin(t *testing.T) {
  103. ctx := context.Background()
  104. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  105. conn := testutil.GetTestSqlConn()
  106. username := testutil.UniqueId()
  107. now := time.Now().Unix()
  108. userId := insertTestUserFull(t, ctx, &userModel.SysUser{
  109. Username: username,
  110. Password: testutil.HashPassword("pass"),
  111. Nickname: "superadmin",
  112. Avatar: sql.NullString{},
  113. IsSuperAdmin: 1,
  114. MustChangePassword: 2,
  115. Status: 1,
  116. CreateTime: now,
  117. UpdateTime: now,
  118. })
  119. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_user`", userId) })
  120. callerId := int64(999999998)
  121. logic := NewUpdateUserStatusLogic(ctxWithUserId(callerId), svcCtx)
  122. err := logic.UpdateUserStatus(&types.UpdateUserStatusReq{
  123. Id: userId,
  124. Status: 2,
  125. })
  126. require.Error(t, err)
  127. var codeErr *response.CodeError
  128. require.True(t, errors.As(err, &codeErr))
  129. assert.Equal(t, 403, codeErr.Code())
  130. assert.Equal(t, "不能修改超级管理员的状态", codeErr.Error())
  131. }
  132. // TC-0145: 冻结超管
  133. func TestUpdateUserStatus_NotFound(t *testing.T) {
  134. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  135. callerId := int64(999999998)
  136. logic := NewUpdateUserStatusLogic(ctxWithUserId(callerId), svcCtx)
  137. err := logic.UpdateUserStatus(&types.UpdateUserStatusReq{
  138. Id: 999999999,
  139. Status: 2,
  140. })
  141. require.Error(t, err)
  142. var codeErr *response.CodeError
  143. require.True(t, errors.As(err, &codeErr))
  144. assert.Equal(t, 404, codeErr.Code())
  145. assert.Equal(t, "用户不存在", codeErr.Error())
  146. }