package cn.iocoder.yudao.module.mes.service.safety;
|
|
import cn.iocoder.yudao.module.hrm.api.employee.dto.HrmEmployeeSimpleDTO;
|
import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.SafetyHazardAssignReqVO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.safety.SafetyHazardDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.safety.SafetyHazardMapper;
|
import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
|
import org.junit.jupiter.api.Test;
|
import org.springframework.test.util.ReflectionTestUtils;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.mockito.ArgumentMatchers.*;
|
import static org.mockito.Mockito.*;
|
import org.mockito.ArgumentCaptor;
|
import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
|
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
import java.util.List;
|
|
class SafetyHazardNoticeTest {
|
@Test void unlinkedEmployeeCanUseExplicitNotificationAccount() {
|
var service = new SafetyHazardService();
|
var mapper = mock(SafetyHazardMapper.class);
|
var resolver = mock(SafetyRefResolver.class);
|
var notify = mock(NotifyMessageSendApi.class);
|
var users = mock(AdminUserService.class);
|
ReflectionTestUtils.setField(service, "hazardMapper", mapper);
|
ReflectionTestUtils.setField(service, "refResolver", resolver);
|
ReflectionTestUtils.setField(service, "notifyMessageSendApi", notify);
|
ReflectionTestUtils.setField(service, "adminUserService", users);
|
var hazard = new SafetyHazardDO(); hazard.setId(1L); hazard.setStatus("REPORTED"); hazard.setCode("HZ1"); hazard.setTitle("测试隐患");
|
when(mapper.selectByIdForUpdate(1L)).thenReturn(hazard);
|
var employee = new HrmEmployeeSimpleDTO(); employee.setId(2L); employee.setName("责任人");
|
when(resolver.requireEmployee(eq(2L), any())).thenReturn(employee);
|
when(notify.sendSingleMessageToAdmin(any())).thenReturn(9L);
|
var req = new SafetyHazardAssignReqVO(); req.setId(1L); req.setAssigneeId(2L); req.setNotifyUserId(3L);
|
service.assignHazard(req);
|
var captor = ArgumentCaptor.forClass(NotifySendSingleToUserReqDTO.class);
|
verify(notify).sendSingleMessageToAdmin(captor.capture());
|
org.junit.jupiter.api.Assertions.assertEquals(3L, captor.getValue().getUserId());
|
verify(users).validateUserList(List.of(3L));
|
}
|
@Test
|
void disabledTemplateFailsAssignment() {
|
var service = new SafetyHazardService();
|
var mapper = mock(SafetyHazardMapper.class);
|
var resolver = mock(SafetyRefResolver.class);
|
var notify = mock(NotifyMessageSendApi.class);
|
ReflectionTestUtils.setField(service, "hazardMapper", mapper);
|
ReflectionTestUtils.setField(service, "refResolver", resolver);
|
ReflectionTestUtils.setField(service, "notifyMessageSendApi", notify);
|
ReflectionTestUtils.setField(service, "adminUserService", mock(AdminUserService.class));
|
var hazard = new SafetyHazardDO(); hazard.setId(1L); hazard.setStatus("REPORTED"); hazard.setCode("HZ1"); hazard.setTitle("测试隐患");
|
when(mapper.selectByIdForUpdate(1L)).thenReturn(hazard);
|
var employee = new HrmEmployeeSimpleDTO(); employee.setId(2L); employee.setUserId(3L); employee.setName("责任人");
|
when(resolver.requireEmployee(eq(2L), any())).thenReturn(employee);
|
when(notify.sendSingleMessageToAdmin(any())).thenReturn(null);
|
var req = new SafetyHazardAssignReqVO(); req.setId(1L); req.setAssigneeId(2L);
|
assertThrows(RuntimeException.class, () -> service.assignHazard(req));
|
}
|
@Test
|
void assignmentSendsNoticeToLinkedAccount() {
|
var service = new SafetyHazardService();
|
var mapper = mock(SafetyHazardMapper.class);
|
var resolver = mock(SafetyRefResolver.class);
|
var notify = mock(NotifyMessageSendApi.class);
|
ReflectionTestUtils.setField(service, "hazardMapper", mapper);
|
ReflectionTestUtils.setField(service, "refResolver", resolver);
|
ReflectionTestUtils.setField(service, "notifyMessageSendApi", notify);
|
ReflectionTestUtils.setField(service, "adminUserService", mock(AdminUserService.class));
|
var hazard = new SafetyHazardDO(); hazard.setId(1L); hazard.setStatus("REPORTED"); hazard.setCode("HZ1"); hazard.setTitle("测试隐患");
|
when(mapper.selectByIdForUpdate(1L)).thenReturn(hazard);
|
var employee = new HrmEmployeeSimpleDTO(); employee.setId(2L); employee.setUserId(3L); employee.setName("责任人");
|
when(resolver.requireEmployee(eq(2L), any())).thenReturn(employee);
|
when(notify.sendSingleMessageToAdmin(any())).thenReturn(9L);
|
when(mapper.updateById(any(SafetyHazardDO.class))).thenReturn(1);
|
var req = new SafetyHazardAssignReqVO(); req.setId(1L); req.setAssigneeId(2L);
|
service.assignHazard(req);
|
var sent = ArgumentCaptor.forClass(NotifySendSingleToUserReqDTO.class);
|
verify(notify).sendSingleMessageToAdmin(sent.capture());
|
org.junit.jupiter.api.Assertions.assertEquals(3L, sent.getValue().getUserId());
|
org.junit.jupiter.api.Assertions.assertEquals("HZ1", sent.getValue().getTemplateParams().get("code"));
|
}
|
@Test
|
void rejectAssignmentWhenResponsibleEmployeeHasNoAccount() {
|
var service = new SafetyHazardService();
|
var mapper = mock(SafetyHazardMapper.class);
|
var resolver = mock(SafetyRefResolver.class);
|
var notify = mock(NotifyMessageSendApi.class);
|
ReflectionTestUtils.setField(service, "hazardMapper", mapper);
|
ReflectionTestUtils.setField(service, "refResolver", resolver);
|
ReflectionTestUtils.setField(service, "notifyMessageSendApi", notify);
|
var hazard = new SafetyHazardDO(); hazard.setId(1L); hazard.setStatus("REPORTED");
|
when(mapper.selectByIdForUpdate(1L)).thenReturn(hazard);
|
var employee = new HrmEmployeeSimpleDTO(); employee.setId(2L); employee.setName("责任人");
|
when(resolver.requireEmployee(eq(2L), any())).thenReturn(employee);
|
var req = new SafetyHazardAssignReqVO(); req.setId(1L); req.setAssigneeId(2L);
|
assertThrows(RuntimeException.class, () -> service.assignHazard(req));
|
verify(notify, never()).sendSingleMessageToAdmin(any());
|
verify(mapper, never()).updateById(any(SafetyHazardDO.class));
|
}
|
}
|