package cn.lihu.jh.module.ecg.service.appointment; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import jakarta.annotation.Resource; import cn.lihu.jh.framework.test.core.ut.BaseDbUnitTest; import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.*; import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO; import cn.lihu.jh.module.ecg.dal.mysql.appointment.AppointmentMapper; import cn.lihu.jh.framework.common.pojo.PageResult; import jakarta.annotation.Resource; import org.springframework.context.annotation.Import; import java.util.*; import java.time.LocalDateTime; import static cn.hutool.core.util.RandomUtil.*; import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*; import static cn.lihu.jh.framework.test.core.util.AssertUtils.*; import static cn.lihu.jh.framework.test.core.util.RandomUtils.*; import static cn.lihu.jh.framework.common.util.date.LocalDateTimeUtils.*; import static cn.lihu.jh.framework.common.util.object.ObjectUtils.*; import static cn.lihu.jh.framework.common.util.date.DateUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; /** * {@link AppointmentServiceImpl} 的单元测试类 * * @author 马剑波 */ @Import(AppointmentServiceImpl.class) public class AppointmentServiceImplTest extends BaseDbUnitTest { @Resource private AppointmentServiceImpl appointmentService; @Resource private AppointmentMapper appointmentMapper; @Test public void testCreateAppointment_success() { // 准备参数 AppointmentSaveReqVO createReqVO = randomPojo(AppointmentSaveReqVO.class).setId(null); // 调用 Integer appointmentId = appointmentService.createAppointment(createReqVO); // 断言 assertNotNull(appointmentId); // 校验记录的属性是否正确 AppointmentDO appointment = appointmentMapper.selectById(appointmentId); assertPojoEquals(createReqVO, appointment, "id"); } @Test public void testUpdateAppointment_success() { // mock 数据 AppointmentDO dbAppointment = randomPojo(AppointmentDO.class); appointmentMapper.insert(dbAppointment);// @Sql: 先插入出一条存在的数据 // 准备参数 AppointmentSaveReqVO updateReqVO = randomPojo(AppointmentSaveReqVO.class, o -> { o.setId(dbAppointment.getId()); // 设置更新的 ID }); // 调用 appointmentService.updateAppointment(updateReqVO); // 校验是否更新正确 AppointmentDO appointment = appointmentMapper.selectById(updateReqVO.getId()); // 获取最新的 assertPojoEquals(updateReqVO, appointment); } @Test public void testUpdateAppointment_notExists() { // 准备参数 AppointmentSaveReqVO updateReqVO = randomPojo(AppointmentSaveReqVO.class); // 调用, 并断言异常 assertServiceException(() -> appointmentService.updateAppointment(updateReqVO), APPOINTMENT_NOT_EXISTS); } @Test public void testDeleteAppointment_success() { // mock 数据 AppointmentDO dbAppointment = randomPojo(AppointmentDO.class); appointmentMapper.insert(dbAppointment);// @Sql: 先插入出一条存在的数据 // 准备参数 Integer id = dbAppointment.getId(); // 调用 appointmentService.deleteAppointment(id); // 校验数据不存在了 assertNull(appointmentMapper.selectById(id)); } @Test public void testDeleteAppointment_notExists() { // 准备参数 Integer id = randomIntegerId(); // 调用, 并断言异常 assertServiceException(() -> appointmentService.deleteAppointment(id), APPOINTMENT_NOT_EXISTS); } @Test @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 public void testGetAppointmentPage() { // mock 数据 AppointmentDO dbAppointment = randomPojo(AppointmentDO.class, o -> { // 等会查询到 o.setPatId(null); o.setPatName(null); o.setPatGender(null); o.setPatBirthday(null); o.setPatMobile(null); o.setPatPhone(null); o.setPatIdentityId(null); o.setPatAddr(null); o.setPatDeptCode(null); o.setPatDeptDesc(null); o.setPatWardCode(null); o.setPatWardDesc(null); o.setPatBedNo(null); o.setBookId(null); o.setBookPeriodStart(null); o.setBookPeriodEnd(null); o.setBookTime(null); o.setBookCheckType(null); o.setBookSrc(null); }); appointmentMapper.insert(dbAppointment); // 测试 patId 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatId(null))); // 测试 patName 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatName(null))); // 测试 patGender 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatGender(null))); // 测试 patBirthday 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatBirthday(null))); // 测试 patMobile 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatMobile(null))); // 测试 patPhone 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatPhone(null))); // 测试 patIdentityId 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatIdentityId(null))); // 测试 patAddr 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatAddr(null))); // 测试 patDeptCode 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatDeptCode(null))); // 测试 patDeptDesc 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatDeptDesc(null))); // 测试 patWardCode 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatWardCode(null))); // 测试 patWardDesc 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatWardDesc(null))); // 测试 patBedNo 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatBedNo(null))); // 测试 bookId 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookId(null))); // 测试 bookPeriodStart 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookPeriodStart(null))); // 测试 bookPeriodEnd 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookPeriodEnd(null))); // 测试 bookTime 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookTime(null))); // 测试 bookCheckType 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookCheckType(null))); // 测试 bookSrc 不匹配 appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookSrc(null))); // 准备参数 AppointmentPageReqVO reqVO = new AppointmentPageReqVO(); reqVO.setPatId(null); reqVO.setPatName(null); reqVO.setPatGender(null); reqVO.setPatBirthday(null); reqVO.setPatMobile(null); reqVO.setPatPhone(null); reqVO.setPatIdentityId(null); reqVO.setPatAddr(null); reqVO.setPatDeptCode(null); reqVO.setPatDeptDesc(null); reqVO.setPatWardCode(null); reqVO.setPatWardDesc(null); reqVO.setPatBedNo(null); reqVO.setBookId(null); reqVO.setBookPeriodStart(null); reqVO.setBookPeriodEnd(null); reqVO.setBookTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); reqVO.setBookCheckType(null); reqVO.setBookSrc(null); // 调用 PageResult pageResult = appointmentService.getAppointmentPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); assertPojoEquals(dbAppointment, pageResult.getList().get(0)); } }