| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- package dept
- import (
- "errors"
- "testing"
- "perms-system-server/internal/response"
- "perms-system-server/internal/svc"
- "perms-system-server/internal/testutil"
- "perms-system-server/internal/testutil/ctxhelper"
- "perms-system-server/internal/types"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- )
- // TC-0101: 正常更新
- func TestUpdateDept_Normal(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- conn := testutil.GetTestSqlConn()
- deptId, err := insertDeptRaw(ctx, svcCtx, 0, "upd_"+testutil.UniqueId(), "/")
- require.NoError(t, err)
- t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_dept`", deptId) })
- newName := "updated_" + testutil.UniqueId()
- l := NewUpdateDeptLogic(ctx, svcCtx)
- err = l.UpdateDept(&types.UpdateDeptReq{
- Id: deptId,
- Name: newName,
- Sort: 99,
- Remark: "updated remark",
- Status: 2,
- })
- require.NoError(t, err)
- d, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
- require.NoError(t, err)
- assert.Equal(t, newName, d.Name)
- assert.Equal(t, int64(99), d.Sort)
- assert.Equal(t, "updated remark", d.Remark)
- assert.Equal(t, int64(2), d.Status)
- }
- // TC-0102: 不存在
- func TestUpdateDept_NotFound(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- l := NewUpdateDeptLogic(ctx, svcCtx)
- err := l.UpdateDept(&types.UpdateDeptReq{
- Id: 999999999,
- Name: "ghost_" + testutil.UniqueId(),
- })
- require.Error(t, err)
- var ce *response.CodeError
- require.True(t, errors.As(err, &ce))
- assert.Equal(t, 404, ce.Code())
- assert.Equal(t, "部门不存在", ce.Error())
- }
- // TC-0101: 正常更新
- func TestUpdateDept_StatusZeroUnchanged(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- conn := testutil.GetTestSqlConn()
- deptId, err := insertDeptRaw(ctx, svcCtx, 0, "s0_"+testutil.UniqueId(), "/")
- require.NoError(t, err)
- t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_dept`", deptId) })
- before, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
- require.NoError(t, err)
- assert.Equal(t, int64(1), before.Status)
- l := NewUpdateDeptLogic(ctx, svcCtx)
- err = l.UpdateDept(&types.UpdateDeptReq{
- Id: deptId,
- Name: "changed_" + testutil.UniqueId(),
- Status: 0,
- })
- require.NoError(t, err)
- after, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
- require.NoError(t, err)
- assert.Equal(t, int64(1), after.Status)
- }
- // TC-0103: DeptType NORMAL→DEV
- func TestUpdateDept_DeptType_NormalToDev(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- conn := testutil.GetTestSqlConn()
- deptId, err := insertDeptRaw(ctx, svcCtx, 0, "dt_"+testutil.UniqueId(), "/")
- require.NoError(t, err)
- t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_dept`", deptId) })
- before, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
- require.NoError(t, err)
- assert.Equal(t, "NORMAL", before.DeptType)
- l := NewUpdateDeptLogic(ctx, svcCtx)
- err = l.UpdateDept(&types.UpdateDeptReq{
- Id: deptId,
- Name: "dt_changed_" + testutil.UniqueId(),
- DeptType: "DEV",
- })
- require.NoError(t, err)
- after, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
- require.NoError(t, err)
- assert.Equal(t, "DEV", after.DeptType)
- }
- // TC-0104: DeptType无效值返回错误
- func TestUpdateDept_DeptType_InvalidRejected(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- conn := testutil.GetTestSqlConn()
- deptId, err := insertDeptRaw(ctx, svcCtx, 0, "dti_"+testutil.UniqueId(), "/")
- require.NoError(t, err)
- t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_dept`", deptId) })
- l := NewUpdateDeptLogic(ctx, svcCtx)
- err = l.UpdateDept(&types.UpdateDeptReq{
- Id: deptId,
- Name: "dti_changed_" + testutil.UniqueId(),
- DeptType: "INVALID_TYPE",
- })
- require.Error(t, err)
- var ce *response.CodeError
- require.True(t, errors.As(err, &ce))
- assert.Equal(t, 400, ce.Code())
- assert.Contains(t, ce.Error(), "部门类型无效")
- after, err := svcCtx.SysDeptModel.FindOne(ctx, deptId)
- require.NoError(t, err)
- assert.Equal(t, "NORMAL", after.DeptType, "无效DeptType不应修改数据库")
- }
- // TC-0533: updateDept非超管拒绝
- func TestUpdateDept_NonSuperAdminRejected(t *testing.T) {
- ctx := ctxhelper.AdminCtx("test_product")
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- l := NewUpdateDeptLogic(ctx, svcCtx)
- err := l.UpdateDept(&types.UpdateDeptReq{Id: 1, Name: "test"})
- require.Error(t, err)
- var ce *response.CodeError
- require.True(t, errors.As(err, &ce))
- assert.Equal(t, 403, ce.Code())
- }
|