Commit c5633a37c92eb5975d19ac32c126ccf5e493b076

Authored by YunaiV
1 parent d7288b89

fix(oa): 对齐点评长度边界并支持清空车辆部门

点评测试按累计 1000 字符校验,车辆完整编辑允许清空部门。
补充非法部门校验失败时不更新车辆数据的单元测试。
yudao-module-oa/src/main/java/cn/iocoder/yudao/module/oa/dal/dataobject/vehicle/OaVehicleDO.java
@@ -46,6 +46,7 @@ public class OaVehicleDO extends BaseDO { @@ -46,6 +46,7 @@ public class OaVehicleDO extends BaseDO {
46 * 46 *
47 * 关联 {@link DeptRespDTO#getId()} 47 * 关联 {@link DeptRespDTO#getId()}
48 */ 48 */
  49 + @TableField(updateStrategy = FieldStrategy.ALWAYS)
49 private Long deptId; 50 private Long deptId;
50 /** 51 /**
51 * 车型 52 * 车型
yudao-module-oa/src/test/java/cn/iocoder/yudao/module/oa/service/plan/OaPlanServiceImplTest.java
@@ -190,13 +190,13 @@ public class OaPlanServiceImplTest extends BaseDbUnitTest { @@ -190,13 +190,13 @@ public class OaPlanServiceImplTest extends BaseDbUnitTest {
190 // mock 数据:已有点评与本次追加内容按字符数计算 190 // mock 数据:已有点评与本次追加内容按字符数计算
191 Long ownerId = randomLongId(); 191 Long ownerId = randomLongId();
192 Long managerId = randomLongId(); 192 Long managerId = randomLongId();
193 - OaPlanDO plan = buildPlanDO(ownerId).setComment(StrUtil.repeat("a", 65533 - System.lineSeparator().length())); 193 + OaPlanDO plan = buildPlanDO(ownerId).setComment(StrUtil.repeat("a", 998 - System.lineSeparator().length()));
194 planMapper.insert(plan); 194 planMapper.insert(plan);
195 // mock 方法 195 // mock 方法
196 when(adminUserApi.getUserListBySubordinate(managerId)).thenReturn( 196 when(adminUserApi.getUserListBySubordinate(managerId)).thenReturn(
197 Collections.singletonList(new AdminUserRespDTO().setId(ownerId))); 197 Collections.singletonList(new AdminUserRespDTO().setId(ownerId)));
198 198
199 - // 调用:包含换行后恰好达到 65535 个字符 199 + // 调用:包含换行后恰好达到 1000 个字符
200 planService.addPlanComment(plan.getId(), "ab", managerId); 200 planService.addPlanComment(plan.getId(), "ab", managerId);
201 201
202 // 断言 202 // 断言
@@ -209,7 +209,7 @@ public class OaPlanServiceImplTest extends BaseDbUnitTest { @@ -209,7 +209,7 @@ public class OaPlanServiceImplTest extends BaseDbUnitTest {
209 // mock 数据:已有点评与本次追加内容按字符数计算 209 // mock 数据:已有点评与本次追加内容按字符数计算
210 Long ownerId = randomLongId(); 210 Long ownerId = randomLongId();
211 Long managerId = randomLongId(); 211 Long managerId = randomLongId();
212 - OaPlanDO plan = buildPlanDO(ownerId).setComment(StrUtil.repeat("a", 65533 - System.lineSeparator().length())); 212 + OaPlanDO plan = buildPlanDO(ownerId).setComment(StrUtil.repeat("a", 998 - System.lineSeparator().length()));
213 planMapper.insert(plan); 213 planMapper.insert(plan);
214 // mock 方法 214 // mock 方法
215 when(adminUserApi.getUserListBySubordinate(managerId)).thenReturn( 215 when(adminUserApi.getUserListBySubordinate(managerId)).thenReturn(
@@ -220,7 +220,7 @@ public class OaPlanServiceImplTest extends BaseDbUnitTest { @@ -220,7 +220,7 @@ public class OaPlanServiceImplTest extends BaseDbUnitTest {
220 () -> planService.addPlanComment(plan.getId(), "abc", managerId)); 220 () -> planService.addPlanComment(plan.getId(), "abc", managerId));
221 assertTrue(exception.getConstraintViolations().stream().anyMatch(violation -> 221 assertTrue(exception.getConstraintViolations().stream().anyMatch(violation ->
222 "comment".equals(violation.getPropertyPath().toString()) 222 "comment".equals(violation.getPropertyPath().toString())
223 - && "点评内容长度不能超过 65535 个字符".equals(violation.getMessage()))); 223 + && "点评内容长度不能超过 1000 个字符".equals(violation.getMessage())));
224 assertEquals(plan.getComment(), planMapper.selectById(plan.getId()).getComment()); 224 assertEquals(plan.getComment(), planMapper.selectById(plan.getId()).getComment());
225 } 225 }
226 226
yudao-module-oa/src/test/java/cn/iocoder/yudao/module/oa/service/vehicle/OaVehicleServiceImplTest.java
@@ -16,9 +16,11 @@ import java.math.BigDecimal; @@ -16,9 +16,11 @@ import java.math.BigDecimal;
16 import java.time.LocalDateTime; 16 import java.time.LocalDateTime;
17 import java.util.Collections; 17 import java.util.Collections;
18 18
  19 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
19 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 20 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
20 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; 21 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
21 import static cn.iocoder.yudao.module.oa.enums.ErrorCodeConstants.*; 22 import static cn.iocoder.yudao.module.oa.enums.ErrorCodeConstants.*;
  23 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.DEPT_NOT_FOUND;
22 import static org.junit.jupiter.api.Assertions.*; 24 import static org.junit.jupiter.api.Assertions.*;
23 import static org.mockito.Mockito.*; 25 import static org.mockito.Mockito.*;
24 26
@@ -187,6 +189,25 @@ public class OaVehicleServiceImplTest extends BaseDbUnitTest { @@ -187,6 +189,25 @@ public class OaVehicleServiceImplTest extends BaseDbUnitTest {
187 } 189 }
188 190
189 @Test 191 @Test
  192 + public void testUpdateVehicle_deptInvalid() {
  193 + // mock 数据
  194 + OaVehicleDO vehicle = randomVehicleDO().setDeptId(103L).setPicUrl("https://example.com/old.png");
  195 + vehicleMapper.insert(vehicle);
  196 + // 准备参数
  197 + OaVehicleSaveReqVO reqVO = BeanUtils.toBean(vehicle, OaVehicleSaveReqVO.class)
  198 + .setDeptId(104L).setPicUrl("https://example.com/new.png");
  199 + // mock 方法
  200 + doThrow(exception(DEPT_NOT_FOUND)).when(deptApi).validateDeptList(Collections.singleton(104L));
  201 +
  202 + // 调用,并断言异常
  203 + assertServiceException(() -> vehicleService.updateVehicle(reqVO), DEPT_NOT_FOUND);
  204 + // 断言:部门校验失败时不更新车辆
  205 + OaVehicleDO dbVehicle = vehicleMapper.selectById(vehicle.getId());
  206 + assertEquals(103L, dbVehicle.getDeptId());
  207 + assertEquals("https://example.com/old.png", dbVehicle.getPicUrl());
  208 + }
  209 +
  210 + @Test
190 public void testCreateVehicle_deletedPlateCanBeReused() { 211 public void testCreateVehicle_deletedPlateCanBeReused() {
191 // mock 数据 212 // mock 数据
192 OaVehicleDO vehicle = randomVehicleDO(); 213 OaVehicleDO vehicle = randomVehicleDO();