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));
|
}
|
|
}
|