package dept import ( "testing" deptModel "perms-system-server/internal/model/dept" "perms-system-server/internal/testutil/ctxhelper" "perms-system-server/internal/testutil/mocks" "perms-system-server/internal/types" "github.com/stretchr/testify/assert" "go.uber.org/mock/gomock" ) // TC-0105: DeptType变更时级联清除子部门用户缓存 func TestUpdateDept_Mock_CascadeCacheClean(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() parentDeptId := int64(10) childDeptId1 := int64(20) childDeptId2 := int64(30) mockDept := mocks.NewMockSysDeptModel(ctrl) mockDept.EXPECT().FindOne(gomock.Any(), parentDeptId). Return(&deptModel.SysDept{ Id: parentDeptId, Name: "Parent", Path: "/10/", DeptType: "NORMAL", Status: 1, }, nil) mockDept.EXPECT().Update(gomock.Any(), gomock.Any()).Return(nil) mockDept.EXPECT().FindByPathPrefix(gomock.Any(), "/10/"). Return([]*deptModel.SysDept{ {Id: parentDeptId, Path: "/10/", DeptType: "DEV"}, {Id: childDeptId1, Path: "/10/20/", DeptType: "NORMAL"}, {Id: childDeptId2, Path: "/10/30/", DeptType: "NORMAL"}, }, nil) mockUser := mocks.NewMockSysUserModel(ctrl) mockUser.EXPECT().FindIdsByDeptId(gomock.Any(), parentDeptId). Return([]int64{100, 101}, nil) mockUser.EXPECT().FindIdsByDeptId(gomock.Any(), childDeptId1). Return([]int64{200}, nil) mockUser.EXPECT().FindIdsByDeptId(gomock.Any(), childDeptId2). Return([]int64{300, 301}, nil) svcCtx := mocks.NewMockServiceContext(mocks.MockModels{ Dept: mockDept, User: mockUser, }) ctx := ctxhelper.SuperAdminCtx() logic := NewUpdateDeptLogic(ctx, svcCtx) err := logic.UpdateDept(&types.UpdateDeptReq{ Id: parentDeptId, Name: "Parent Updated", DeptType: "DEV", }) assert.NoError(t, err) }