fix(测试跟踪): 修复测试用例导入重复检验,不同模块下不能创建相同用例
--bug=1027307 --user=陈建星 【测试跟踪】github#25101,测试跟踪,excel用例导入新建,存在同名用例,导如800条 用例提示重复只导入了500条。 https://www.tapd.cn/55049933/s/1385238
This commit is contained in:
parent
cf885b8e76
commit
89e018d935
|
@ -274,7 +274,6 @@ public class NodeTreeService<T extends TreeNodeDTO> {
|
|||
createNodeByPathIterator(pathIterator, path + "/" + child.getName(),
|
||||
child, pathMap, projectId, level + 1);
|
||||
}
|
||||
;
|
||||
}
|
||||
|
||||
//若子节点中不包含该目标节点,则在该节点下创建
|
||||
|
|
|
@ -14,6 +14,7 @@ import io.metersphere.commons.utils.JSON;
|
|||
import io.metersphere.commons.utils.LogUtil;
|
||||
import io.metersphere.dto.CustomFieldDao;
|
||||
import io.metersphere.dto.CustomFieldResourceDTO;
|
||||
import io.metersphere.dto.TestCaseNodeDTO;
|
||||
import io.metersphere.excel.annotation.NotRequired;
|
||||
import io.metersphere.excel.constants.TestCaseImportFiled;
|
||||
import io.metersphere.excel.domain.ExcelErrData;
|
||||
|
@ -25,6 +26,7 @@ import io.metersphere.excel.utils.ExcelValidateHelper;
|
|||
import io.metersphere.exception.CustomFieldValidateException;
|
||||
import io.metersphere.i18n.Translator;
|
||||
import io.metersphere.request.testcase.TestCaseImportRequest;
|
||||
import io.metersphere.service.TestCaseNodeService;
|
||||
import io.metersphere.service.TestCaseService;
|
||||
import io.metersphere.validate.AbstractCustomFieldValidator;
|
||||
import io.metersphere.validate.CustomFieldValidatorFactory;
|
||||
|
@ -62,6 +64,8 @@ public class TestCaseNoModelDataListener extends AnalysisEventListener<Map<Integ
|
|||
|
||||
private TestCaseService testCaseService;
|
||||
|
||||
private TestCaseNodeService testCaseNodeService;
|
||||
|
||||
protected List<TestCaseExcelData> updateList = new ArrayList<>(); //存储待更新用例的集合
|
||||
|
||||
protected List<TestCaseExcelData> list = new ArrayList<>();
|
||||
|
@ -104,6 +108,8 @@ public class TestCaseNoModelDataListener extends AnalysisEventListener<Map<Integ
|
|||
private HashMap<String, AbstractCustomFieldValidator> customFieldValidatorMap;
|
||||
|
||||
private Map<String, List<CustomFieldResourceDTO>> testCaseCustomFieldMap = new HashMap<>();
|
||||
private Map<String, String> pathMap = new HashMap<>();
|
||||
private List<TestCaseNodeDTO> nodeTrees;
|
||||
|
||||
public boolean isUpdated() {
|
||||
return isUpdated;
|
||||
|
@ -113,6 +119,7 @@ public class TestCaseNoModelDataListener extends AnalysisEventListener<Map<Integ
|
|||
this.mergeInfoSet = mergeInfoSet;
|
||||
this.excelDataClass = c;
|
||||
this.testCaseService = CommonBeanFactory.getBean(TestCaseService.class);
|
||||
this.testCaseNodeService = CommonBeanFactory.getBean(TestCaseNodeService.class);
|
||||
customIds = new HashSet<>();
|
||||
|
||||
this.request = request;
|
||||
|
@ -123,6 +130,8 @@ public class TestCaseNoModelDataListener extends AnalysisEventListener<Map<Integ
|
|||
if (CollectionUtils.isNotEmpty(customFields)) {
|
||||
customFieldsMap = customFields.stream().collect(Collectors.toMap(CustomFieldDao::getName, i -> i));
|
||||
}
|
||||
|
||||
nodeTrees = testCaseNodeService.getNodeTreeByProjectId(request.getProjectId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -304,6 +313,10 @@ public class TestCaseNoModelDataListener extends AnalysisEventListener<Map<Integ
|
|||
String steps = getSteps(data);
|
||||
testCase.setSteps(steps);
|
||||
|
||||
// 校验模块是否存在,没有存在则新建一个模块
|
||||
testCaseNodeService.createNodeByNodePath(testCase.getNodePath(), request.getProjectId(), nodeTrees, pathMap);
|
||||
testCase.setNodeId(pathMap.get(testCase.getNodePath()));
|
||||
|
||||
boolean dbExist = testCaseService.exist(testCase);
|
||||
boolean excelExist = false;
|
||||
|
||||
|
@ -535,7 +548,7 @@ public class TestCaseNoModelDataListener extends AnalysisEventListener<Map<Integ
|
|||
List<TestCaseWithBLOBs> result = list.stream()
|
||||
.map(item -> this.convert2TestCase(item))
|
||||
.collect(Collectors.toList());
|
||||
testCaseService.saveImportData(result, request, testCaseCustomFieldMap);
|
||||
testCaseService.saveImportData(result, request, testCaseCustomFieldMap, pathMap);
|
||||
this.names = result.stream().map(TestCase::getName).collect(Collectors.toList());
|
||||
this.ids = result.stream().map(TestCase::getId).collect(Collectors.toList());
|
||||
this.isUpdated = true;
|
||||
|
|
|
@ -438,6 +438,35 @@ public class TestCaseNodeService extends NodeTreeService<TestCaseNodeDTO> {
|
|||
|
||||
}
|
||||
|
||||
public void createNodeByNodePath(String nodePath, String projectId, List<TestCaseNodeDTO> nodeTrees, Map<String, String> pathMap) {
|
||||
if (nodePath == null) {
|
||||
throw new ExcelException(Translator.get("test_case_module_not_null"));
|
||||
}
|
||||
List<String> nodeNameList = new ArrayList<>(Arrays.asList(nodePath.split("/")));
|
||||
Iterator<String> itemIterator = nodeNameList.iterator();
|
||||
Boolean hasNode = false;
|
||||
String rootNodeName;
|
||||
|
||||
if (nodeNameList.size() <= 1) {
|
||||
throw new ExcelException(Translator.get("test_case_create_module_fail") + ":" + nodePath);
|
||||
} else {
|
||||
itemIterator.next();
|
||||
itemIterator.remove();
|
||||
rootNodeName = itemIterator.next().trim();
|
||||
//原来没有,新建的树nodeTrees也不包含
|
||||
for (TestCaseNodeDTO nodeTree : nodeTrees) {
|
||||
if (StringUtils.equals(rootNodeName, nodeTree.getName())) {
|
||||
hasNode = true;
|
||||
createNodeByPathIterator(itemIterator, "/" + rootNodeName, nodeTree,
|
||||
pathMap, projectId, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!hasNode) {
|
||||
createNodeByPath(itemIterator, rootNodeName, null, projectId, 1, StringUtils.EMPTY, pathMap);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String insertNode(String nodeName, String pId, String projectId, Integer level, String path) {
|
||||
TestCaseNode testCaseNode = new TestCaseNode();
|
||||
|
|
|
@ -1256,8 +1256,15 @@ public class TestCaseService {
|
|||
|
||||
public void saveImportData(List<TestCaseWithBLOBs> testCases, TestCaseImportRequest request,
|
||||
Map<String, List<CustomFieldResourceDTO>> testCaseCustomFieldMap) {
|
||||
saveImportData( testCases, request, testCaseCustomFieldMap, null);
|
||||
}
|
||||
|
||||
public void saveImportData(List<TestCaseWithBLOBs> testCases, TestCaseImportRequest request,
|
||||
Map<String, List<CustomFieldResourceDTO>> testCaseCustomFieldMap, Map<String, String> nodePathMap) {
|
||||
String projectId = request.getProjectId();
|
||||
Map<String, String> nodePathMap = testCaseNodeService.createNodeByTestCases(testCases, projectId);
|
||||
if (nodePathMap == null) {
|
||||
nodePathMap = testCaseNodeService.createNodeByTestCases(testCases, projectId);
|
||||
}
|
||||
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
|
||||
Project project = baseProjectService.getProjectById(projectId);
|
||||
TestCaseMapper mapper = sqlSession.getMapper(TestCaseMapper.class);
|
||||
|
|
Loading…
Reference in New Issue