deleteDeptLogic_test.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package dept
  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-0074: 正常删除(无子部门)
  14. func TestDeleteDept_NoChildren(t *testing.T) {
  15. ctx := ctxhelper.SuperAdminCtx()
  16. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  17. conn := testutil.GetTestSqlConn()
  18. id, err := insertDeptRaw(ctx, svcCtx, 0, "del_"+testutil.UniqueId(), "/")
  19. require.NoError(t, err)
  20. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_dept`", id) })
  21. l := NewDeleteDeptLogic(ctx, svcCtx)
  22. err = l.DeleteDept(&types.DeleteDeptReq{Id: id})
  23. require.NoError(t, err)
  24. _, err = svcCtx.SysDeptModel.FindOne(ctx, id)
  25. assert.Error(t, err)
  26. }
  27. // TC-0076: 不存在的部门
  28. func TestDeleteDept_NonExistentDept(t *testing.T) {
  29. ctx := ctxhelper.SuperAdminCtx()
  30. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  31. l := NewDeleteDeptLogic(ctx, svcCtx)
  32. err := l.DeleteDept(&types.DeleteDeptReq{Id: 999999999})
  33. assert.NoError(t, err)
  34. }
  35. // TC-0075: 有子部门
  36. func TestDeleteDept_HasChildren(t *testing.T) {
  37. ctx := ctxhelper.SuperAdminCtx()
  38. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  39. conn := testutil.GetTestSqlConn()
  40. parentId, err := insertDeptRaw(ctx, svcCtx, 0, "del_par_"+testutil.UniqueId(), "/")
  41. require.NoError(t, err)
  42. parent, _ := svcCtx.SysDeptModel.FindOne(ctx, parentId)
  43. childId, err := insertDeptRaw(ctx, svcCtx, parentId, "del_child_"+testutil.UniqueId(), parent.Path)
  44. require.NoError(t, err)
  45. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_dept`", childId, parentId) })
  46. l := NewDeleteDeptLogic(ctx, svcCtx)
  47. err = l.DeleteDept(&types.DeleteDeptReq{Id: parentId})
  48. require.Error(t, err)
  49. var ce *response.CodeError
  50. require.True(t, errors.As(err, &ce))
  51. assert.Equal(t, 400, ce.Code())
  52. assert.Contains(t, ce.Error(), "该部门下存在子部门,无法删除")
  53. _, err = svcCtx.SysDeptModel.FindOne(ctx, parentId)
  54. assert.NoError(t, err)
  55. }
  56. // TC-0483: deleteDept非超管拒绝
  57. func TestDeleteDept_NonSuperAdminRejected(t *testing.T) {
  58. ctx := ctxhelper.AdminCtx("test_product")
  59. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  60. l := NewDeleteDeptLogic(ctx, svcCtx)
  61. err := l.DeleteDept(&types.DeleteDeptReq{Id: 1})
  62. require.Error(t, err)
  63. var ce *response.CodeError
  64. require.True(t, errors.As(err, &ce))
  65. assert.Equal(t, 403, ce.Code())
  66. }