package cn.iocoder.yudao.module.mes.service.safety; import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk.SafetyRiskSourceSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.safety.SafetyRiskSourceDO; import cn.iocoder.yudao.module.mes.dal.mysql.safety.SafetyRiskSourceMapper; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.springframework.test.util.ReflectionTestUtils; import java.math.BigDecimal; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; class SafetyRiskSourceServiceTest { @Test void savingAboveLimitCreatesAlarmWithObservationTime() { var service=new SafetyRiskSourceService();var mapper=mock(SafetyRiskSourceMapper.class); ReflectionTestUtils.setField(service,"mapper",mapper); var req=new SafetyRiskSourceSaveReqVO();req.setName("测试危险源");req.setCategory("MAJOR");req.setMetricName("温度"); req.setUpperLimit(BigDecimal.TEN);req.setCurrentValue(new BigDecimal("11")); service.save(req); var captor=ArgumentCaptor.forClass(SafetyRiskSourceDO.class);verify(mapper).insert(captor.capture()); assertEquals("ALARM",captor.getValue().getRiskStatus());assertNotNull(captor.getValue().getObservedAt()); } @Test void invalidRangeDoesNotInsert() { var service=new SafetyRiskSourceService();var mapper=mock(SafetyRiskSourceMapper.class); ReflectionTestUtils.setField(service,"mapper",mapper); var req=new SafetyRiskSourceSaveReqVO();req.setLowerLimit(BigDecimal.TEN);req.setUpperLimit(BigDecimal.ONE); assertThrows(RuntimeException.class,()->service.save(req));verify(mapper,never()).insert(any(SafetyRiskSourceDO.class)); } }