updateDeptLogic_test.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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-0089: 正常更新
  14. func TestUpdateDept_Normal(t *testing.T) {
  15. ctx := ctxhelper.SuperAdminCtx()
  16. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  17. conn := testutil.GetTestSqlConn()
  18. deptId, err := insertDeptRaw(ctx, svcCtx, 0, "upd_"+testutil.UniqueId(), "/")
  19. require.NoError(t, err)
  20. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_dept`", deptId) })
  21. newName := "updated_" + testutil.UniqueId()
  22. l := NewUpdateDeptLogic(ctx, svcCtx)
  23. err = l.UpdateDept(&types.UpdateDeptReq{
  24. Id: deptId,
  25. Name: newName,
  26. Sort: 99,
  27. Remark: "updated remark",
  28. Status: 2,
  29. })
  30. require.NoError(t, err)
  31. d, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
  32. require.NoError(t, err)
  33. assert.Equal(t, newName, d.Name)
  34. assert.Equal(t, int64(99), d.Sort)
  35. assert.Equal(t, "updated remark", d.Remark)
  36. assert.Equal(t, int64(2), d.Status)
  37. }
  38. // TC-0090: 不存在
  39. func TestUpdateDept_NotFound(t *testing.T) {
  40. ctx := ctxhelper.SuperAdminCtx()
  41. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  42. l := NewUpdateDeptLogic(ctx, svcCtx)
  43. err := l.UpdateDept(&types.UpdateDeptReq{
  44. Id: 999999999,
  45. Name: "ghost_" + testutil.UniqueId(),
  46. })
  47. require.Error(t, err)
  48. var ce *response.CodeError
  49. require.True(t, errors.As(err, &ce))
  50. assert.Equal(t, 404, ce.Code())
  51. assert.Equal(t, "部门不存在", ce.Error())
  52. }
  53. // TC-0089: 正常更新
  54. func TestUpdateDept_StatusZeroUnchanged(t *testing.T) {
  55. ctx := ctxhelper.SuperAdminCtx()
  56. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  57. conn := testutil.GetTestSqlConn()
  58. deptId, err := insertDeptRaw(ctx, svcCtx, 0, "s0_"+testutil.UniqueId(), "/")
  59. require.NoError(t, err)
  60. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_dept`", deptId) })
  61. before, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
  62. require.NoError(t, err)
  63. assert.Equal(t, int64(1), before.Status)
  64. l := NewUpdateDeptLogic(ctx, svcCtx)
  65. err = l.UpdateDept(&types.UpdateDeptReq{
  66. Id: deptId,
  67. Name: "changed_" + testutil.UniqueId(),
  68. Status: 0,
  69. })
  70. require.NoError(t, err)
  71. after, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
  72. require.NoError(t, err)
  73. assert.Equal(t, int64(1), after.Status)
  74. }
  75. // TC-0091: DeptType NORMAL→DEV
  76. func TestUpdateDept_DeptType_NormalToDev(t *testing.T) {
  77. ctx := ctxhelper.SuperAdminCtx()
  78. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  79. conn := testutil.GetTestSqlConn()
  80. deptId, err := insertDeptRaw(ctx, svcCtx, 0, "dt_"+testutil.UniqueId(), "/")
  81. require.NoError(t, err)
  82. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_dept`", deptId) })
  83. before, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
  84. require.NoError(t, err)
  85. assert.Equal(t, "NORMAL", before.DeptType)
  86. l := NewUpdateDeptLogic(ctx, svcCtx)
  87. err = l.UpdateDept(&types.UpdateDeptReq{
  88. Id: deptId,
  89. Name: "dt_changed_" + testutil.UniqueId(),
  90. DeptType: "DEV",
  91. })
  92. require.NoError(t, err)
  93. after, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
  94. require.NoError(t, err)
  95. assert.Equal(t, "DEV", after.DeptType)
  96. }
  97. // TC-0092: DeptType无效值返回错误
  98. func TestUpdateDept_DeptType_InvalidRejected(t *testing.T) {
  99. ctx := ctxhelper.SuperAdminCtx()
  100. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  101. conn := testutil.GetTestSqlConn()
  102. deptId, err := insertDeptRaw(ctx, svcCtx, 0, "dti_"+testutil.UniqueId(), "/")
  103. require.NoError(t, err)
  104. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_dept`", deptId) })
  105. l := NewUpdateDeptLogic(ctx, svcCtx)
  106. err = l.UpdateDept(&types.UpdateDeptReq{
  107. Id: deptId,
  108. Name: "dti_changed_" + testutil.UniqueId(),
  109. DeptType: "INVALID_TYPE",
  110. })
  111. require.Error(t, err)
  112. var ce *response.CodeError
  113. require.True(t, errors.As(err, &ce))
  114. assert.Equal(t, 400, ce.Code())
  115. assert.Contains(t, ce.Error(), "部门类型无效")
  116. after, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
  117. require.NoError(t, err)
  118. assert.Equal(t, "NORMAL", after.DeptType, "无效DeptType不应修改数据库")
  119. }
  120. // TC-0512: updateDept非超管拒绝
  121. func TestUpdateDept_NonSuperAdminRejected(t *testing.T) {
  122. ctx := ctxhelper.AdminCtx("test_product")
  123. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  124. l := NewUpdateDeptLogic(ctx, svcCtx)
  125. err := l.UpdateDept(&types.UpdateDeptReq{Id: 1, Name: "test"})
  126. require.Error(t, err)
  127. var ce *response.CodeError
  128. require.True(t, errors.As(err, &ce))
  129. assert.Equal(t, 403, ce.Code())
  130. }