feat(接口测试): 添加场景查询跨项目信息接口
This commit is contained in:
parent
04c02be0d0
commit
b8364cc042
|
@ -14,6 +14,7 @@ import io.metersphere.api.service.ApiValidateService;
|
||||||
import io.metersphere.api.service.scenario.ApiScenarioLogService;
|
import io.metersphere.api.service.scenario.ApiScenarioLogService;
|
||||||
import io.metersphere.api.service.scenario.ApiScenarioNoticeService;
|
import io.metersphere.api.service.scenario.ApiScenarioNoticeService;
|
||||||
import io.metersphere.api.service.scenario.ApiScenarioService;
|
import io.metersphere.api.service.scenario.ApiScenarioService;
|
||||||
|
import io.metersphere.project.domain.Project;
|
||||||
import io.metersphere.project.service.FileModuleService;
|
import io.metersphere.project.service.FileModuleService;
|
||||||
import io.metersphere.sdk.constants.PermissionConstants;
|
import io.metersphere.sdk.constants.PermissionConstants;
|
||||||
import io.metersphere.sdk.dto.api.task.TaskRequestDTO;
|
import io.metersphere.sdk.dto.api.task.TaskRequestDTO;
|
||||||
|
@ -130,8 +131,8 @@ public class ApiScenarioController {
|
||||||
@Operation(summary = "接口测试-接口场景管理-获取场景详情")
|
@Operation(summary = "接口测试-接口场景管理-获取场景详情")
|
||||||
@RequiresPermissions(PermissionConstants.PROJECT_API_SCENARIO_READ)
|
@RequiresPermissions(PermissionConstants.PROJECT_API_SCENARIO_READ)
|
||||||
@CheckOwner(resourceId = "#scenarioId", resourceType = "api_scenario")
|
@CheckOwner(resourceId = "#scenarioId", resourceType = "api_scenario")
|
||||||
public ApiScenarioDetail get(@PathVariable String scenarioId) {
|
public ApiScenarioDetailDTO getApiScenarioDetailDTO(@PathVariable String scenarioId) {
|
||||||
return apiScenarioService.get(scenarioId);
|
return apiScenarioService.getApiScenarioDetailDTO(scenarioId, SessionUtils.getUserId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/step/get/{stepId}")
|
@GetMapping("/step/get/{stepId}")
|
||||||
|
@ -141,6 +142,12 @@ public class ApiScenarioController {
|
||||||
return apiScenarioService.getStepDetail(stepId);
|
return apiScenarioService.getStepDetail(stepId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/step/project-ifo/{projectId}")
|
||||||
|
@Operation(summary = "接口测试-接口场景管理-获取步骤的所属项目信息")
|
||||||
|
@RequiresPermissions(PermissionConstants.PROJECT_API_SCENARIO_READ)
|
||||||
|
public Project getStepResourceProjectInfo(@PathVariable String projectId) {
|
||||||
|
return apiScenarioService.getStepResourceProjectInfo(projectId);
|
||||||
|
}
|
||||||
|
|
||||||
//需求补充:回收站里的相关操作都不需要发通知
|
//需求补充:回收站里的相关操作都不需要发通知
|
||||||
@GetMapping("/recover/{id}")
|
@GetMapping("/recover/{id}")
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package io.metersphere.api.dto.scenario;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
public class ApiScenarioDetailDTO extends ApiScenarioDetail {
|
||||||
|
@Schema(description = "创建人名称")
|
||||||
|
private String createUserName;
|
||||||
|
@Schema(description = "更新人名称")
|
||||||
|
private String updateUserName;
|
||||||
|
@Schema(description = "当前用户是否关注")
|
||||||
|
private Boolean follow = false;
|
||||||
|
}
|
|
@ -1868,6 +1868,22 @@ public class ApiScenarioService extends MoveNodeService {
|
||||||
apiScenarioMapper.updateByPrimaryKeySelective(update);
|
apiScenarioMapper.updateByPrimaryKeySelective(update);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ApiScenarioDetailDTO getApiScenarioDetailDTO(String scenarioId, String userId) {
|
||||||
|
ApiScenarioDetail apiScenarioDetail = get(scenarioId);
|
||||||
|
ApiScenarioDetailDTO apiScenarioDetailDTO = BeanUtils.copyBean(new ApiScenarioDetailDTO(), apiScenarioDetail);
|
||||||
|
Map<String, String> userNameMap = userLoginService.getUserNameMap(List.of(apiScenarioDetail.getCreateUser(), apiScenarioDetail.getUpdateUser()));
|
||||||
|
apiScenarioDetailDTO.setCreateUserName(userNameMap.get(apiScenarioDetail.getCreateUser()));
|
||||||
|
apiScenarioDetailDTO.setUpdateUserName(userNameMap.get(apiScenarioDetail.getUpdateUser()));
|
||||||
|
|
||||||
|
// 设置是否关注
|
||||||
|
ApiScenarioFollowerExample followerExample = new ApiScenarioFollowerExample();
|
||||||
|
followerExample.createCriteria().andApiScenarioIdEqualTo(scenarioId);
|
||||||
|
followerExample.createCriteria().andUserIdEqualTo(userId);
|
||||||
|
List<ApiScenarioFollower> followers = apiScenarioFollowerMapper.selectByExample(followerExample);
|
||||||
|
apiScenarioDetailDTO.setFollow(CollectionUtils.isNotEmpty(followers));
|
||||||
|
return apiScenarioDetailDTO;
|
||||||
|
}
|
||||||
|
|
||||||
public ApiScenarioDetail get(String scenarioId) {
|
public ApiScenarioDetail get(String scenarioId) {
|
||||||
ApiScenario apiScenario = checkResourceExist(scenarioId);
|
ApiScenario apiScenario = checkResourceExist(scenarioId);
|
||||||
ApiScenarioDetail apiScenarioDetail = BeanUtils.copyBean(new ApiScenarioDetail(), apiScenario);
|
ApiScenarioDetail apiScenarioDetail = BeanUtils.copyBean(new ApiScenarioDetail(), apiScenario);
|
||||||
|
@ -2559,4 +2575,15 @@ public class ApiScenarioService extends MoveNodeService {
|
||||||
public List<ReferenceDTO> getReference(ReferenceRequest request) {
|
public List<ReferenceDTO> getReference(ReferenceRequest request) {
|
||||||
return extApiDefinitionMapper.getReference(request);
|
return extApiDefinitionMapper.getReference(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Project getStepResourceProjectInfo(String projectId) {
|
||||||
|
Project project = projectMapper.selectByPrimaryKey(projectId);
|
||||||
|
if (project == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Project projectInfo = new Project();
|
||||||
|
projectInfo.setId(project.getId());
|
||||||
|
projectInfo.setName(project.getName());
|
||||||
|
return projectInfo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,10 +11,7 @@ import com.fasterxml.jackson.databind.json.JsonMapper;
|
||||||
import com.fasterxml.jackson.databind.jsontype.NamedType;
|
import com.fasterxml.jackson.databind.jsontype.NamedType;
|
||||||
import com.fasterxml.jackson.databind.type.CollectionType;
|
import com.fasterxml.jackson.databind.type.CollectionType;
|
||||||
import io.metersphere.api.dto.request.MsCommonElement;
|
import io.metersphere.api.dto.request.MsCommonElement;
|
||||||
import io.metersphere.api.dto.request.controller.MsConstantTimerController;
|
import io.metersphere.api.dto.request.controller.*;
|
||||||
import io.metersphere.api.dto.request.controller.MsIfController;
|
|
||||||
import io.metersphere.api.dto.request.controller.MsLoopController;
|
|
||||||
import io.metersphere.api.dto.request.controller.MsOnceOnlyController;
|
|
||||||
import io.metersphere.api.dto.request.http.MsHTTPElement;
|
import io.metersphere.api.dto.request.http.MsHTTPElement;
|
||||||
import io.metersphere.sdk.exception.MSException;
|
import io.metersphere.sdk.exception.MSException;
|
||||||
|
|
||||||
|
@ -42,6 +39,7 @@ public class ApiDataUtils {
|
||||||
namedTypes.add(new NamedType(MsLoopController.class, MsLoopController.class.getSimpleName()));
|
namedTypes.add(new NamedType(MsLoopController.class, MsLoopController.class.getSimpleName()));
|
||||||
namedTypes.add(new NamedType(MsOnceOnlyController.class, MsOnceOnlyController.class.getSimpleName()));
|
namedTypes.add(new NamedType(MsOnceOnlyController.class, MsOnceOnlyController.class.getSimpleName()));
|
||||||
namedTypes.add(new NamedType(MsConstantTimerController.class, MsConstantTimerController.class.getSimpleName()));
|
namedTypes.add(new NamedType(MsConstantTimerController.class, MsConstantTimerController.class.getSimpleName()));
|
||||||
|
namedTypes.add(new NamedType(MsScriptElement.class, MsScriptElement.class.getSimpleName()));
|
||||||
setObjectMapper(objectMapper);
|
setObjectMapper(objectMapper);
|
||||||
namedTypes.forEach(objectMapper::registerSubtypes);
|
namedTypes.forEach(objectMapper::registerSubtypes);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,10 +30,12 @@ import io.metersphere.api.utils.ApiDataUtils;
|
||||||
import io.metersphere.plugin.api.spi.AbstractMsTestElement;
|
import io.metersphere.plugin.api.spi.AbstractMsTestElement;
|
||||||
import io.metersphere.project.api.assertion.MsResponseCodeAssertion;
|
import io.metersphere.project.api.assertion.MsResponseCodeAssertion;
|
||||||
import io.metersphere.project.api.assertion.MsScriptAssertion;
|
import io.metersphere.project.api.assertion.MsScriptAssertion;
|
||||||
|
import io.metersphere.project.domain.Project;
|
||||||
import io.metersphere.project.domain.ProjectVersion;
|
import io.metersphere.project.domain.ProjectVersion;
|
||||||
import io.metersphere.project.dto.environment.variables.CommonVariables;
|
import io.metersphere.project.dto.environment.variables.CommonVariables;
|
||||||
import io.metersphere.project.dto.filemanagement.request.FileUploadRequest;
|
import io.metersphere.project.dto.filemanagement.request.FileUploadRequest;
|
||||||
import io.metersphere.project.mapper.ExtBaseProjectVersionMapper;
|
import io.metersphere.project.mapper.ExtBaseProjectVersionMapper;
|
||||||
|
import io.metersphere.project.mapper.ProjectMapper;
|
||||||
import io.metersphere.project.mapper.ProjectVersionMapper;
|
import io.metersphere.project.mapper.ProjectVersionMapper;
|
||||||
import io.metersphere.project.service.FileMetadataService;
|
import io.metersphere.project.service.FileMetadataService;
|
||||||
import io.metersphere.sdk.constants.*;
|
import io.metersphere.sdk.constants.*;
|
||||||
|
@ -57,6 +59,7 @@ import io.metersphere.system.dto.request.PluginUpdateRequest;
|
||||||
import io.metersphere.system.dto.sdk.request.PosRequest;
|
import io.metersphere.system.dto.sdk.request.PosRequest;
|
||||||
import io.metersphere.system.log.constants.OperationLogType;
|
import io.metersphere.system.log.constants.OperationLogType;
|
||||||
import io.metersphere.system.mapper.ScheduleMapper;
|
import io.metersphere.system.mapper.ScheduleMapper;
|
||||||
|
import io.metersphere.system.mapper.UserMapper;
|
||||||
import io.metersphere.system.service.PluginService;
|
import io.metersphere.system.service.PluginService;
|
||||||
import io.metersphere.system.uid.IDGenerator;
|
import io.metersphere.system.uid.IDGenerator;
|
||||||
import io.metersphere.system.uid.NumGenerator;
|
import io.metersphere.system.uid.NumGenerator;
|
||||||
|
@ -97,6 +100,7 @@ public class ApiScenarioControllerTests extends BaseTest {
|
||||||
protected static final String UPLOAD_TEMP_FILE = "upload/temp/file";
|
protected static final String UPLOAD_TEMP_FILE = "upload/temp/file";
|
||||||
protected static final String DELETE_TO_GC = "delete-to-gc/{0}";
|
protected static final String DELETE_TO_GC = "delete-to-gc/{0}";
|
||||||
protected static final String STEP_GET = "step/get/{0}";
|
protected static final String STEP_GET = "step/get/{0}";
|
||||||
|
protected static final String STEP_PROJECT_INFO = "step/project-ifo/{0}";
|
||||||
protected static final String DEBUG = "debug";
|
protected static final String DEBUG = "debug";
|
||||||
protected static final String RUN = "run/{0}";
|
protected static final String RUN = "run/{0}";
|
||||||
protected static final String RUN_REAL_TIME = "run/{0}?reportId={1}";
|
protected static final String RUN_REAL_TIME = "run/{0}?reportId={1}";
|
||||||
|
@ -164,6 +168,10 @@ public class ApiScenarioControllerTests extends BaseTest {
|
||||||
private BaseFileManagementTestService baseFileManagementTestService;
|
private BaseFileManagementTestService baseFileManagementTestService;
|
||||||
@Resource
|
@Resource
|
||||||
private ApiCommonService apiCommonService;
|
private ApiCommonService apiCommonService;
|
||||||
|
@Resource
|
||||||
|
private ProjectMapper projectMapper;
|
||||||
|
@Resource
|
||||||
|
private UserMapper userMapper;
|
||||||
|
|
||||||
private static String fileMetadataId;
|
private static String fileMetadataId;
|
||||||
private static String localFileId;
|
private static String localFileId;
|
||||||
|
@ -1174,12 +1182,18 @@ public class ApiScenarioControllerTests extends BaseTest {
|
||||||
@Order(7)
|
@Order(7)
|
||||||
public void get() throws Exception {
|
public void get() throws Exception {
|
||||||
MvcResult mvcResult = this.requestGetWithOkAndReturn(DEFAULT_GET, addApiScenario.getId());
|
MvcResult mvcResult = this.requestGetWithOkAndReturn(DEFAULT_GET, addApiScenario.getId());
|
||||||
ApiScenarioDetail apiScenarioDetail = getResultData(mvcResult, ApiScenarioDetail.class);
|
ApiScenarioDetailDTO apiScenarioDetail = getResultData(mvcResult, ApiScenarioDetailDTO.class);
|
||||||
|
Assertions.assertEquals(apiScenarioDetail.getCreateUserName(), userMapper.selectByPrimaryKey(apiScenarioDetail.getCreateUser()).getName());
|
||||||
|
Assertions.assertEquals(apiScenarioDetail.getUpdateUserName(), userMapper.selectByPrimaryKey(apiScenarioDetail.getUpdateUser()).getName());
|
||||||
|
Assertions.assertFalse(apiScenarioDetail.getFollow());
|
||||||
// 验证数据
|
// 验证数据
|
||||||
asserGetApiScenarioSteps(this.addApiScenarioSteps, apiScenarioDetail.getSteps());
|
asserGetApiScenarioSteps(this.addApiScenarioSteps, apiScenarioDetail.getSteps());
|
||||||
|
|
||||||
|
apiScenarioService.follow(anOtherAddApiScenario.getId(), "admin");
|
||||||
mvcResult = this.requestGetWithOkAndReturn(DEFAULT_GET, anOtherAddApiScenario.getId());
|
mvcResult = this.requestGetWithOkAndReturn(DEFAULT_GET, anOtherAddApiScenario.getId());
|
||||||
apiScenarioDetail = getResultData(mvcResult, ApiScenarioDetail.class);
|
apiScenarioDetail = getResultData(mvcResult, ApiScenarioDetailDTO.class);
|
||||||
|
Assertions.assertTrue(apiScenarioDetail.getFollow());
|
||||||
|
|
||||||
// 验证数据
|
// 验证数据
|
||||||
Assertions.assertEquals(this.anOtherAddApiScenarioSteps.size(), apiScenarioDetail.getSteps().size());
|
Assertions.assertEquals(this.anOtherAddApiScenarioSteps.size(), apiScenarioDetail.getSteps().size());
|
||||||
// @@校验权限
|
// @@校验权限
|
||||||
|
@ -1201,6 +1215,21 @@ public class ApiScenarioControllerTests extends BaseTest {
|
||||||
requestGetPermissionTest(PermissionConstants.PROJECT_API_SCENARIO_READ, STEP_GET, addApiScenario.getId());
|
requestGetPermissionTest(PermissionConstants.PROJECT_API_SCENARIO_READ, STEP_GET, addApiScenario.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Order(7)
|
||||||
|
public void getStepResourceProjectInfo() throws Exception {
|
||||||
|
MvcResult mvcResult = this.requestGetAndReturn(STEP_PROJECT_INFO, DEFAULT_PROJECT_ID);
|
||||||
|
Project project = getResultData(mvcResult, Project.class);
|
||||||
|
Assertions.assertEquals(project.getName(), projectMapper.selectByPrimaryKey(project.getId()).getName());
|
||||||
|
|
||||||
|
mvcResult = this.requestGetAndReturn(STEP_PROJECT_INFO, "tyuio");
|
||||||
|
project = getResultData(mvcResult, Project.class);
|
||||||
|
Assertions.assertNull(project);
|
||||||
|
|
||||||
|
// @@校验权限
|
||||||
|
requestGetPermissionTest(PermissionConstants.PROJECT_API_SCENARIO_READ, STEP_PROJECT_INFO, DEFAULT_PROJECT_ID);
|
||||||
|
}
|
||||||
|
|
||||||
private void requestGetStepDetail(List<? extends ApiScenarioStepCommonDTO> steps) throws Exception {
|
private void requestGetStepDetail(List<? extends ApiScenarioStepCommonDTO> steps) throws Exception {
|
||||||
if (CollectionUtils.isEmpty(steps)) {
|
if (CollectionUtils.isEmpty(steps)) {
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue