feat: add bit sample product metadata
parent
5987645a86
commit
fd654978e0
@ -0,0 +1,102 @@
|
|||||||
|
package cn.iocoder.yudao.module.erp.service.product;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.common.enums.CodeTypeEnum;
|
||||||
|
import cn.iocoder.yudao.module.common.enums.QrcodeBizTypeEnum;
|
||||||
|
import cn.iocoder.yudao.module.common.service.qrcordrecord.QrcodeRecordService;
|
||||||
|
import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil;
|
||||||
|
import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ProductSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductCategoryDO;
|
||||||
|
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
|
||||||
|
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO;
|
||||||
|
import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductCategoryMapper;
|
||||||
|
import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductMapper;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
|
import org.mockito.InjectMocks;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link ErpProductServiceImpl} 的单元测试类
|
||||||
|
*/
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
class ErpProductServiceImplTest {
|
||||||
|
|
||||||
|
@InjectMocks
|
||||||
|
private ErpProductServiceImpl productService;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private ErpProductMapper productMapper;
|
||||||
|
@Mock
|
||||||
|
private ErpProductCategoryMapper productCategoryMapper;
|
||||||
|
@Mock
|
||||||
|
private ErpProductUnitService productUnitService;
|
||||||
|
@Mock
|
||||||
|
private QrcodeRecordService qrcodeService;
|
||||||
|
@Mock
|
||||||
|
private AutoCodeUtil autoCodeUtil;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void createProduct_whenBitSampleAndNoCode_generatesSampleCodeAndStoresMetadata() throws Exception {
|
||||||
|
ProductSaveReqVO reqVO = new ProductSaveReqVO();
|
||||||
|
reqVO.setName("BIT 样品");
|
||||||
|
reqVO.setBarCode(null);
|
||||||
|
reqVO.setIsSample(true);
|
||||||
|
reqVO.setSampleCategory("CUSTOMER_SAMPLE");
|
||||||
|
reqVO.setBizUnit("BIT");
|
||||||
|
reqVO.setCustomerId(1001L);
|
||||||
|
reqVO.setCustomerName("ACME HK");
|
||||||
|
reqVO.setCategoryId(10L);
|
||||||
|
reqVO.setUnitId(20L);
|
||||||
|
reqVO.setStatus(0);
|
||||||
|
reqVO.setStandard("STD-1");
|
||||||
|
|
||||||
|
ErpProductUnitDO unit = new ErpProductUnitDO();
|
||||||
|
unit.setId(20L);
|
||||||
|
unit.setName("PCS");
|
||||||
|
when(productUnitService.getProductUnit(20L)).thenReturn(unit);
|
||||||
|
|
||||||
|
ErpProductCategoryDO category = new ErpProductCategoryDO();
|
||||||
|
category.setId(10L);
|
||||||
|
category.setName("测试分类");
|
||||||
|
category.setCode("CAT");
|
||||||
|
when(productCategoryMapper.selectById(10L)).thenReturn(category);
|
||||||
|
|
||||||
|
when(productMapper.selectProductExist(any(ErpProductDO.class))).thenReturn(false);
|
||||||
|
when(autoCodeUtil.genSerialCode("BIT_SAMPLE_CODE", null)).thenReturn("SP202606220001");
|
||||||
|
when(autoCodeUtil.queryCodeType("BIT_SAMPLE_CODE")).thenReturn(CodeTypeEnum.QR);
|
||||||
|
when(productMapper.insert(any(ErpProductDO.class))).thenAnswer(invocation -> {
|
||||||
|
ErpProductDO product = invocation.getArgument(0);
|
||||||
|
product.setId(100L);
|
||||||
|
return 1;
|
||||||
|
});
|
||||||
|
|
||||||
|
Long id = productService.createProduct(reqVO);
|
||||||
|
|
||||||
|
assertEquals(100L, id);
|
||||||
|
ArgumentCaptor<ErpProductDO> productCaptor = ArgumentCaptor.forClass(ErpProductDO.class);
|
||||||
|
verify(productMapper).insert(productCaptor.capture());
|
||||||
|
ErpProductDO product = productCaptor.getValue();
|
||||||
|
assertTrue(product.getIsSample());
|
||||||
|
assertEquals("CUSTOMER_SAMPLE", product.getSampleCategory());
|
||||||
|
assertEquals("BIT", product.getBizUnit());
|
||||||
|
assertEquals(1001L, product.getCustomerId());
|
||||||
|
assertEquals("ACME HK", product.getCustomerName());
|
||||||
|
assertEquals("SP202606220001", product.getBarCode());
|
||||||
|
|
||||||
|
verify(qrcodeService).generateOrRefresh(
|
||||||
|
eq(QrcodeBizTypeEnum.PRODUCT),
|
||||||
|
eq(100L),
|
||||||
|
eq("SP202606220001"),
|
||||||
|
eq("DETAIL"),
|
||||||
|
eq(CodeTypeEnum.QR));
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue