fix(接口测试): 接口定义root节点模块导致导出数据为空问题
--bug=1043951 --user=王旭 【接口测试】接口定义-选中未规划模块导出接口文件内容为空 https://www.tapd.cn/55049933/s/1548295
This commit is contained in:
parent
1609701cb1
commit
46fcef3d72
|
@ -76,6 +76,4 @@ public class ApiDefinitionWithBlob extends ApiDefinitionBlob {
|
||||||
@Schema(description = "删除状态", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "删除状态", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
private Boolean deleted;
|
private Boolean deleted;
|
||||||
|
|
||||||
@Schema(description = "模块名称")
|
|
||||||
private String moduleName;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -644,12 +644,10 @@
|
||||||
SELECT
|
SELECT
|
||||||
api_definition.*,
|
api_definition.*,
|
||||||
api_definition_blob.request,
|
api_definition_blob.request,
|
||||||
api_definition_blob.response,
|
api_definition_blob.response
|
||||||
api_definition_module.name as moduleName
|
|
||||||
FROM
|
FROM
|
||||||
api_definition
|
api_definition
|
||||||
INNER JOIN api_definition_blob ON api_definition.id = api_definition_blob.id
|
INNER JOIN api_definition_blob ON api_definition.id = api_definition_blob.id
|
||||||
inner join api_definition_module on api_definition.module_id = api_definition_module.id
|
|
||||||
where api_definition.id in
|
where api_definition.id in
|
||||||
<foreach collection="ids" item="id" separator="," open="(" close=")">
|
<foreach collection="ids" item="id" separator="," open="(" close=")">
|
||||||
#{id}
|
#{id}
|
||||||
|
|
|
@ -4,7 +4,8 @@ import io.metersphere.api.dto.definition.ApiDefinitionWithBlob;
|
||||||
import io.metersphere.project.domain.Project;
|
import io.metersphere.project.domain.Project;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public interface ExportParser<T> {
|
public interface ExportParser<T> {
|
||||||
T parse(List<ApiDefinitionWithBlob> list, Project project) throws Exception;
|
T parse(List<ApiDefinitionWithBlob> list, Project project, Map<String, String> moduleMap) throws Exception;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,9 @@ import io.metersphere.api.utils.JSONUtil;
|
||||||
import io.metersphere.api.utils.XMLUtil;
|
import io.metersphere.api.utils.XMLUtil;
|
||||||
import io.metersphere.project.constants.PropertyConstant;
|
import io.metersphere.project.constants.PropertyConstant;
|
||||||
import io.metersphere.project.domain.Project;
|
import io.metersphere.project.domain.Project;
|
||||||
|
import io.metersphere.sdk.constants.ModuleConstants;
|
||||||
import io.metersphere.sdk.util.JSON;
|
import io.metersphere.sdk.util.JSON;
|
||||||
|
import io.metersphere.sdk.util.Translator;
|
||||||
import io.swagger.v3.oas.models.responses.ApiResponse;
|
import io.swagger.v3.oas.models.responses.ApiResponse;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
@ -23,7 +25,7 @@ public class Swagger3ExportParser implements ExportParser<ApiExportResponse> {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiExportResponse parse(List<ApiDefinitionWithBlob> list, Project project) throws Exception {
|
public ApiExportResponse parse(List<ApiDefinitionWithBlob> list, Project project, Map<String, String> moduleMap) throws Exception {
|
||||||
SwaggerApiExportResponse response = new SwaggerApiExportResponse();
|
SwaggerApiExportResponse response = new SwaggerApiExportResponse();
|
||||||
//openapi
|
//openapi
|
||||||
response.setOpenapi("3.0.2");
|
response.setOpenapi("3.0.2");
|
||||||
|
@ -49,7 +51,13 @@ public class Swagger3ExportParser implements ExportParser<ApiExportResponse> {
|
||||||
for (ApiDefinitionWithBlob apiDefinition : list) {
|
for (ApiDefinitionWithBlob apiDefinition : list) {
|
||||||
SwaggerApiInfo swaggerApiInfo = new SwaggerApiInfo();
|
SwaggerApiInfo swaggerApiInfo = new SwaggerApiInfo();
|
||||||
swaggerApiInfo.setSummary(apiDefinition.getName());
|
swaggerApiInfo.setSummary(apiDefinition.getName());
|
||||||
swaggerApiInfo.setTags(Arrays.asList(apiDefinition.getModuleName()));
|
String moduleName = "";
|
||||||
|
if (StringUtils.equals(apiDefinition.getModuleId(), ModuleConstants.DEFAULT_NODE_ID)) {
|
||||||
|
moduleName = Translator.get("api_unplanned_request");
|
||||||
|
} else {
|
||||||
|
moduleName = moduleMap.get(apiDefinition.getModuleId());
|
||||||
|
}
|
||||||
|
swaggerApiInfo.setTags(Arrays.asList(moduleName));
|
||||||
//请求体
|
//请求体
|
||||||
JSONObject requestObject = JSONUtil.parseObject(new String(apiDefinition.getRequest() == null ? new byte[0] : apiDefinition.getRequest(), StandardCharsets.UTF_8));
|
JSONObject requestObject = JSONUtil.parseObject(new String(apiDefinition.getRequest() == null ? new byte[0] : apiDefinition.getRequest(), StandardCharsets.UTF_8));
|
||||||
JSONObject requestBody = buildRequestBody(requestObject, schemas);
|
JSONObject requestBody = buildRequestBody(requestObject, schemas);
|
||||||
|
|
|
@ -1,17 +1,23 @@
|
||||||
package io.metersphere.api.service.definition;
|
package io.metersphere.api.service.definition;
|
||||||
|
|
||||||
|
import io.metersphere.api.domain.ApiDefinitionModule;
|
||||||
|
import io.metersphere.api.domain.ApiDefinitionModuleExample;
|
||||||
import io.metersphere.api.dto.definition.ApiDefinitionBatchRequest;
|
import io.metersphere.api.dto.definition.ApiDefinitionBatchRequest;
|
||||||
import io.metersphere.api.dto.definition.ApiDefinitionWithBlob;
|
import io.metersphere.api.dto.definition.ApiDefinitionWithBlob;
|
||||||
import io.metersphere.api.dto.export.ApiExportResponse;
|
import io.metersphere.api.dto.export.ApiExportResponse;
|
||||||
|
import io.metersphere.api.mapper.ApiDefinitionModuleMapper;
|
||||||
import io.metersphere.api.mapper.ExtApiDefinitionMapper;
|
import io.metersphere.api.mapper.ExtApiDefinitionMapper;
|
||||||
import io.metersphere.api.parser.api.Swagger3ExportParser;
|
import io.metersphere.api.parser.api.Swagger3ExportParser;
|
||||||
import io.metersphere.project.domain.Project;
|
import io.metersphere.project.domain.Project;
|
||||||
import io.metersphere.project.mapper.ProjectMapper;
|
import io.metersphere.project.mapper.ProjectMapper;
|
||||||
import io.metersphere.sdk.exception.MSException;
|
import io.metersphere.sdk.exception.MSException;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,25 +31,35 @@ public class ApiDefinitionExportService {
|
||||||
@Resource
|
@Resource
|
||||||
private ExtApiDefinitionMapper extApiDefinitionMapper;
|
private ExtApiDefinitionMapper extApiDefinitionMapper;
|
||||||
@Resource
|
@Resource
|
||||||
|
private ApiDefinitionModuleMapper apiDefinitionModuleMapper;
|
||||||
|
@Resource
|
||||||
private ProjectMapper projectMapper;
|
private ProjectMapper projectMapper;
|
||||||
|
|
||||||
public ApiExportResponse export(ApiDefinitionBatchRequest request, String type, String userId) {
|
public ApiExportResponse export(ApiDefinitionBatchRequest request, String type, String userId) {
|
||||||
List<String> ids = apiDefinitionService.getBatchApiIds(request, request.getProjectId(), request.getProtocols(), false, userId);
|
List<String> ids = apiDefinitionService.getBatchApiIds(request, request.getProjectId(), request.getProtocols(), false, userId);
|
||||||
|
if (CollectionUtils.isEmpty(ids)) {
|
||||||
|
return new ApiExportResponse();
|
||||||
|
}
|
||||||
List<ApiDefinitionWithBlob> list = extApiDefinitionMapper.selectApiDefinitionWithBlob(ids);
|
List<ApiDefinitionWithBlob> list = extApiDefinitionMapper.selectApiDefinitionWithBlob(ids);
|
||||||
|
List<String> moduleIds = list.stream().map(ApiDefinitionWithBlob::getModuleId).toList();
|
||||||
|
ApiDefinitionModuleExample example = new ApiDefinitionModuleExample();
|
||||||
|
example.createCriteria().andIdIn(moduleIds);
|
||||||
|
List<ApiDefinitionModule> definitionModules = apiDefinitionModuleMapper.selectByExample(example);
|
||||||
|
Map<String, String> moduleMap = definitionModules.stream().collect(Collectors.toMap(ApiDefinitionModule::getId, ApiDefinitionModule::getName));
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case "swagger":
|
case "swagger":
|
||||||
return exportSwagger(request, list);
|
return exportSwagger(request, list, moduleMap);
|
||||||
default:
|
default:
|
||||||
return new ApiExportResponse();
|
return new ApiExportResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ApiExportResponse exportSwagger(ApiDefinitionBatchRequest request, List<ApiDefinitionWithBlob> list) {
|
private ApiExportResponse exportSwagger(ApiDefinitionBatchRequest request, List<ApiDefinitionWithBlob> list, Map<String, String> moduleMap) {
|
||||||
Project project = projectMapper.selectByPrimaryKey(request.getProjectId());
|
Project project = projectMapper.selectByPrimaryKey(request.getProjectId());
|
||||||
Swagger3ExportParser swagger3Parser = new Swagger3ExportParser();
|
Swagger3ExportParser swagger3Parser = new Swagger3ExportParser();
|
||||||
try {
|
try {
|
||||||
return swagger3Parser.parse(list, project);
|
return swagger3Parser.parse(list, project, moduleMap);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new MSException(e);
|
throw new MSException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1886,14 +1886,10 @@ public class ApiDefinitionControllerTests extends BaseTest {
|
||||||
request.setProjectId(DEFAULT_PROJECT_ID);
|
request.setProjectId(DEFAULT_PROJECT_ID);
|
||||||
request.setProtocols(List.of("HTTP"));
|
request.setProtocols(List.of("HTTP"));
|
||||||
request.setSelectAll(false);
|
request.setSelectAll(false);
|
||||||
|
request.setSelectIds(List.of("1002"));
|
||||||
|
this.requestPost(EXPORT + "swagger", request);
|
||||||
request.setSelectIds(List.of("1001"));
|
request.setSelectIds(List.of("1001"));
|
||||||
MvcResult mvcResult = this.requestPostWithOkAndReturn(EXPORT + "swagger", request);
|
this.requestPost(EXPORT + "swagger", request);
|
||||||
String returnData = mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8);
|
|
||||||
ResultHolder resultHolder = JSON.parseObject(returnData, ResultHolder.class);
|
|
||||||
// 返回请求正常
|
|
||||||
Assertions.assertNotNull(resultHolder);
|
|
||||||
Pager<?> pageData = JSON.parseObject(JSON.toJSONString(resultHolder.getData()), Pager.class);
|
|
||||||
Assertions.assertNotNull(pageData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue