fix(接口自动化): 修复场景引用步骤导出再导入缺陷

This commit is contained in:
fit2-zhao 2021-07-09 16:12:32 +08:00 committed by fit2-zhao
parent 1298a61a42
commit f6bc6f6e0d
2 changed files with 64 additions and 3 deletions

View File

@ -306,7 +306,7 @@ public class ApiAutomationService {
.andIdNotEqualTo(request.getId());
List<ApiScenario> list = apiScenarioMapper.selectByExample(example);
if (CollectionUtils.isNotEmpty(list)) {
MSException.throwException("自定义ID "+ request.getCustomNum() +" 已存在!");
MSException.throwException("自定义ID " + request.getCustomNum() + " 已存在!");
}
}
@ -1755,12 +1755,64 @@ public class ApiAutomationService {
return apiImport;
}
private void setHashTree(JSONArray hashTree) {
// 将引用转成复制
if (CollectionUtils.isNotEmpty(hashTree)) {
for (int i = 0; i < hashTree.size(); i++) {
JSONObject object = (JSONObject) hashTree.get(i);
String referenced = object.getString("referenced");
if (StringUtils.isNotBlank(referenced) && StringUtils.equals(referenced, "REF")) {
// 检测引用对象是否存在若果不存在则改成复制对象
String refType = object.getString("refType");
if (StringUtils.isNotEmpty(refType)) {
if (refType.equals("CASE")) {
ApiTestCaseWithBLOBs bloBs = apiTestCaseService.get(object.getString("id"));
if (bloBs != null) {
object = JSON.parseObject(bloBs.getRequest());
object.put("id", bloBs.getId());
object.put("name", bloBs.getName());
hashTree.set(i, object);
}
} else {
ApiScenarioWithBLOBs bloBs = this.getDto(object.getString("id"));
if (bloBs != null) {
object = JSON.parseObject(bloBs.getScenarioDefinition());
hashTree.set(i, object);
}
}
} else if ("scenario".equals(object.getString("type"))) {
ApiScenarioWithBLOBs bloBs = this.getDto(object.getString("id"));
if (bloBs != null) {
object = JSON.parseObject(bloBs.getScenarioDefinition());
hashTree.set(i, object);
}
}
}
if (CollectionUtils.isNotEmpty(object.getJSONArray("hashTree"))) {
setHashTree(object.getJSONArray("hashTree"));
}
}
}
}
private List<ApiScenarioWithBLOBs> getExportResult(ApiScenarioBatchRequest request) {
ServiceUtils.getSelectAllIds(request, request.getCondition(),
(query) -> extApiScenarioMapper.selectIdsByQuery((ApiScenarioRequest) query));
ApiScenarioExample example = new ApiScenarioExample();
example.createCriteria().andIdIn(request.getIds());
List<ApiScenarioWithBLOBs> apiScenarioWithBLOBs = apiScenarioMapper.selectByExampleWithBLOBs(example);
// 处理引用数据
if (CollectionUtils.isNotEmpty(apiScenarioWithBLOBs)) {
apiScenarioWithBLOBs.forEach(item -> {
if (StringUtils.isNotEmpty(item.getScenarioDefinition())) {
JSONObject scenario = JSONObject.parseObject(item.getScenarioDefinition());
JSONArray hashTree = scenario.getJSONArray("hashTree");
setHashTree(hashTree);
scenario.put("hashTree", hashTree);
item.setScenarioDefinition(JSON.toJSONString(scenario));
}
});
}
return apiScenarioWithBLOBs;
}

View File

@ -18,7 +18,7 @@
<el-tag size="mini" class="ms-tag" v-if="request.referenced==='Deleted'" type="danger">{{ $t('api_test.automation.reference_deleted') }}</el-tag>
<el-tag size="mini" class="ms-tag" v-if="request.referenced==='Copy'">{{ $t('commons.copy') }}</el-tag>
<el-tag size="mini" class="ms-tag" v-if="request.referenced ==='REF'">{{ $t('api_test.scenario.reference') }}</el-tag>
<span class="ms-tag">{{ getProjectName(request.projectId) }}</span>
<span class="ms-tag ms-step-name-api">{{ getProjectName(request.projectId) }}</span>
</template>
<template v-slot:button>
@ -447,7 +447,16 @@ export default {
margin: 20px;
float: right;
}
.ms-step-name-api {
display: inline-block;
margin: 0 5px;
overflow-x: hidden;
padding-bottom: 0;
text-overflow: ellipsis;
vertical-align: middle;
white-space: nowrap;
width: 60px;
}
.ms-tag {
margin-left: 20px;
}