setUserPermsLogic_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package user
  2. import (
  3. "errors"
  4. "testing"
  5. "perms-system-server/internal/response"
  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-0137: 正常ALLOW
  14. func TestSetUserPerms_Allow(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. t.Cleanup(func() {
  21. testutil.CleanTableByField(ctx, conn, "`sys_user_perm`", "userId", userId)
  22. testutil.CleanTable(ctx, conn, "`sys_user`", userId)
  23. })
  24. logic := NewSetUserPermsLogic(ctx, svcCtx)
  25. err := logic.SetUserPerms(&types.SetPermsReq{
  26. UserId: userId,
  27. Perms: []types.UserPermItem{
  28. {PermId: 100, Effect: "ALLOW"},
  29. {PermId: 200, Effect: "ALLOW"},
  30. },
  31. })
  32. require.NoError(t, err)
  33. perms, err := svcCtx.SysUserPermModel.FindByUserId(ctx, userId)
  34. require.NoError(t, err)
  35. assert.Len(t, perms, 2)
  36. for _, p := range perms {
  37. assert.Equal(t, "ALLOW", p.Effect)
  38. }
  39. }
  40. // TC-0139: DENY权限
  41. func TestSetUserPerms_Deny(t *testing.T) {
  42. ctx := ctxhelper.SuperAdminCtx()
  43. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  44. conn := testutil.GetTestSqlConn()
  45. username := testutil.UniqueId()
  46. userId := insertTestUser(t, ctx, username, testutil.HashPassword("pass"))
  47. t.Cleanup(func() {
  48. testutil.CleanTableByField(ctx, conn, "`sys_user_perm`", "userId", userId)
  49. testutil.CleanTable(ctx, conn, "`sys_user`", userId)
  50. })
  51. logic := NewSetUserPermsLogic(ctx, svcCtx)
  52. err := logic.SetUserPerms(&types.SetPermsReq{
  53. UserId: userId,
  54. Perms: []types.UserPermItem{
  55. {PermId: 100, Effect: "DENY"},
  56. },
  57. })
  58. require.NoError(t, err)
  59. perms, err := svcCtx.SysUserPermModel.FindByUserId(ctx, userId)
  60. require.NoError(t, err)
  61. require.Len(t, perms, 1)
  62. assert.Equal(t, "DENY", perms[0].Effect)
  63. assert.Equal(t, int64(100), perms[0].PermId)
  64. }
  65. // TC-0138: 用户不存在
  66. func TestSetUserPerms_UserNotFound(t *testing.T) {
  67. ctx := ctxhelper.SuperAdminCtx()
  68. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  69. logic := NewSetUserPermsLogic(ctx, svcCtx)
  70. err := logic.SetUserPerms(&types.SetPermsReq{
  71. UserId: 999999999,
  72. Perms: []types.UserPermItem{
  73. {PermId: 1, Effect: "ALLOW"},
  74. },
  75. })
  76. require.Error(t, err)
  77. var codeErr *response.CodeError
  78. require.True(t, errors.As(err, &codeErr))
  79. assert.Equal(t, 404, codeErr.Code())
  80. assert.Equal(t, "用户不存在", codeErr.Error())
  81. }
  82. // TC-0140: 清空权限
  83. func TestSetUserPerms_EmptyPerms_ClearsAll(t *testing.T) {
  84. ctx := ctxhelper.SuperAdminCtx()
  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() {
  90. testutil.CleanTableByField(ctx, conn, "`sys_user_perm`", "userId", userId)
  91. testutil.CleanTable(ctx, conn, "`sys_user`", userId)
  92. })
  93. logic := NewSetUserPermsLogic(ctx, svcCtx)
  94. err := logic.SetUserPerms(&types.SetPermsReq{
  95. UserId: userId,
  96. Perms: []types.UserPermItem{
  97. {PermId: 100, Effect: "ALLOW"},
  98. },
  99. })
  100. require.NoError(t, err)
  101. err = logic.SetUserPerms(&types.SetPermsReq{
  102. UserId: userId,
  103. Perms: []types.UserPermItem{},
  104. })
  105. require.NoError(t, err)
  106. perms, err := svcCtx.SysUserPermModel.FindByUserId(ctx, userId)
  107. require.NoError(t, err)
  108. assert.Empty(t, perms)
  109. }