refactor(接口测试): 优化mock文件转存

This commit is contained in:
wxg0103 2024-05-06 18:25:25 +08:00 committed by Craftsman
parent ecae5a4d99
commit 8980be4af5
16 changed files with 109 additions and 54 deletions

View File

@ -44,6 +44,7 @@ public class DefaultRepositoryDir {
* project/{projectId}/apiCase/{apiCaseId} * project/{projectId}/apiCase/{apiCaseId}
*/ */
private static final String PROJECT_API_CASE_DIR = PROJECT_DIR + "/api-case/%s"; private static final String PROJECT_API_CASE_DIR = PROJECT_DIR + "/api-case/%s";
private static final String PROJECT_API_MOCK_DIR = PROJECT_DIR + "/api-mock/%s";
private static final String PROJECT_ENV_SSL_DIR = PROJECT_DIR + "/environment/%s"; private static final String PROJECT_ENV_SSL_DIR = PROJECT_DIR + "/environment/%s";
private static final String PROJECT_FUNCTIONAL_CASE_DIR = PROJECT_DIR + "/functional-case/%s"; private static final String PROJECT_FUNCTIONAL_CASE_DIR = PROJECT_DIR + "/functional-case/%s";
private static final String PROJECT_FUNCTIONAL_CASE_PREVIEW_DIR = PROJECT_DIR + "/functional-case/preview/%s"; private static final String PROJECT_FUNCTIONAL_CASE_PREVIEW_DIR = PROJECT_DIR + "/functional-case/preview/%s";
@ -72,6 +73,10 @@ public class DefaultRepositoryDir {
return String.format(PROJECT_API_CASE_DIR, projectId, apiCaseId); return String.format(PROJECT_API_CASE_DIR, projectId, apiCaseId);
} }
public static String getApiMockDir(String projectId, String apiMockId) {
return String.format(PROJECT_API_MOCK_DIR, projectId, apiMockId);
}
public static String getEnvSslDir(String projectId, String envId) { public static String getEnvSslDir(String projectId, String envId) {
return String.format(PROJECT_ENV_SSL_DIR, projectId, envId); return String.format(PROJECT_ENV_SSL_DIR, projectId, envId);
} }

View File

@ -1,9 +1,11 @@
package io.metersphere.api.controller.debug; package io.metersphere.api.controller.debug;
import io.metersphere.api.constants.ApiResourceType;
import io.metersphere.api.domain.ApiDebug; import io.metersphere.api.domain.ApiDebug;
import io.metersphere.api.dto.debug.*; import io.metersphere.api.dto.debug.*;
import io.metersphere.api.dto.request.ApiEditPosRequest; import io.metersphere.api.dto.request.ApiEditPosRequest;
import io.metersphere.api.dto.request.ApiTransferRequest; import io.metersphere.api.dto.request.ApiTransferRequest;
import io.metersphere.api.service.ApiFileResourceService;
import io.metersphere.api.service.debug.ApiDebugLogService; import io.metersphere.api.service.debug.ApiDebugLogService;
import io.metersphere.api.service.debug.ApiDebugService; import io.metersphere.api.service.debug.ApiDebugService;
import io.metersphere.project.service.FileModuleService; import io.metersphere.project.service.FileModuleService;
@ -38,6 +40,8 @@ public class ApiDebugController {
private ApiDebugService apiDebugService; private ApiDebugService apiDebugService;
@Resource @Resource
private FileModuleService fileModuleService; private FileModuleService fileModuleService;
@Resource
private ApiFileResourceService apiFileResourceService;
@GetMapping("/list/{protocol}") @GetMapping("/list/{protocol}")
@Operation(summary = "获取接口调试列表") @Operation(summary = "获取接口调试列表")
@ -65,7 +69,7 @@ public class ApiDebugController {
@Operation(summary = "上传接口调试所需的文件资源并返回文件ID") @Operation(summary = "上传接口调试所需的文件资源并返回文件ID")
@RequiresPermissions(logical = Logical.OR, value = {PermissionConstants.PROJECT_API_DEBUG_ADD, PermissionConstants.PROJECT_API_DEBUG_UPDATE}) @RequiresPermissions(logical = Logical.OR, value = {PermissionConstants.PROJECT_API_DEBUG_ADD, PermissionConstants.PROJECT_API_DEBUG_UPDATE})
public String uploadTempFile(@RequestParam("file") MultipartFile file) { public String uploadTempFile(@RequestParam("file") MultipartFile file) {
return apiDebugService.uploadTempFile(file); return apiFileResourceService.uploadTempFile(file);
} }
@PostMapping("/update") @PostMapping("/update")
@ -102,15 +106,15 @@ public class ApiDebugController {
@PostMapping("/transfer") @PostMapping("/transfer")
@Operation(summary = "接口测试-接口调试-附件-文件转存") @Operation(summary = "接口测试-接口调试-附件-文件转存")
@RequiresPermissions(PermissionConstants.PROJECT_API_DEBUG_READ)
@CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project")
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_ADD)
public String transfer(@Validated @RequestBody ApiTransferRequest request) { public String transfer(@Validated @RequestBody ApiTransferRequest request) {
return apiDebugService.transfer(request, SessionUtils.getUserId()); return apiFileResourceService.transfer(request, SessionUtils.getUserId(), ApiResourceType.API_DEBUG.name());
} }
@GetMapping("/transfer/options/{projectId}") @GetMapping("/transfer/options/{projectId}")
@Operation(summary = "接口测试-接口调试-附件-转存目录下拉框") @Operation(summary = "接口测试-接口调试-附件-转存目录下拉框")
@RequiresPermissions(PermissionConstants.PROJECT_API_DEBUG_READ) @RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_ADD)
@CheckOwner(resourceId = "#projectId", resourceType = "project") @CheckOwner(resourceId = "#projectId", resourceType = "project")
public List<BaseTreeNode> options(@PathVariable String projectId) { public List<BaseTreeNode> options(@PathVariable String projectId) {
return fileModuleService.getTree(projectId); return fileModuleService.getTree(projectId);

View File

@ -3,6 +3,7 @@ package io.metersphere.api.controller.definition;
import com.fasterxml.jackson.databind.node.TextNode; import com.fasterxml.jackson.databind.node.TextNode;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import io.metersphere.api.constants.ApiResourceType;
import io.metersphere.api.domain.ApiDefinition; import io.metersphere.api.domain.ApiDefinition;
import io.metersphere.api.dto.ReferenceDTO; import io.metersphere.api.dto.ReferenceDTO;
import io.metersphere.api.dto.ReferenceRequest; import io.metersphere.api.dto.ReferenceRequest;
@ -10,6 +11,7 @@ import io.metersphere.api.dto.definition.*;
import io.metersphere.api.dto.request.ApiEditPosRequest; import io.metersphere.api.dto.request.ApiEditPosRequest;
import io.metersphere.api.dto.request.ApiTransferRequest; import io.metersphere.api.dto.request.ApiTransferRequest;
import io.metersphere.api.dto.request.ImportRequest; import io.metersphere.api.dto.request.ImportRequest;
import io.metersphere.api.service.ApiFileResourceService;
import io.metersphere.api.service.definition.ApiDefinitionLogService; import io.metersphere.api.service.definition.ApiDefinitionLogService;
import io.metersphere.api.service.definition.ApiDefinitionNoticeService; import io.metersphere.api.service.definition.ApiDefinitionNoticeService;
import io.metersphere.api.service.definition.ApiDefinitionService; import io.metersphere.api.service.definition.ApiDefinitionService;
@ -54,6 +56,8 @@ public class ApiDefinitionController {
private ApiDefinitionService apiDefinitionService; private ApiDefinitionService apiDefinitionService;
@Resource @Resource
private FileModuleService fileModuleService; private FileModuleService fileModuleService;
@Resource
private ApiFileResourceService apiFileResourceService;
@PostMapping(value = "/add") @PostMapping(value = "/add")
@Operation(summary = "接口测试-接口管理-添加接口定义") @Operation(summary = "接口测试-接口管理-添加接口定义")
@ -201,7 +205,7 @@ public class ApiDefinitionController {
@Operation(summary = "上传接口定义所需的文件资源并返回文件ID") @Operation(summary = "上传接口定义所需的文件资源并返回文件ID")
@RequiresPermissions(logical = Logical.OR, value = {PermissionConstants.PROJECT_API_DEFINITION_ADD, PermissionConstants.PROJECT_API_DEFINITION_UPDATE}) @RequiresPermissions(logical = Logical.OR, value = {PermissionConstants.PROJECT_API_DEFINITION_ADD, PermissionConstants.PROJECT_API_DEFINITION_UPDATE})
public String uploadTempFile(@RequestParam("file") MultipartFile file) { public String uploadTempFile(@RequestParam("file") MultipartFile file) {
return apiDefinitionService.uploadTempFile(file); return apiFileResourceService.uploadTempFile(file);
} }
@PostMapping("/doc") @PostMapping("/doc")
@ -257,7 +261,7 @@ public class ApiDefinitionController {
@GetMapping("/transfer/options/{projectId}") @GetMapping("/transfer/options/{projectId}")
@Operation(summary = "接口测试-接口管理-接口-附件-转存目录下拉框") @Operation(summary = "接口测试-接口管理-接口-附件-转存目录下拉框")
@RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_READ) @RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_ADD)
@CheckOwner(resourceId = "#projectId", resourceType = "project") @CheckOwner(resourceId = "#projectId", resourceType = "project")
public List<BaseTreeNode> options(@PathVariable String projectId) { public List<BaseTreeNode> options(@PathVariable String projectId) {
return fileModuleService.getTree(projectId); return fileModuleService.getTree(projectId);
@ -265,10 +269,10 @@ public class ApiDefinitionController {
@PostMapping("/transfer") @PostMapping("/transfer")
@Operation(summary = "接口测试-接口管理-接口-附件-文件转存") @Operation(summary = "接口测试-接口管理-接口-附件-文件转存")
@RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_READ)
@CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project")
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_ADD)
public String transfer(@Validated @RequestBody ApiTransferRequest request) { public String transfer(@Validated @RequestBody ApiTransferRequest request) {
return apiDefinitionService.transfer(request, SessionUtils.getUserId()); return apiFileResourceService.transfer(request, SessionUtils.getUserId(), ApiResourceType.API.name());
} }
@PostMapping("/preview") @PostMapping("/preview")

View File

@ -3,18 +3,22 @@ package io.metersphere.api.controller.definition;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import com.github.pagehelper.page.PageMethod; import com.github.pagehelper.page.PageMethod;
import io.metersphere.api.constants.ApiResource; import io.metersphere.api.constants.ApiResource;
import io.metersphere.api.constants.ApiResourceType;
import io.metersphere.api.domain.ApiDefinitionMock; import io.metersphere.api.domain.ApiDefinitionMock;
import io.metersphere.api.dto.definition.ApiDefinitionMockDTO; import io.metersphere.api.dto.definition.ApiDefinitionMockDTO;
import io.metersphere.api.dto.definition.request.ApiDefinitionMockAddRequest; import io.metersphere.api.dto.definition.request.ApiDefinitionMockAddRequest;
import io.metersphere.api.dto.definition.request.ApiDefinitionMockPageRequest; import io.metersphere.api.dto.definition.request.ApiDefinitionMockPageRequest;
import io.metersphere.api.dto.definition.request.ApiDefinitionMockRequest; import io.metersphere.api.dto.definition.request.ApiDefinitionMockRequest;
import io.metersphere.api.dto.definition.request.ApiDefinitionMockUpdateRequest; import io.metersphere.api.dto.definition.request.ApiDefinitionMockUpdateRequest;
import io.metersphere.api.dto.request.ApiTransferRequest;
import io.metersphere.api.service.ApiFileResourceService; import io.metersphere.api.service.ApiFileResourceService;
import io.metersphere.api.service.ApiValidateService; import io.metersphere.api.service.ApiValidateService;
import io.metersphere.api.service.definition.ApiDefinitionMockLogService; import io.metersphere.api.service.definition.ApiDefinitionMockLogService;
import io.metersphere.api.service.definition.ApiDefinitionMockNoticeService; import io.metersphere.api.service.definition.ApiDefinitionMockNoticeService;
import io.metersphere.api.service.definition.ApiDefinitionMockService; import io.metersphere.api.service.definition.ApiDefinitionMockService;
import io.metersphere.project.service.FileModuleService;
import io.metersphere.sdk.constants.PermissionConstants; import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.system.dto.sdk.BaseTreeNode;
import io.metersphere.system.log.annotation.Log; import io.metersphere.system.log.annotation.Log;
import io.metersphere.system.log.constants.OperationLogType; import io.metersphere.system.log.constants.OperationLogType;
import io.metersphere.system.notice.annotation.SendNotice; import io.metersphere.system.notice.annotation.SendNotice;
@ -50,6 +54,8 @@ public class ApiDefinitionMockController {
private ApiFileResourceService apiFileResourceService; private ApiFileResourceService apiFileResourceService;
@Resource @Resource
private ApiValidateService apiValidateService; private ApiValidateService apiValidateService;
@Resource
private FileModuleService fileModuleService;
@PostMapping("/page") @PostMapping("/page")
@Operation(summary = "接口测试-接口管理-接口 Mock") @Operation(summary = "接口测试-接口管理-接口 Mock")
@ -130,4 +136,22 @@ public class ApiDefinitionMockController {
public String uploadTempFile(@RequestParam("file") MultipartFile file) { public String uploadTempFile(@RequestParam("file") MultipartFile file) {
return apiFileResourceService.uploadTempFile(file); return apiFileResourceService.uploadTempFile(file);
} }
@GetMapping("/transfer/options/{projectId}")
@Operation(summary = "接口测试-接口管理-接口-附件-转存目录下拉框")
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_ADD)
@CheckOwner(resourceId = "#projectId", resourceType = "project")
public List<BaseTreeNode> options(@PathVariable String projectId) {
return fileModuleService.getTree(projectId);
}
@PostMapping("/transfer")
@Operation(summary = "接口测试-接口管理-接口-附件-文件转存")
@CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project")
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_ADD)
public String transfer(@Validated @RequestBody ApiTransferRequest request) {
return apiFileResourceService.transfer(request, SessionUtils.getUserId(), ApiResourceType.API_MOCK.name());
}
} }

View File

@ -2,11 +2,13 @@ package io.metersphere.api.controller.definition;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import io.metersphere.api.constants.ApiResourceType;
import io.metersphere.api.domain.ApiTestCase; import io.metersphere.api.domain.ApiTestCase;
import io.metersphere.api.dto.ReferenceDTO; import io.metersphere.api.dto.ReferenceDTO;
import io.metersphere.api.dto.ReferenceRequest; import io.metersphere.api.dto.ReferenceRequest;
import io.metersphere.api.dto.definition.*; import io.metersphere.api.dto.definition.*;
import io.metersphere.api.dto.request.ApiTransferRequest; import io.metersphere.api.dto.request.ApiTransferRequest;
import io.metersphere.api.service.ApiFileResourceService;
import io.metersphere.api.service.definition.*; import io.metersphere.api.service.definition.*;
import io.metersphere.project.service.FileModuleService; import io.metersphere.project.service.FileModuleService;
import io.metersphere.sdk.constants.PermissionConstants; import io.metersphere.sdk.constants.PermissionConstants;
@ -50,6 +52,8 @@ public class ApiTestCaseController {
private FileModuleService fileModuleService; private FileModuleService fileModuleService;
@Resource @Resource
private ApiTestCaseBatchRunService apiTestCaseBatchRunService; private ApiTestCaseBatchRunService apiTestCaseBatchRunService;
@Resource
private ApiFileResourceService apiFileResourceService;
@PostMapping(value = "/add") @PostMapping(value = "/add")
@Operation(summary = "接口测试-接口管理-接口用例-新增") @Operation(summary = "接口测试-接口管理-接口用例-新增")
@ -213,7 +217,7 @@ public class ApiTestCaseController {
@Operation(summary = "上传接口调试所需的文件资源并返回文件ID") @Operation(summary = "上传接口调试所需的文件资源并返回文件ID")
@RequiresPermissions(logical = Logical.OR, value = {PermissionConstants.PROJECT_API_DEFINITION_CASE_ADD, PermissionConstants.PROJECT_API_DEFINITION_CASE_UPDATE}) @RequiresPermissions(logical = Logical.OR, value = {PermissionConstants.PROJECT_API_DEFINITION_CASE_ADD, PermissionConstants.PROJECT_API_DEFINITION_CASE_UPDATE})
public String uploadTempFile(@RequestParam("file") MultipartFile file) { public String uploadTempFile(@RequestParam("file") MultipartFile file) {
return apiTestCaseService.uploadTempFile(file); return apiFileResourceService.uploadTempFile(file);
} }
@PostMapping("/execute/page") @PostMapping("/execute/page")
@ -238,15 +242,15 @@ public class ApiTestCaseController {
@PostMapping("/transfer") @PostMapping("/transfer")
@Operation(summary = "接口测试-接口管理-接口用例-附件-文件转存") @Operation(summary = "接口测试-接口管理-接口用例-附件-文件转存")
@RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_CASE_READ) @RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_ADD)
@CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project")
public String transfer(@Validated @RequestBody ApiTransferRequest request) { public String transfer(@Validated @RequestBody ApiTransferRequest request) {
return apiTestCaseService.transfer(request, SessionUtils.getUserId()); return apiFileResourceService.transfer(request, SessionUtils.getUserId(), ApiResourceType.API_CASE.name());
} }
@GetMapping("/transfer/options/{projectId}") @GetMapping("/transfer/options/{projectId}")
@Operation(summary = "接口测试-接口管理-接口用例-附件-转存目录下拉框") @Operation(summary = "接口测试-接口管理-接口用例-附件-转存目录下拉框")
@RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_CASE_READ) @RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_ADD)
@CheckOwner(resourceId = "#projectId", resourceType = "project") @CheckOwner(resourceId = "#projectId", resourceType = "project")
public List<BaseTreeNode> options(@PathVariable String projectId) { public List<BaseTreeNode> options(@PathVariable String projectId) {
return fileModuleService.getTree(projectId); return fileModuleService.getTree(projectId);

View File

@ -3,6 +3,7 @@ package io.metersphere.api.controller.scenario;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import io.metersphere.api.constants.ApiResource; import io.metersphere.api.constants.ApiResource;
import io.metersphere.api.constants.ApiResourceType;
import io.metersphere.api.domain.ApiScenario; import io.metersphere.api.domain.ApiScenario;
import io.metersphere.api.dto.ReferenceDTO; import io.metersphere.api.dto.ReferenceDTO;
import io.metersphere.api.dto.ReferenceRequest; import io.metersphere.api.dto.ReferenceRequest;
@ -10,6 +11,7 @@ import io.metersphere.api.dto.definition.ExecutePageRequest;
import io.metersphere.api.dto.definition.ExecuteReportDTO; import io.metersphere.api.dto.definition.ExecuteReportDTO;
import io.metersphere.api.dto.request.ApiTransferRequest; import io.metersphere.api.dto.request.ApiTransferRequest;
import io.metersphere.api.dto.scenario.*; import io.metersphere.api.dto.scenario.*;
import io.metersphere.api.service.ApiFileResourceService;
import io.metersphere.api.service.ApiValidateService; 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;
@ -51,6 +53,8 @@ public class ApiScenarioController {
private ApiValidateService apiValidateService; private ApiValidateService apiValidateService;
@Resource @Resource
private FileModuleService fileModuleService; private FileModuleService fileModuleService;
@Resource
private ApiFileResourceService apiFileResourceService;
@PostMapping("/page") @PostMapping("/page")
@Operation(summary = "接口测试-接口场景管理-场景列表(deleted 状态为 1 时为回收站数据)") @Operation(summary = "接口测试-接口场景管理-场景列表(deleted 状态为 1 时为回收站数据)")
@ -94,7 +98,7 @@ public class ApiScenarioController {
@Operation(summary = "接口测试-接口场景管理-上传场景所需的文件资源并返回文件ID") @Operation(summary = "接口测试-接口场景管理-上传场景所需的文件资源并返回文件ID")
@RequiresPermissions(logical = Logical.OR, value = {PermissionConstants.PROJECT_API_SCENARIO_ADD, PermissionConstants.PROJECT_API_SCENARIO_UPDATE}) @RequiresPermissions(logical = Logical.OR, value = {PermissionConstants.PROJECT_API_SCENARIO_ADD, PermissionConstants.PROJECT_API_SCENARIO_UPDATE})
public String uploadTempFile(@RequestParam("file") MultipartFile file) { public String uploadTempFile(@RequestParam("file") MultipartFile file) {
return apiScenarioService.uploadTempFile(file); return apiFileResourceService.uploadTempFile(file);
} }
@PostMapping("/update") @PostMapping("/update")
@ -268,15 +272,15 @@ public class ApiScenarioController {
@PostMapping("/transfer") @PostMapping("/transfer")
@Operation(summary = "接口测试-接口场景管理-场景-附件-文件转存") @Operation(summary = "接口测试-接口场景管理-场景-附件-文件转存")
@RequiresPermissions(PermissionConstants.PROJECT_API_SCENARIO_READ) @RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_ADD)
@CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project")
public String transfer(@Validated @RequestBody ApiTransferRequest request) { public String transfer(@Validated @RequestBody ApiTransferRequest request) {
return apiScenarioService.transfer(request, SessionUtils.getUserId()); return apiFileResourceService.transfer(request, SessionUtils.getUserId(), ApiResourceType.API_SCENARIO.name());
} }
@GetMapping("/transfer/options/{projectId}") @GetMapping("/transfer/options/{projectId}")
@Operation(summary = "接口测试-接口场景管理-场景-附件-转存目录下拉框") @Operation(summary = "接口测试-接口场景管理-场景-附件-转存目录下拉框")
@RequiresPermissions(PermissionConstants.PROJECT_API_SCENARIO_READ) @RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_ADD)
@CheckOwner(resourceId = "#projectId", resourceType = "project") @CheckOwner(resourceId = "#projectId", resourceType = "project")
public List<BaseTreeNode> options(@PathVariable String projectId) { public List<BaseTreeNode> options(@PathVariable String projectId) {
return fileModuleService.getTree(projectId); return fileModuleService.getTree(projectId);

View File

@ -392,6 +392,8 @@ public class ApiFileResourceService {
DefaultRepositoryDir.getApiCaseDir(request.getProjectId(), request.getSourceId()) + "/" + request.getFileId(); DefaultRepositoryDir.getApiCaseDir(request.getProjectId(), request.getSourceId()) + "/" + request.getFileId();
case API_SCENARIO -> case API_SCENARIO ->
DefaultRepositoryDir.getApiScenarioDir(request.getProjectId(), request.getSourceId()) + "/" + request.getFileId(); DefaultRepositoryDir.getApiScenarioDir(request.getProjectId(), request.getSourceId()) + "/" + request.getFileId();
case API_MOCK ->
DefaultRepositoryDir.getApiMockDir(request.getProjectId(), request.getSourceId()) + "/" + request.getFileId();
default -> throw new MSException("file type error!"); default -> throw new MSException("file type error!");
}; };
if (CollectionUtils.isEmpty(apiFileResources)) { if (CollectionUtils.isEmpty(apiFileResources)) {

View File

@ -9,7 +9,6 @@ import io.metersphere.api.dto.ApiFile;
import io.metersphere.api.dto.ApiParamConfig; import io.metersphere.api.dto.ApiParamConfig;
import io.metersphere.api.dto.debug.*; import io.metersphere.api.dto.debug.*;
import io.metersphere.api.dto.request.ApiEditPosRequest; import io.metersphere.api.dto.request.ApiEditPosRequest;
import io.metersphere.api.dto.request.ApiTransferRequest;
import io.metersphere.api.mapper.ApiDebugBlobMapper; import io.metersphere.api.mapper.ApiDebugBlobMapper;
import io.metersphere.api.mapper.ApiDebugMapper; import io.metersphere.api.mapper.ApiDebugMapper;
import io.metersphere.api.mapper.ApiDebugModuleMapper; import io.metersphere.api.mapper.ApiDebugModuleMapper;
@ -44,7 +43,6 @@ import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionUtils; import org.mybatis.spring.SqlSessionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
@ -209,10 +207,6 @@ public class ApiDebugService extends MoveNodeService {
return ServiceUtils.checkResourceExist(apiDebugMapper.selectByPrimaryKey(id), "permission.api_debug.name"); return ServiceUtils.checkResourceExist(apiDebugMapper.selectByPrimaryKey(id), "permission.api_debug.name");
} }
public String uploadTempFile(MultipartFile file) {
return apiFileResourceService.uploadTempFile(file);
}
public TaskRequestDTO debug(ApiDebugRunRequest request) { public TaskRequestDTO debug(ApiDebugRunRequest request) {
ApiResourceRunRequest runRequest = apiExecuteService.getApiResourceRunRequest(request); ApiResourceRunRequest runRequest = apiExecuteService.getApiResourceRunRequest(request);
ApiParamConfig apiParamConfig = apiExecuteService.getApiParamConfig(request.getReportId()); ApiParamConfig apiParamConfig = apiExecuteService.getApiParamConfig(request.getReportId());
@ -305,8 +299,4 @@ public class ApiDebugService extends MoveNodeService {
apiDebugBlobMapper.updateByPrimaryKeySelective(apiDebugBlob); apiDebugBlobMapper.updateByPrimaryKeySelective(apiDebugBlob);
} }
} }
public String transfer(ApiTransferRequest request, String userId) {
return apiFileResourceService.transfer(request, userId, ApiResourceType.API_DEBUG.name());
}
} }

View File

@ -141,7 +141,7 @@ public class ApiDefinitionMockService {
} }
private static ApiFileResourceUpdateRequest getApiFileResourceRequest(String sourceId, String projectId, String operator) { private static ApiFileResourceUpdateRequest getApiFileResourceRequest(String sourceId, String projectId, String operator) {
String apiDefinitionMockDir = DefaultRepositoryDir.getApiDefinitionDir(projectId, sourceId); String apiDefinitionMockDir = DefaultRepositoryDir.getApiMockDir(projectId, sourceId);
ApiFileResourceUpdateRequest resourceUpdateRequest = new ApiFileResourceUpdateRequest(); ApiFileResourceUpdateRequest resourceUpdateRequest = new ApiFileResourceUpdateRequest();
resourceUpdateRequest.setProjectId(projectId); resourceUpdateRequest.setProjectId(projectId);
resourceUpdateRequest.setFolder(apiDefinitionMockDir); resourceUpdateRequest.setFolder(apiDefinitionMockDir);
@ -205,7 +205,7 @@ public class ApiDefinitionMockService {
public void delete(ApiDefinitionMockRequest request, String userId) { public void delete(ApiDefinitionMockRequest request, String userId) {
checkApiDefinitionMock(request.getId()); checkApiDefinitionMock(request.getId());
String apiDefinitionMockDir = DefaultRepositoryDir.getApiDefinitionDir(request.getProjectId(), request.getId()); String apiDefinitionMockDir = DefaultRepositoryDir.getApiMockDir(request.getProjectId(), request.getId());
apiFileResourceService.deleteByResourceId(apiDefinitionMockDir, request.getId(), request.getProjectId(), userId, OperationLogModule.API_TEST_MANAGEMENT_MOCK); apiFileResourceService.deleteByResourceId(apiDefinitionMockDir, request.getId(), request.getProjectId(), userId, OperationLogModule.API_TEST_MANAGEMENT_MOCK);
apiDefinitionMockConfigMapper.deleteByPrimaryKey(request.getId()); apiDefinitionMockConfigMapper.deleteByPrimaryKey(request.getId());
apiDefinitionMockMapper.deleteByPrimaryKey(request.getId()); apiDefinitionMockMapper.deleteByPrimaryKey(request.getId());
@ -232,8 +232,8 @@ public class ApiDefinitionMockService {
apiDefinitionMockConfigMapper.insertSelective(apiDefinitionMockConfig); apiDefinitionMockConfigMapper.insertSelective(apiDefinitionMockConfig);
}); });
String sourceDir = DefaultRepositoryDir.getApiDefinitionDir(apiDefinitionMock.getProjectId(), request.getId()); String sourceDir = DefaultRepositoryDir.getApiMockDir(apiDefinitionMock.getProjectId(), request.getId());
String targetDir = DefaultRepositoryDir.getApiDefinitionDir(apiDefinitionMock.getProjectId(), apiDefinitionMock.getId()); String targetDir = DefaultRepositoryDir.getApiMockDir(apiDefinitionMock.getProjectId(), apiDefinitionMock.getId());
apiFileResourceService.copyFileByResourceId(request.getId(), sourceDir, apiDefinitionMock.getId(), targetDir); apiFileResourceService.copyFileByResourceId(request.getId(), sourceDir, apiDefinitionMock.getId(), targetDir);
return apiDefinitionMock; return apiDefinitionMock;
@ -264,7 +264,7 @@ public class ApiDefinitionMockService {
if (!apiDefinitionMocks.isEmpty()) { if (!apiDefinitionMocks.isEmpty()) {
List<String> mockIds = apiDefinitionMocks.stream().map(ApiDefinitionMock::getId).toList(); List<String> mockIds = apiDefinitionMocks.stream().map(ApiDefinitionMock::getId).toList();
String apiDefinitionMockDir = DefaultRepositoryDir.getApiDefinitionDir(projectId, StringUtils.EMPTY); String apiDefinitionMockDir = DefaultRepositoryDir.getApiMockDir(projectId, StringUtils.EMPTY);
apiFileResourceService.deleteByResourceIds(apiDefinitionMockDir, mockIds, projectId, userId, OperationLogModule.API_TEST_MANAGEMENT_MOCK); apiFileResourceService.deleteByResourceIds(apiDefinitionMockDir, mockIds, projectId, userId, OperationLogModule.API_TEST_MANAGEMENT_MOCK);
ApiDefinitionMockConfigExample apiDefinitionMockConfigExample = new ApiDefinitionMockConfigExample(); ApiDefinitionMockConfigExample apiDefinitionMockConfigExample = new ApiDefinitionMockConfigExample();
@ -274,4 +274,5 @@ public class ApiDefinitionMockService {
apiDefinitionMockMapper.deleteByExample(apiDefinitionMockExample); apiDefinitionMockMapper.deleteByExample(apiDefinitionMockExample);
} }
} }
} }

View File

@ -890,10 +890,6 @@ public class ApiDefinitionService extends MoveNodeService {
} }
} }
public String uploadTempFile(MultipartFile file) {
return apiFileResourceService.uploadTempFile(file);
}
public ApiDefinitionDTO getApiDefinitionInfo(String id, String userId, ApiDefinition apiDefinition) { public ApiDefinitionDTO getApiDefinitionInfo(String id, String userId, ApiDefinition apiDefinition) {
ApiDefinitionDTO apiDefinitionDTO = new ApiDefinitionDTO(); ApiDefinitionDTO apiDefinitionDTO = new ApiDefinitionDTO();
BeanUtils.copyBean(apiDefinitionDTO, apiDefinition); BeanUtils.copyBean(apiDefinitionDTO, apiDefinition);

View File

@ -535,11 +535,6 @@ public class ApiTestCaseService extends MoveNodeService {
mapper.updateByExampleSelective(updateCase, example); mapper.updateByExampleSelective(updateCase, example);
} }
public String uploadTempFile(MultipartFile file) {
return apiFileResourceService.uploadTempFile(file);
}
public List<ApiTestCaseBlob> getBlobByIds(List<String> apiCaseIds) { public List<ApiTestCaseBlob> getBlobByIds(List<String> apiCaseIds) {
if (CollectionUtils.isEmpty(apiCaseIds)) { if (CollectionUtils.isEmpty(apiCaseIds)) {
return Collections.emptyList(); return Collections.emptyList();

View File

@ -1284,11 +1284,6 @@ public class ApiScenarioService extends MoveNodeService {
private ApiScenario checkResourceExist(String id) { private ApiScenario checkResourceExist(String id) {
return ServiceUtils.checkResourceExist(apiScenarioMapper.selectByPrimaryKey(id), "permission.system_api_scenario.name"); return ServiceUtils.checkResourceExist(apiScenarioMapper.selectByPrimaryKey(id), "permission.system_api_scenario.name");
} }
public String uploadTempFile(MultipartFile file) {
return apiFileResourceService.uploadTempFile(file);
}
public TaskRequestDTO debug(ApiScenarioDebugRequest request) { public TaskRequestDTO debug(ApiScenarioDebugRequest request) {
ApiScenario apiScenario = apiScenarioMapper.selectByPrimaryKey(request.getId()); ApiScenario apiScenario = apiScenarioMapper.selectByPrimaryKey(request.getId());
boolean hasSave = apiScenario != null; boolean hasSave = apiScenario != null;

View File

@ -1,9 +1,6 @@
package io.metersphere.api.controller; package io.metersphere.api.controller;
import io.metersphere.api.constants.ApiConstants; import io.metersphere.api.constants.*;
import io.metersphere.api.constants.ApiDefinitionDocType;
import io.metersphere.api.constants.ApiDefinitionStatus;
import io.metersphere.api.constants.ApiImportPlatform;
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.ApiFile; import io.metersphere.api.dto.ApiFile;
@ -210,6 +207,7 @@ public class ApiDefinitionControllerTests extends BaseTest {
@Test @Test
@Order(1) @Order(1)
@Sql(scripts = {"/dml/init_api_definition.sql"}, config = @SqlConfig(encoding = "utf-8", transactionMode = SqlConfig.TransactionMode.ISOLATED))
public void testAdd() throws Exception { public void testAdd() throws Exception {
LogUtils.info("create api test"); LogUtils.info("create api test");
// 创建测试数据 // 创建测试数据
@ -299,6 +297,13 @@ public class ApiDefinitionControllerTests extends BaseTest {
// @@校验日志 // @@校验日志
checkLogModelList.add(new CheckLogModel(apiDefinition.getId(), OperationLogType.ADD, ADD)); checkLogModelList.add(new CheckLogModel(apiDefinition.getId(), OperationLogType.ADD, ADD));
mockMvc.perform(MockMvcRequestBuilders.post(BASE_PATH + "transfer", apiTransferRequest)
.header(SessionConstants.HEADER_TOKEN, sessionId)
.header(SessionConstants.CSRF_TOKEN, csrfToken)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().is5xxServerError())
.andExpect(content().contentType(MediaType.APPLICATION_JSON)).andReturn();
// @@校验权限 // @@校验权限
request.setProjectId(DEFAULT_PROJECT_ID); request.setProjectId(DEFAULT_PROJECT_ID);
request.setName("permission-st-6"); request.setName("permission-st-6");
@ -385,7 +390,6 @@ public class ApiDefinitionControllerTests extends BaseTest {
@Test @Test
@Order(2) @Order(2)
@Sql(scripts = {"/dml/init_api_definition.sql"}, config = @SqlConfig(encoding = "utf-8", transactionMode = SqlConfig.TransactionMode.ISOLATED))
public void get() throws Exception { public void get() throws Exception {
if (apiDefinition == null) { if (apiDefinition == null) {
apiDefinition = apiDefinitionMapper.selectByPrimaryKey("1001"); apiDefinition = apiDefinitionMapper.selectByPrimaryKey("1001");

View File

@ -13,6 +13,7 @@ import io.metersphere.api.dto.definition.request.ApiDefinitionMockUpdateRequest;
import io.metersphere.api.dto.mockserver.KeyValueInfo; import io.metersphere.api.dto.mockserver.KeyValueInfo;
import io.metersphere.api.dto.mockserver.MockMatchRule; import io.metersphere.api.dto.mockserver.MockMatchRule;
import io.metersphere.api.dto.mockserver.MockResponse; import io.metersphere.api.dto.mockserver.MockResponse;
import io.metersphere.api.dto.request.ApiTransferRequest;
import io.metersphere.api.dto.request.http.MsHTTPElement; import io.metersphere.api.dto.request.http.MsHTTPElement;
import io.metersphere.api.dto.request.http.MsHeader; import io.metersphere.api.dto.request.http.MsHeader;
import io.metersphere.api.dto.request.http.body.Body; import io.metersphere.api.dto.request.http.body.Body;
@ -195,6 +196,14 @@ public class ApiDefinitionMockControllerTests extends BaseTest {
} }
} }
private static MockMultipartFile getMockMultipartFile(String fileName) {
return new MockMultipartFile(
"file",
fileName,
MediaType.APPLICATION_OCTET_STREAM_VALUE,
"Hello, World!".getBytes()
);
}
@Test @Test
@Order(1) @Order(1)
@ -227,8 +236,23 @@ public class ApiDefinitionMockControllerTests extends BaseTest {
// 校验请求成功数据 // 校验请求成功数据
ApiDefinitionMock resultData = getResultData(mvcResult, ApiDefinitionMock.class); ApiDefinitionMock resultData = getResultData(mvcResult, ApiDefinitionMock.class);
apiDefinitionMock = mockServerTestService.assertAddApiDefinitionMock(request, mockMatchRule, resultData.getId()); apiDefinitionMock = mockServerTestService.assertAddApiDefinitionMock(request, mockMatchRule, resultData.getId());
mockServerTestService.assertUploadFile(apiDefinitionMock.getId(), List.of(uploadFileId)); MockServerTestService.assertUploadFile(apiDefinitionMock.getId(), List.of(uploadFileId));
mockServerTestService.assertLinkFile(apiDefinitionMock.getId(), List.of(fileMetadataId)); MockServerTestService.assertLinkFile(apiDefinitionMock.getId(), List.of(fileMetadataId));
this.requestGetWithOk(BASE_PATH + "transfer/options/" + DEFAULT_PROJECT_ID);
ApiTransferRequest apiTransferRequest = new ApiTransferRequest();
apiTransferRequest.setSourceId(apiDefinitionMock.getId());
apiTransferRequest.setProjectId(DEFAULT_PROJECT_ID);
apiTransferRequest.setModuleId("root");
apiTransferRequest.setLocal(true);
String uploadFileId = doUploadTempFile(getMockMultipartFile("api-mock_upload.JPG"));
apiTransferRequest.setFileId(uploadFileId);
apiTransferRequest.setFileName(org.apache.commons.lang3.StringUtils.EMPTY);
apiTransferRequest.setOriginalName("api-mock_upload.JPG");
this.requestPost(BASE_PATH+ "transfer", apiTransferRequest).andExpect(status().isOk());
//文件不存在
apiTransferRequest.setFileId("111");
this.requestPost(BASE_PATH+ "transfer", apiTransferRequest).andExpect(status().is5xxServerError());
// 再插入一条数据便于修改时重名校验 // 再插入一条数据便于修改时重名校验
request.setName("重名接口定义test"); request.setName("重名接口定义test");

View File

@ -1,6 +1,7 @@
package io.metersphere.api.controller; package io.metersphere.api.controller;
import io.metersphere.api.service.ApiExecuteService; import io.metersphere.api.service.ApiExecuteService;
import io.metersphere.api.service.ApiFileResourceService;
import io.metersphere.api.service.debug.ApiDebugService; import io.metersphere.api.service.debug.ApiDebugService;
import io.metersphere.sdk.constants.DefaultRepositoryDir; import io.metersphere.sdk.constants.DefaultRepositoryDir;
import io.metersphere.sdk.constants.StorageType; import io.metersphere.sdk.constants.StorageType;
@ -40,6 +41,8 @@ public class ApiExecuteResourceControllerTest extends BaseTest {
private ApiExecuteService apiExecuteService; private ApiExecuteService apiExecuteService;
@Resource @Resource
private ApiDebugService apiDebugService; private ApiDebugService apiDebugService;
@Resource
private ApiFileResourceService apiFileResourceService;
@Override @Override
public String getBasePath() { public String getBasePath() {
@ -55,7 +58,7 @@ public class ApiExecuteResourceControllerTest extends BaseTest {
public void downloadFile() throws Exception { public void downloadFile() throws Exception {
String fileName = IDGenerator.nextStr() + "_file_upload.JPG"; String fileName = IDGenerator.nextStr() + "_file_upload.JPG";
MockMultipartFile file = new MockMultipartFile("file", fileName, MediaType.APPLICATION_OCTET_STREAM_VALUE, "aa".getBytes()); MockMultipartFile file = new MockMultipartFile("file", fileName, MediaType.APPLICATION_OCTET_STREAM_VALUE, "aa".getBytes());
String fileId = apiDebugService.uploadTempFile(file); String fileId = apiFileResourceService.uploadTempFile(file);
FileRequest fileRequest = new FileCopyRequest(); FileRequest fileRequest = new FileCopyRequest();
fileRequest.setFileName(fileName); fileRequest.setFileName(fileName);
fileRequest.setFolder(DefaultRepositoryDir.getSystemTempDir() + "/" + fileId); fileRequest.setFolder(DefaultRepositoryDir.getSystemTempDir() + "/" + fileId);

View File

@ -89,7 +89,7 @@ public class MockServerTestService {
List<ApiFileResource> apiFileResources = apiFileResourceService.getByResourceId(id); List<ApiFileResource> apiFileResources = apiFileResourceService.getByResourceId(id);
Assertions.assertEquals(apiFileResources.size(), fileIds.size()); Assertions.assertEquals(apiFileResources.size(), fileIds.size());
String apiDefinitionDir = DefaultRepositoryDir.getApiDefinitionDir(DEFAULT_PROJECT_ID, id); String apiDefinitionDir = DefaultRepositoryDir.getApiMockDir(DEFAULT_PROJECT_ID, id);
FileRequest fileRequest = new FileRequest(); FileRequest fileRequest = new FileRequest();
if (!fileIds.isEmpty()) { if (!fileIds.isEmpty()) {
for (ApiFileResource apiFileResource : apiFileResources) { for (ApiFileResource apiFileResource : apiFileResources) {