云
4 天以前 f02d0df2f1dfc7a8b775cf50d45375e57628a5ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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"));
    }
}