liu
18 小时以前 4bc513be11e671caf20ec6013a51dee42c2ed96e
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
package cn.iocoder.yudao.module.crm.service.invoice;
 
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractProductDO;
import cn.iocoder.yudao.module.crm.service.contract.CrmContractService;
import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import cn.iocoder.yudao.module.mdm.enums.MdmItemTypeEnum;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
 
import java.util.List;
import java.util.Map;
import java.util.Set;
 
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when;
 
@ExtendWith(MockitoExtension.class)
class CrmInvoiceServiceImplTest {
 
    @Mock
    private CrmContractService contractService;
    @Mock
    private MdmItemApi mdmItemApi;
    @InjectMocks
    private CrmInvoiceServiceImpl invoiceService;
 
    @Test
    void validateContractItemsInvoiceable_rejectsMaterial() {
        mockContractItem(MdmItemTypeEnum.MATERIAL);
 
        ServiceException exception = assertThrows(ServiceException.class,
                () -> invoiceService.validateContractItemsInvoiceable(1L));
 
        assertEquals("物料不允许开票", exception.getMessage());
    }
 
    @Test
    void validateContractItemsInvoiceable_allowsProduct() {
        mockContractItem(MdmItemTypeEnum.PRODUCT);
 
        assertDoesNotThrow(() -> invoiceService.validateContractItemsInvoiceable(1L));
    }
 
    private void mockContractItem(MdmItemTypeEnum itemType) {
        CrmContractProductDO contractProduct = CrmContractProductDO.builder().itemId(10L).build();
        MdmItemRespDTO item = new MdmItemRespDTO();
        item.setId(10L);
        item.setItemType(itemType.getType());
        when(contractService.getContractProductListByContractId(1L)).thenReturn(List.of(contractProduct));
        when(mdmItemApi.getItemMap(Set.of(10L))).thenReturn(Map.of(10L, item));
    }
 
}