package cn.iocoder.yudao.module.mdm.service.item;
|
|
import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemImportExcelVO;
|
import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemImportRespVO;
|
import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemSaveReqVO;
|
import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemDO;
|
import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO;
|
import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemMapper;
|
import cn.iocoder.yudao.module.mdm.dal.mysql.unit.MdmUnitMeasureMapper;
|
import cn.iocoder.yudao.module.mes.api.item.MesMdItemTypeApi;
|
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 static org.junit.jupiter.api.Assertions.*;
|
import static org.mockito.Mockito.when;
|
|
@ExtendWith(MockitoExtension.class)
|
class MdmItemImportParsingTest {
|
|
@Mock private MdmItemMapper itemMapper;
|
@Mock private MdmUnitMeasureMapper unitMeasureMapper;
|
@Mock private MesMdItemTypeApi mesMdItemTypeApi;
|
@InjectMocks private MdmItemServiceImpl service;
|
|
@Test
|
void emptyCodeOrNameFails() {
|
MdmItemRowResolution resolution = service.resolveImportRow(
|
MdmItemImportExcelVO.builder().name("物料A").build(), emptyContext());
|
assertFalse(resolution.isSuccess());
|
assertEquals("物料编码和物料名称不能为空", resolution.failureMessage());
|
}
|
|
@Test
|
void missingCategoryFails() {
|
MdmItemRowResolution resolution = service.resolveImportRow(
|
MdmItemImportExcelVO.builder().code("A1").name("物料A").categoryCode("NOPE").build(),
|
emptyContext());
|
assertFalse(resolution.isSuccess());
|
assertEquals("物料分类编码不存在:NOPE", resolution.failureMessage());
|
}
|
|
@Test
|
void missingUnitFails() {
|
MdmItemRowResolution resolution = service.resolveImportRow(
|
MdmItemImportExcelVO.builder().code("A1").name("物料A").unitMeasureCode("NOPE").build(),
|
emptyContext());
|
assertFalse(resolution.isSuccess());
|
assertEquals("计量单位编码不存在:NOPE", resolution.failureMessage());
|
}
|
|
@Test
|
void successBuildsSaveReqVO() {
|
MdmItemImportContext context = new MdmItemImportContext(
|
Map.of("RAW", 11L), Map.of("RAW", "原料"),
|
Map.of("PCS", 22L), Map.of("PCS", "个"));
|
MdmItemRowResolution resolution = service.resolveImportRow(
|
MdmItemImportExcelVO.builder().code("A1").name("物料A")
|
.categoryCode("RAW").unitMeasureCode("PCS").build(), context);
|
assertTrue(resolution.isSuccess());
|
MdmItemSaveReqVO reqVO = resolution.saveReqVO();
|
assertEquals("A1", reqVO.getCode());
|
assertEquals(11L, reqVO.getCategoryId());
|
assertEquals(22L, reqVO.getUnitMeasureId());
|
assertEquals(1, reqVO.getItemType());
|
assertFalse(reqVO.getSyncMes());
|
}
|
|
@Test
|
void existingCodeStillReportsSameMessage() {
|
when(unitMeasureMapper.selectList()).thenReturn(List.of());
|
when(itemMapper.selectByCode("A1")).thenReturn(new MdmItemDO());
|
|
MdmItemImportRespVO respVO = service.importItemList(List.of(
|
MdmItemImportExcelVO.builder().code("A1").name("物料A").build()), false);
|
|
assertEquals(Map.of("A1 物料A", "物料编码已存在"), respVO.getFailureList());
|
assertTrue(respVO.getCreateList().isEmpty());
|
}
|
|
private static MdmItemImportContext emptyContext() {
|
return new MdmItemImportContext(Map.of(), Map.of(), Map.of(), Map.of());
|
}
|
}
|