deleteRoleLogic_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package role
  2. import (
  3. "errors"
  4. "testing"
  5. "time"
  6. permModel "perms-system-server/internal/model/perm"
  7. roleModel "perms-system-server/internal/model/role"
  8. "perms-system-server/internal/model/roleperm"
  9. "perms-system-server/internal/model/userrole"
  10. "perms-system-server/internal/response"
  11. "perms-system-server/internal/svc"
  12. "perms-system-server/internal/testutil"
  13. "perms-system-server/internal/testutil/ctxhelper"
  14. "perms-system-server/internal/types"
  15. "github.com/stretchr/testify/assert"
  16. "github.com/stretchr/testify/require"
  17. )
  18. // TC-0093: 正常删除+级联
  19. func TestDeleteRole_WithCascading(t *testing.T) {
  20. ctx := ctxhelper.SuperAdminCtx()
  21. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  22. conn := testutil.GetTestSqlConn()
  23. now := time.Now().Unix()
  24. pc := testutil.UniqueId()
  25. roleRes, err := svcCtx.SysRoleModel.Insert(ctx, &roleModel.SysRole{
  26. ProductCode: pc, Name: testutil.UniqueId(), Status: 1, PermsLevel: 1,
  27. CreateTime: now, UpdateTime: now,
  28. })
  29. require.NoError(t, err)
  30. roleId, _ := roleRes.LastInsertId()
  31. pRes, err := svcCtx.SysPermModel.Insert(ctx, &permModel.SysPerm{
  32. ProductCode: pc, Name: testutil.UniqueId(), Code: testutil.UniqueId(),
  33. Status: 1, CreateTime: now, UpdateTime: now,
  34. })
  35. require.NoError(t, err)
  36. permId, _ := pRes.LastInsertId()
  37. rpRes, err := svcCtx.SysRolePermModel.Insert(ctx, &roleperm.SysRolePerm{
  38. RoleId: roleId, PermId: permId, CreateTime: now, UpdateTime: now,
  39. })
  40. require.NoError(t, err)
  41. rpId, _ := rpRes.LastInsertId()
  42. urRes, err := svcCtx.SysUserRoleModel.Insert(ctx, &userrole.SysUserRole{
  43. UserId: 888888, RoleId: roleId, CreateTime: now, UpdateTime: now,
  44. })
  45. require.NoError(t, err)
  46. urId, _ := urRes.LastInsertId()
  47. t.Cleanup(func() {
  48. testutil.CleanTable(ctx, conn, "`sys_role_perm`", rpId)
  49. testutil.CleanTable(ctx, conn, "`sys_user_role`", urId)
  50. testutil.CleanTable(ctx, conn, "`sys_role`", roleId)
  51. testutil.CleanTable(ctx, conn, "`sys_perm`", permId)
  52. })
  53. logic := NewDeleteRoleLogic(ctx, svcCtx)
  54. err = logic.DeleteRole(&types.DeleteRoleReq{Id: roleId})
  55. require.NoError(t, err)
  56. _, err = svcCtx.SysRoleModel.FindOne(ctx, roleId)
  57. assert.Error(t, err)
  58. permIds, err := svcCtx.SysRolePermModel.FindPermIdsByRoleId(ctx, roleId)
  59. require.NoError(t, err)
  60. assert.Empty(t, permIds)
  61. roleIds, err := svcCtx.SysUserRoleModel.FindRoleIdsByUserId(ctx, 888888)
  62. require.NoError(t, err)
  63. assert.NotContains(t, roleIds, roleId)
  64. }
  65. // TC-0095: 无关联数据
  66. func TestDeleteRole_NoAssociations(t *testing.T) {
  67. ctx := ctxhelper.SuperAdminCtx()
  68. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  69. conn := testutil.GetTestSqlConn()
  70. now := time.Now().Unix()
  71. pc := testutil.UniqueId()
  72. roleRes, err := svcCtx.SysRoleModel.Insert(ctx, &roleModel.SysRole{
  73. ProductCode: pc, Name: testutil.UniqueId(), Status: 1, PermsLevel: 1,
  74. CreateTime: now, UpdateTime: now,
  75. })
  76. require.NoError(t, err)
  77. roleId, _ := roleRes.LastInsertId()
  78. t.Cleanup(func() {
  79. testutil.CleanTable(ctx, conn, "`sys_role`", roleId)
  80. })
  81. logic := NewDeleteRoleLogic(ctx, svcCtx)
  82. err = logic.DeleteRole(&types.DeleteRoleReq{Id: roleId})
  83. require.NoError(t, err)
  84. _, err = svcCtx.SysRoleModel.FindOne(ctx, roleId)
  85. assert.Error(t, err)
  86. }
  87. // TC-0489: deleteRole非管理员拒绝
  88. func TestDeleteRole_MemberRejected(t *testing.T) {
  89. pc := "test_product"
  90. ctx := ctxhelper.MemberCtx(pc)
  91. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  92. conn := testutil.GetTestSqlConn()
  93. now := time.Now().Unix()
  94. roleRes, err := svcCtx.SysRoleModel.Insert(ctx, &roleModel.SysRole{
  95. ProductCode: pc, Name: testutil.UniqueId(), Status: 1, PermsLevel: 1,
  96. CreateTime: now, UpdateTime: now,
  97. })
  98. require.NoError(t, err)
  99. roleId, _ := roleRes.LastInsertId()
  100. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_role`", roleId) })
  101. logic := NewDeleteRoleLogic(ctx, svcCtx)
  102. err = logic.DeleteRole(&types.DeleteRoleReq{Id: roleId})
  103. require.Error(t, err)
  104. var ce *response.CodeError
  105. require.True(t, errors.As(err, &ce))
  106. assert.Equal(t, 403, ce.Code())
  107. }