feat(接口测试): 接口管理模块接口定义接口文档查看
This commit is contained in:
parent
359d03662d
commit
6a1e0f8576
|
@ -3,8 +3,6 @@ package io.metersphere.api.dto.definition;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author lan
|
* @author lan
|
||||||
*/
|
*/
|
||||||
|
@ -18,6 +16,6 @@ public class ApiDefinitionDocDTO{
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
@Schema(description = "接口文档内容")
|
@Schema(description = "接口文档内容")
|
||||||
List<ApiDefinitionDTO> docList;
|
ApiDefinitionDTO docInfo;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package io.metersphere.api.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: LAN
|
||||||
|
* @date: 2023/11/16 10:42
|
||||||
|
* @version: 1.0
|
||||||
|
*/
|
||||||
|
public enum ApiDefinitionDocType {
|
||||||
|
ALL, MODULE, API
|
||||||
|
}
|
|
@ -364,8 +364,8 @@ public class ApiDefinitionLogService {
|
||||||
if(null != apiDefinition){
|
if(null != apiDefinition){
|
||||||
// 2. 使用Optional避免空指针异常
|
// 2. 使用Optional避免空指针异常
|
||||||
apiDefinitionService.handleBlob(id, apiDefinitionDTO);
|
apiDefinitionService.handleBlob(id, apiDefinitionDTO);
|
||||||
}
|
|
||||||
BeanUtils.copyBean(apiDefinitionDTO, apiDefinition);
|
BeanUtils.copyBean(apiDefinitionDTO, apiDefinition);
|
||||||
|
}
|
||||||
return apiDefinitionDTO;
|
return apiDefinitionDTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import io.metersphere.api.controller.result.ApiResultCode;
|
||||||
import io.metersphere.api.domain.*;
|
import io.metersphere.api.domain.*;
|
||||||
import io.metersphere.api.dto.debug.ApiFileResourceUpdateRequest;
|
import io.metersphere.api.dto.debug.ApiFileResourceUpdateRequest;
|
||||||
import io.metersphere.api.dto.definition.*;
|
import io.metersphere.api.dto.definition.*;
|
||||||
|
import io.metersphere.api.enums.ApiDefinitionDocType;
|
||||||
import io.metersphere.api.enums.ApiReportStatus;
|
import io.metersphere.api.enums.ApiReportStatus;
|
||||||
import io.metersphere.api.mapper.*;
|
import io.metersphere.api.mapper.*;
|
||||||
import io.metersphere.api.service.ApiFileResourceService;
|
import io.metersphere.api.service.ApiFileResourceService;
|
||||||
|
@ -671,29 +672,30 @@ public class ApiDefinitionService {
|
||||||
ApiDefinitionDocDTO apiDefinitionDocDTO = new ApiDefinitionDocDTO();
|
ApiDefinitionDocDTO apiDefinitionDocDTO = new ApiDefinitionDocDTO();
|
||||||
apiDefinitionDocDTO.setType(request.getType());
|
apiDefinitionDocDTO.setType(request.getType());
|
||||||
// @@TODO 下载所有/一个模块接口文档时,不做分页数据量大的时候会不会有性能问题
|
// @@TODO 下载所有/一个模块接口文档时,不做分页数据量大的时候会不会有性能问题
|
||||||
if ("ALL".equals(request.getType()) || "MODULE".equals(request.getType())) {
|
if (ApiDefinitionDocType.ALL.name().equals(request.getType()) || ApiDefinitionDocType.MODULE.name().equals(request.getType())) {
|
||||||
List<ApiDefinitionDTO> list = extApiDefinitionMapper.listDoc(request);
|
List<ApiDefinitionDTO> list = extApiDefinitionMapper.listDoc(request);
|
||||||
if(null != list){
|
if (!list.isEmpty()) {
|
||||||
list.forEach(item-> handleBlob(item.getId(), item));
|
ApiDefinitionDTO first = list.get(0);
|
||||||
apiDefinitionDocDTO.setDocTitle("ALL".equals(request.getType()) ? Translator.get(ALL_API) : getModuleTitle(list));
|
handleBlob(first.getId(), first);
|
||||||
apiDefinitionDocDTO.setDocList(list);
|
if(ApiDefinitionDocType.ALL.name().equals(request.getType())){
|
||||||
|
apiDefinitionDocDTO.setDocTitle(Translator.get(ALL_API));
|
||||||
|
} else {
|
||||||
|
ApiDefinitionModule apiDefinitionModule = apiDefinitionModuleMapper.selectByPrimaryKey(first.getModuleId());
|
||||||
|
if (StringUtils.isNotBlank(apiDefinitionModule.getName())) {
|
||||||
|
apiDefinitionDocDTO.setDocTitle(apiDefinitionModule.getName());
|
||||||
|
} else {
|
||||||
|
throw new MSException(API_DEFINITION_MODULE_NOT_EXIST);
|
||||||
}
|
}
|
||||||
} else if ("API".equals(request.getType())) {
|
}
|
||||||
|
apiDefinitionDocDTO.setDocInfo(first);
|
||||||
|
}
|
||||||
|
} else if (ApiDefinitionDocType.API.name().equals(request.getType())) {
|
||||||
ApiDefinitionDTO apiDefinitionDTO = get(request.getApiId(), userId);
|
ApiDefinitionDTO apiDefinitionDTO = get(request.getApiId(), userId);
|
||||||
apiDefinitionDocDTO.setDocTitle(apiDefinitionDTO.getName());
|
apiDefinitionDocDTO.setDocTitle(apiDefinitionDTO.getName());
|
||||||
apiDefinitionDocDTO.setDocList(Collections.singletonList(apiDefinitionDTO));
|
apiDefinitionDocDTO.setDocInfo(apiDefinitionDTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
return apiDefinitionDocDTO;
|
return apiDefinitionDocDTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getModuleTitle(List<ApiDefinitionDTO> list) {
|
|
||||||
ApiDefinitionDTO first = list.stream().findFirst().orElseThrow(() -> new MSException(API_DEFINITION_NOT_EXIST));
|
|
||||||
ApiDefinitionModule apiDefinitionModule = apiDefinitionModuleMapper.selectByPrimaryKey(first.getModuleId());
|
|
||||||
if (StringUtils.isNotBlank(apiDefinitionModule.getName())) {
|
|
||||||
return apiDefinitionModule.getName();
|
|
||||||
} else {
|
|
||||||
throw new MSException(API_DEFINITION_MODULE_NOT_EXIST);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,11 @@ package io.metersphere.api.controller;
|
||||||
import io.metersphere.api.controller.result.ApiResultCode;
|
import io.metersphere.api.controller.result.ApiResultCode;
|
||||||
import io.metersphere.api.domain.*;
|
import io.metersphere.api.domain.*;
|
||||||
import io.metersphere.api.dto.definition.*;
|
import io.metersphere.api.dto.definition.*;
|
||||||
|
import io.metersphere.api.enums.ApiDefinitionDocType;
|
||||||
import io.metersphere.api.enums.ApiDefinitionStatus;
|
import io.metersphere.api.enums.ApiDefinitionStatus;
|
||||||
import io.metersphere.api.mapper.*;
|
import io.metersphere.api.mapper.*;
|
||||||
import io.metersphere.api.service.ApiFileResourceService;
|
import io.metersphere.api.service.ApiFileResourceService;
|
||||||
|
import io.metersphere.sdk.exception.MSException;
|
||||||
import io.metersphere.sdk.util.ApiDataUtils;
|
import io.metersphere.sdk.util.ApiDataUtils;
|
||||||
import io.metersphere.plugin.api.spi.AbstractMsTestElement;
|
import io.metersphere.plugin.api.spi.AbstractMsTestElement;
|
||||||
import io.metersphere.project.dto.filemanagement.FileInfo;
|
import io.metersphere.project.dto.filemanagement.FileInfo;
|
||||||
|
@ -39,6 +41,7 @@ import org.springframework.test.web.servlet.MvcResult;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import static io.metersphere.api.controller.result.ApiResultCode.API_DEFINITION_NOT_EXIST;
|
||||||
import static io.metersphere.system.controller.handler.result.MsHttpResultCode.NOT_FOUND;
|
import static io.metersphere.system.controller.handler.result.MsHttpResultCode.NOT_FOUND;
|
||||||
|
|
||||||
|
|
||||||
|
@ -681,7 +684,7 @@ public class ApiDefinitionControllerTests extends BaseTest {
|
||||||
apiDefinition = apiDefinitionMapper.selectByPrimaryKey("1001");
|
apiDefinition = apiDefinitionMapper.selectByPrimaryKey("1001");
|
||||||
request.setApiId(apiDefinition.getId());
|
request.setApiId(apiDefinition.getId());
|
||||||
request.setProjectId(DEFAULT_PROJECT_ID);
|
request.setProjectId(DEFAULT_PROJECT_ID);
|
||||||
request.setType("API");
|
request.setType(ApiDefinitionDocType.API.name());
|
||||||
// @@请求成功
|
// @@请求成功
|
||||||
MvcResult mvcResult = this.requestPostWithOkAndReturn(DOC, request);
|
MvcResult mvcResult = this.requestPostWithOkAndReturn(DOC, request);
|
||||||
ApiDataUtils.setResolver(MsHTTPElement.class);
|
ApiDataUtils.setResolver(MsHTTPElement.class);
|
||||||
|
@ -695,11 +698,11 @@ public class ApiDefinitionControllerTests extends BaseTest {
|
||||||
copyApiDefinitionDTO.setResponse(ApiDataUtils.parseArray(new String(apiDefinitionBlob.getResponse()), HttpResponse.class));
|
copyApiDefinitionDTO.setResponse(ApiDataUtils.parseArray(new String(apiDefinitionBlob.getResponse()), HttpResponse.class));
|
||||||
}
|
}
|
||||||
copyApiDefinitionDocDTO.setDocTitle(apiDefinition.getName());
|
copyApiDefinitionDocDTO.setDocTitle(apiDefinition.getName());
|
||||||
copyApiDefinitionDocDTO.setType("API");
|
copyApiDefinitionDocDTO.setType(ApiDefinitionDocType.API.name());
|
||||||
copyApiDefinitionDocDTO.setDocList(Collections.singletonList(copyApiDefinitionDTO));
|
copyApiDefinitionDocDTO.setDocInfo(copyApiDefinitionDTO);
|
||||||
Assertions.assertEquals(apiDefinitionDocDTO.getType(), copyApiDefinitionDocDTO.getType());
|
Assertions.assertEquals(apiDefinitionDocDTO.getType(), copyApiDefinitionDocDTO.getType());
|
||||||
Assertions.assertEquals(apiDefinitionDocDTO.getDocTitle(), copyApiDefinitionDocDTO.getDocTitle());
|
Assertions.assertEquals(apiDefinitionDocDTO.getDocTitle(), copyApiDefinitionDocDTO.getDocTitle());
|
||||||
Assertions.assertEquals(apiDefinitionDocDTO.getDocList().size(), copyApiDefinitionDocDTO.getDocList().size());
|
Assertions.assertEquals(apiDefinitionDocDTO.getDocInfo().getId(), copyApiDefinitionDocDTO.getDocInfo().getId());
|
||||||
|
|
||||||
request.setApiId("111");
|
request.setApiId("111");
|
||||||
assertErrorCode(this.requestPost(DOC, request), ApiResultCode.API_DEFINITION_NOT_EXIST);
|
assertErrorCode(this.requestPost(DOC, request), ApiResultCode.API_DEFINITION_NOT_EXIST);
|
||||||
|
@ -707,7 +710,7 @@ public class ApiDefinitionControllerTests extends BaseTest {
|
||||||
// @@模块查看文档
|
// @@模块查看文档
|
||||||
request.setApiId(null);
|
request.setApiId(null);
|
||||||
request.setProjectId(DEFAULT_PROJECT_ID);
|
request.setProjectId(DEFAULT_PROJECT_ID);
|
||||||
request.setType("MODULE");
|
request.setType(ApiDefinitionDocType.MODULE.name());
|
||||||
request.setModuleIds(List.of("10001"));
|
request.setModuleIds(List.of("10001"));
|
||||||
MvcResult mvcResultModule = this.requestPostWithOkAndReturn(DOC, request);
|
MvcResult mvcResultModule = this.requestPostWithOkAndReturn(DOC, request);
|
||||||
ApiDataUtils.setResolver(MsHTTPElement.class);
|
ApiDataUtils.setResolver(MsHTTPElement.class);
|
||||||
|
@ -716,30 +719,29 @@ public class ApiDefinitionControllerTests extends BaseTest {
|
||||||
ApiDefinitionDocDTO copyModuleApiDefinitionDocDTO = new ApiDefinitionDocDTO();
|
ApiDefinitionDocDTO copyModuleApiDefinitionDocDTO = new ApiDefinitionDocDTO();
|
||||||
List<ApiDefinitionDTO> list = extApiDefinitionMapper.listDoc(request);
|
List<ApiDefinitionDTO> list = extApiDefinitionMapper.listDoc(request);
|
||||||
if(null != list){
|
if(null != list){
|
||||||
list.forEach(item-> {
|
ApiDefinitionDTO first = list.stream().findFirst().orElseThrow(() -> new MSException(API_DEFINITION_NOT_EXIST));
|
||||||
ApiDefinitionBlob moduleApiDefinitionBlob = apiDefinitionBlobMapper.selectByPrimaryKey(item.getId());
|
ApiDefinitionBlob moduleApiDefinitionBlob = apiDefinitionBlobMapper.selectByPrimaryKey(first.getId());
|
||||||
if(moduleApiDefinitionBlob != null){
|
if(moduleApiDefinitionBlob != null){
|
||||||
item.setRequest(ApiDataUtils.parseObject(new String(moduleApiDefinitionBlob.getRequest()), AbstractMsTestElement.class));
|
first.setRequest(ApiDataUtils.parseObject(new String(moduleApiDefinitionBlob.getRequest()), AbstractMsTestElement.class));
|
||||||
item.setResponse(ApiDataUtils.parseArray(new String(moduleApiDefinitionBlob.getResponse()), HttpResponse.class));
|
first.setResponse(ApiDataUtils.parseArray(new String(moduleApiDefinitionBlob.getResponse()), HttpResponse.class));
|
||||||
}
|
}
|
||||||
ApiDefinitionModule apiDefinitionModule = apiDefinitionModuleMapper.selectByPrimaryKey(item.getModuleId());
|
ApiDefinitionModule apiDefinitionModule = apiDefinitionModuleMapper.selectByPrimaryKey(first.getModuleId());
|
||||||
if(StringUtils.isBlank(copyModuleApiDefinitionDocDTO.getDocTitle())){
|
if(StringUtils.isBlank(copyModuleApiDefinitionDocDTO.getDocTitle())){
|
||||||
copyModuleApiDefinitionDocDTO.setDocTitle(apiDefinitionModule.getName());
|
copyModuleApiDefinitionDocDTO.setDocTitle(apiDefinitionModule.getName());
|
||||||
}
|
}
|
||||||
});
|
copyModuleApiDefinitionDocDTO.setDocInfo(first);
|
||||||
|
copyModuleApiDefinitionDocDTO.setType(ApiDefinitionDocType.MODULE.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
copyModuleApiDefinitionDocDTO.setType("MODULE");
|
|
||||||
copyModuleApiDefinitionDocDTO.setDocList(list);
|
|
||||||
Assertions.assertEquals(moduleApiDefinitionDocDTO.getType(), copyModuleApiDefinitionDocDTO.getType());
|
Assertions.assertEquals(moduleApiDefinitionDocDTO.getType(), copyModuleApiDefinitionDocDTO.getType());
|
||||||
Assertions.assertEquals(moduleApiDefinitionDocDTO.getDocTitle(), copyModuleApiDefinitionDocDTO.getDocTitle());
|
Assertions.assertEquals(moduleApiDefinitionDocDTO.getDocTitle(), copyModuleApiDefinitionDocDTO.getDocTitle());
|
||||||
Assertions.assertEquals(moduleApiDefinitionDocDTO.getDocList().size(), copyModuleApiDefinitionDocDTO.getDocList().size());
|
Assertions.assertEquals(moduleApiDefinitionDocDTO.getDocInfo().getId(), copyModuleApiDefinitionDocDTO.getDocInfo().getId());
|
||||||
|
|
||||||
// @@查看全部文档
|
// @@查看全部文档
|
||||||
request.setApiId(null);
|
request.setApiId(null);
|
||||||
request.setModuleIds(null);
|
request.setModuleIds(null);
|
||||||
request.setProjectId(DEFAULT_PROJECT_ID);
|
request.setProjectId(DEFAULT_PROJECT_ID);
|
||||||
request.setType("ALL");
|
request.setType(ApiDefinitionDocType.ALL.name());
|
||||||
MvcResult mvcResultAll = this.requestPostWithOkAndReturn(DOC, request);
|
MvcResult mvcResultAll = this.requestPostWithOkAndReturn(DOC, request);
|
||||||
ApiDataUtils.setResolver(MsHTTPElement.class);
|
ApiDataUtils.setResolver(MsHTTPElement.class);
|
||||||
ApiDefinitionDocDTO allApiDefinitionDocDTO = ApiDataUtils.parseObject(JSON.toJSONString(parseResponse(mvcResultAll).get("data")), ApiDefinitionDocDTO.class);
|
ApiDefinitionDocDTO allApiDefinitionDocDTO = ApiDataUtils.parseObject(JSON.toJSONString(parseResponse(mvcResultAll).get("data")), ApiDefinitionDocDTO.class);
|
||||||
|
@ -747,22 +749,22 @@ public class ApiDefinitionControllerTests extends BaseTest {
|
||||||
ApiDefinitionDocDTO copyAllApiDefinitionDocDTO = new ApiDefinitionDocDTO();
|
ApiDefinitionDocDTO copyAllApiDefinitionDocDTO = new ApiDefinitionDocDTO();
|
||||||
List<ApiDefinitionDTO> allList = extApiDefinitionMapper.listDoc(request);
|
List<ApiDefinitionDTO> allList = extApiDefinitionMapper.listDoc(request);
|
||||||
if(null != allList){
|
if(null != allList){
|
||||||
allList.forEach(item-> {
|
ApiDefinitionDTO info = allList.stream().findFirst().orElseThrow(() -> new MSException(API_DEFINITION_NOT_EXIST));
|
||||||
ApiDefinitionBlob allApiDefinitionBlob = apiDefinitionBlobMapper.selectByPrimaryKey(item.getId());
|
ApiDefinitionBlob allApiDefinitionBlob = apiDefinitionBlobMapper.selectByPrimaryKey(info.getId());
|
||||||
if(allApiDefinitionBlob != null){
|
if(allApiDefinitionBlob != null){
|
||||||
item.setRequest(ApiDataUtils.parseObject(new String(allApiDefinitionBlob.getRequest()), AbstractMsTestElement.class));
|
info.setRequest(ApiDataUtils.parseObject(new String(allApiDefinitionBlob.getRequest()), AbstractMsTestElement.class));
|
||||||
item.setResponse(ApiDataUtils.parseArray(new String(allApiDefinitionBlob.getResponse()), HttpResponse.class));
|
info.setResponse(ApiDataUtils.parseArray(new String(allApiDefinitionBlob.getResponse()), HttpResponse.class));
|
||||||
}
|
}
|
||||||
if(StringUtils.isBlank(copyAllApiDefinitionDocDTO.getDocTitle())){
|
if(StringUtils.isBlank(copyAllApiDefinitionDocDTO.getDocTitle())){
|
||||||
copyAllApiDefinitionDocDTO.setDocTitle(Translator.get(ALL_API));
|
copyAllApiDefinitionDocDTO.setDocTitle(Translator.get(ALL_API));
|
||||||
}
|
}
|
||||||
});
|
copyAllApiDefinitionDocDTO.setType(ApiDefinitionDocType.ALL.name());
|
||||||
|
copyAllApiDefinitionDocDTO.setDocInfo(info);
|
||||||
}
|
}
|
||||||
copyAllApiDefinitionDocDTO.setType("ALL");
|
|
||||||
copyAllApiDefinitionDocDTO.setDocList(allList);
|
|
||||||
Assertions.assertEquals(allApiDefinitionDocDTO.getType(), copyAllApiDefinitionDocDTO.getType());
|
Assertions.assertEquals(allApiDefinitionDocDTO.getType(), copyAllApiDefinitionDocDTO.getType());
|
||||||
Assertions.assertEquals(allApiDefinitionDocDTO.getDocTitle(), copyAllApiDefinitionDocDTO.getDocTitle());
|
Assertions.assertEquals(allApiDefinitionDocDTO.getDocTitle(), copyAllApiDefinitionDocDTO.getDocTitle());
|
||||||
Assertions.assertEquals(allApiDefinitionDocDTO.getDocList().size(), copyAllApiDefinitionDocDTO.getDocList().size());
|
Assertions.assertEquals(allApiDefinitionDocDTO.getDocInfo().getId(), copyAllApiDefinitionDocDTO.getDocInfo().getId());
|
||||||
|
|
||||||
// @@校验权限
|
// @@校验权限
|
||||||
requestPostPermissionTest(PermissionConstants.PROJECT_API_DEFINITION_READ, DOC, request);
|
requestPostPermissionTest(PermissionConstants.PROJECT_API_DEFINITION_READ, DOC, request);
|
||||||
|
|
Loading…
Reference in New Issue