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<List<MesWmTransactionSaveReqDTO>> 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"));
|
}
|
}
|