package cn.iocoder.yudao.module.mes.service.wm.miscissue; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscissue.MesWmMiscIssueDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscissue.MesWmMiscIssueLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.miscissue.MesWmMiscIssueMapper; import cn.iocoder.yudao.module.mes.enums.wm.MesWmMiscIssueStatusEnum; import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.springframework.test.util.ReflectionTestUtils; import java.math.BigDecimal; import java.util.List; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; class MesWmMiscIssueServiceImplTest { @Test void finishMiscIssuePassesSelectedMaterialStockIdToTransaction() { var service = new MesWmMiscIssueServiceImpl(); var mapper = mock(MesWmMiscIssueMapper.class); var lineService = mock(MesWmMiscIssueLineService.class); var transactionService = mock(MesWmTransactionService.class); ReflectionTestUtils.setField(service, "miscIssueMapper", mapper); ReflectionTestUtils.setField(service, "miscIssueLineService", lineService); ReflectionTestUtils.setField(service, "wmTransactionService", transactionService); var issue = new MesWmMiscIssueDO().setId(1L).setCode("MI1") .setStatus(MesWmMiscIssueStatusEnum.APPROVED.getStatus()); var line = new MesWmMiscIssueLineDO().setId(5L).setIssueId(1L).setItemId(2L) .setQuantity(BigDecimal.valueOf(3)).setMaterialStockId(9L).setBatchId(6L) .setBatchCode("B1").setWarehouseId(11L).setLocationId(12L).setAreaId(13L); when(mapper.selectById(1L)).thenReturn(issue); when(lineService.getMiscIssueLineListByIssueId(1L)).thenReturn(List.of(line)); service.finishMiscIssue(1L); @SuppressWarnings("unchecked") ArgumentCaptor> captor = ArgumentCaptor.forClass(List.class); verify(transactionService).createTransactionList(captor.capture()); var dto = captor.getValue().get(0); assertEquals(9L, dto.getMaterialStockId().longValue()); assertEquals(6L, dto.getBatchId().longValue()); assertEquals(0, BigDecimal.valueOf(-3).compareTo(dto.getQuantity())); } @Test void finishMiscIssueRejectsNonApprovedStatus() { var service = new MesWmMiscIssueServiceImpl(); var mapper = mock(MesWmMiscIssueMapper.class); ReflectionTestUtils.setField(service, "miscIssueMapper", mapper); ReflectionTestUtils.setField(service, "miscIssueLineService", mock(MesWmMiscIssueLineService.class)); ReflectionTestUtils.setField(service, "wmTransactionService", mock(MesWmTransactionService.class)); when(mapper.selectById(1L)).thenReturn(new MesWmMiscIssueDO().setId(1L).setCode("MI1") .setStatus(MesWmMiscIssueStatusEnum.PREPARE.getStatus())); assertThrows(ServiceException.class, () -> service.finishMiscIssue(1L)); verifyNoInteractions(ReflectionTestUtils.getField(service, "wmTransactionService")); } }