refactor(接口测试): 优化回收站恢复数据逻辑并增加提示信息 (#15594)
--bug=1014719 --user=王孝刚 【接口测试】接口定义-导入的swagger接口被删除了,所属模块也被删除,再次导入这个接口成功,恢复被删除的接口时没提示接口重复,恢复到未规划模块列表中 https://www.tapd.cn/55049933/s/1197263 Co-authored-by: wxg0103 <727495428@qq.com>
This commit is contained in:
parent
2c390991e2
commit
3ccd5a055b
|
@ -263,7 +263,7 @@ public class ApiAutomationService {
|
||||||
msScenario.setHashTree(new LinkedList<>());
|
msScenario.setHashTree(new LinkedList<>());
|
||||||
request.setScenarioDefinition(msScenario);
|
request.setScenarioDefinition(msScenario);
|
||||||
}
|
}
|
||||||
checkNameExist(request);
|
checkNameExist(request, false);
|
||||||
int nextNum = getNextNum(request.getProjectId());
|
int nextNum = getNextNum(request.getProjectId());
|
||||||
if (StringUtils.isBlank(request.getCustomNum())) {
|
if (StringUtils.isBlank(request.getCustomNum())) {
|
||||||
request.setCustomNum(String.valueOf(nextNum));
|
request.setCustomNum(String.valueOf(nextNum));
|
||||||
|
@ -365,7 +365,7 @@ public class ApiAutomationService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ApiScenario update(SaveApiScenarioRequest request, List<MultipartFile> bodyFiles, List<MultipartFile> scenarioFiles) {
|
public ApiScenario update(SaveApiScenarioRequest request, List<MultipartFile> bodyFiles, List<MultipartFile> scenarioFiles) {
|
||||||
checkNameExist(request);
|
checkNameExist(request, false);
|
||||||
checkScenarioNum(request);
|
checkScenarioNum(request);
|
||||||
|
|
||||||
//检查场景的请求步骤。如果含有ESB请求步骤的话,要做参数计算处理。
|
//检查场景的请求步骤。如果含有ESB请求步骤的话,要做参数计算处理。
|
||||||
|
@ -641,8 +641,23 @@ public class ApiAutomationService {
|
||||||
example.createCriteria().andIdIn(scenarioIds);
|
example.createCriteria().andIdIn(scenarioIds);
|
||||||
List<ApiScenario> scenarioList = apiScenarioMapper.selectByExample(example);
|
List<ApiScenario> scenarioList = apiScenarioMapper.selectByExample(example);
|
||||||
Map<String, List<ApiScenario>> nodeMap = new HashMap<>();
|
Map<String, List<ApiScenario>> nodeMap = new HashMap<>();
|
||||||
|
ApiScenarioModuleService apiScenarioModuleService = CommonBeanFactory.getBean(ApiScenarioModuleService.class);
|
||||||
for (ApiScenario api : scenarioList) {
|
for (ApiScenario api : scenarioList) {
|
||||||
|
//检查是否同名
|
||||||
|
SaveApiScenarioRequest apiScenarioRequest = new SaveApiScenarioRequest();
|
||||||
|
apiScenarioRequest.setProjectId(api.getProjectId());
|
||||||
|
apiScenarioRequest.setName(api.getName());
|
||||||
|
apiScenarioRequest.setId(api.getId());
|
||||||
|
apiScenarioRequest.setApiScenarioModuleId(api.getApiScenarioModuleId());
|
||||||
|
apiScenarioRequest.setModulePath(api.getModulePath());
|
||||||
|
apiScenarioRequest.setVersionId(extProjectVersionMapper.getDefaultVersion(request.getProjectId()));
|
||||||
String moduleId = api.getApiScenarioModuleId();
|
String moduleId = api.getApiScenarioModuleId();
|
||||||
|
long nodeCount = apiScenarioModuleService.countById(moduleId);
|
||||||
|
if (nodeCount <= 0) {
|
||||||
|
checkNameExist(apiScenarioRequest, true);
|
||||||
|
} else {
|
||||||
|
checkNameExist(apiScenarioRequest, false);
|
||||||
|
}
|
||||||
if (StringUtils.isEmpty(moduleId)) {
|
if (StringUtils.isEmpty(moduleId)) {
|
||||||
moduleId = "";
|
moduleId = "";
|
||||||
}
|
}
|
||||||
|
@ -654,7 +669,6 @@ public class ApiAutomationService {
|
||||||
nodeMap.put(moduleId, list);
|
nodeMap.put(moduleId, list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ApiScenarioModuleService apiScenarioModuleService = CommonBeanFactory.getBean(ApiScenarioModuleService.class);
|
|
||||||
for (Map.Entry<String, List<ApiScenario>> entry : nodeMap.entrySet()) {
|
for (Map.Entry<String, List<ApiScenario>> entry : nodeMap.entrySet()) {
|
||||||
String nodeId = entry.getKey();
|
String nodeId = entry.getKey();
|
||||||
List<ApiScenario> scenariosListItem = entry.getValue();
|
List<ApiScenario> scenariosListItem = entry.getValue();
|
||||||
|
@ -681,20 +695,26 @@ public class ApiAutomationService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkNameExist(SaveApiScenarioRequest request) {
|
private void checkNameExist(SaveApiScenarioRequest request, Boolean moduleIdNotExist) {
|
||||||
if (StringUtils.isEmpty(request.getVersionId())) {
|
if (StringUtils.isEmpty(request.getVersionId())) {
|
||||||
request.setVersionId(extProjectVersionMapper.getDefaultVersion(request.getProjectId()));
|
request.setVersionId(extProjectVersionMapper.getDefaultVersion(request.getProjectId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
ApiScenarioExample example = new ApiScenarioExample();
|
ApiScenarioExample example = new ApiScenarioExample();
|
||||||
example.createCriteria().andNameEqualTo(request.getName())
|
ApiScenarioExample.Criteria criteria = example.createCriteria();
|
||||||
|
criteria.andNameEqualTo(request.getName())
|
||||||
.andProjectIdEqualTo(request.getProjectId())
|
.andProjectIdEqualTo(request.getProjectId())
|
||||||
.andStatusNotEqualTo("Trash")
|
.andStatusNotEqualTo("Trash")
|
||||||
.andIdNotEqualTo(request.getId())
|
.andIdNotEqualTo(request.getId())
|
||||||
.andVersionIdEqualTo(request.getVersionId())
|
.andVersionIdEqualTo(request.getVersionId())
|
||||||
.andApiScenarioModuleIdEqualTo(request.getApiScenarioModuleId());
|
.andApiScenarioModuleIdEqualTo(request.getApiScenarioModuleId());
|
||||||
|
if (moduleIdNotExist) {
|
||||||
|
criteria.andModulePathEqualTo(request.getModulePath());
|
||||||
|
} else {
|
||||||
|
criteria.andApiScenarioModuleIdEqualTo(request.getApiScenarioModuleId());
|
||||||
|
}
|
||||||
if (apiScenarioMapper.countByExample(example) > 0) {
|
if (apiScenarioMapper.countByExample(example) > 0) {
|
||||||
MSException.throwException(Translator.get("automation_name_already_exists"));
|
MSException.throwException(Translator.get("automation_name_already_exists") + " :" + Translator.get("api_definition_module") + request.getModulePath() + " ," + Translator.get("automation_name") + " :" + request.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -471,17 +471,22 @@ public class ApiDefinitionService {
|
||||||
for (ApiDefinition apiDefinition : reductionCaseList) {
|
for (ApiDefinition apiDefinition : reductionCaseList) {
|
||||||
//检查是否同名
|
//检查是否同名
|
||||||
SaveApiDefinitionRequest apiDefinitionRequest = new SaveApiDefinitionRequest();
|
SaveApiDefinitionRequest apiDefinitionRequest = new SaveApiDefinitionRequest();
|
||||||
apiDefinitionRequest.setProjectId(request.getProjectId());
|
apiDefinitionRequest.setProjectId(apiDefinition.getProjectId());
|
||||||
apiDefinitionRequest.setMethod(apiDefinition.getMethod());
|
apiDefinitionRequest.setMethod(apiDefinition.getMethod());
|
||||||
apiDefinitionRequest.setProtocol(apiDefinition.getProtocol());
|
apiDefinitionRequest.setProtocol(apiDefinition.getProtocol());
|
||||||
apiDefinitionRequest.setPath(apiDefinition.getPath());
|
apiDefinitionRequest.setPath(apiDefinition.getPath());
|
||||||
apiDefinitionRequest.setName(apiDefinition.getName());
|
apiDefinitionRequest.setName(apiDefinition.getName());
|
||||||
apiDefinitionRequest.setId(apiDefinition.getId());
|
apiDefinitionRequest.setId(apiDefinition.getId());
|
||||||
apiDefinitionRequest.setModuleId(apiDefinition.getModuleId());
|
apiDefinitionRequest.setModuleId(apiDefinition.getModuleId());
|
||||||
apiDefinitionRequest.setVersionId(extProjectVersionMapper.getDefaultVersion(request.getProjectId()));
|
apiDefinitionRequest.setModulePath(apiDefinition.getModulePath());
|
||||||
checkNameExist(apiDefinitionRequest);
|
|
||||||
|
|
||||||
String moduleId = apiDefinition.getModuleId();
|
String moduleId = apiDefinition.getModuleId();
|
||||||
|
long nodeCount = apiModuleService.countById(moduleId);
|
||||||
|
if (nodeCount <= 0) {
|
||||||
|
checkNameExist(apiDefinitionRequest, true);
|
||||||
|
} else {
|
||||||
|
checkNameExist(apiDefinitionRequest, false);
|
||||||
|
}
|
||||||
|
|
||||||
if (StringUtils.isEmpty(moduleId)) {
|
if (StringUtils.isEmpty(moduleId)) {
|
||||||
moduleId = "";
|
moduleId = "";
|
||||||
}
|
}
|
||||||
|
@ -526,42 +531,52 @@ public class ApiDefinitionService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkNameExist(SaveApiDefinitionRequest request) {
|
private void checkNameExist(SaveApiDefinitionRequest request, Boolean moduleIdNotExist) {
|
||||||
if (StringUtils.isEmpty(request.getVersionId())) {
|
if (StringUtils.isEmpty(request.getVersionId())) {
|
||||||
request.setVersionId(extProjectVersionMapper.getDefaultVersion(request.getProjectId()));
|
request.setVersionId(extProjectVersionMapper.getDefaultVersion(request.getProjectId()));
|
||||||
}
|
}
|
||||||
ApiDefinitionExample example = new ApiDefinitionExample();
|
ApiDefinitionExample example = new ApiDefinitionExample();
|
||||||
|
ApiDefinitionExample.Criteria criteria = example.createCriteria();
|
||||||
if (StringUtils.isNotEmpty(request.getProtocol()) && request.getProtocol().equals(RequestType.HTTP)) {
|
if (StringUtils.isNotEmpty(request.getProtocol()) && request.getProtocol().equals(RequestType.HTTP)) {
|
||||||
ApiDefinitionExample.Criteria criteria = example.createCriteria();
|
|
||||||
criteria.andMethodEqualTo(request.getMethod()).andStatusNotEqualTo("Trash")
|
criteria.andMethodEqualTo(request.getMethod()).andStatusNotEqualTo("Trash")
|
||||||
.andProtocolEqualTo(request.getProtocol()).andPathEqualTo(request.getPath())
|
.andProtocolEqualTo(request.getProtocol()).andPathEqualTo(request.getPath())
|
||||||
.andProjectIdEqualTo(request.getProjectId()).andIdNotEqualTo(request.getId())
|
.andProjectIdEqualTo(request.getProjectId()).andIdNotEqualTo(request.getId())
|
||||||
.andVersionIdEqualTo(request.getVersionId()).andModuleIdEqualTo(request.getModuleId());
|
.andVersionIdEqualTo(request.getVersionId());
|
||||||
Project project = projectMapper.selectByPrimaryKey(request.getProjectId());
|
Project project = projectMapper.selectByPrimaryKey(request.getProjectId());
|
||||||
ProjectConfig config = projectApplicationService.getSpecificTypeValue(project.getId(), ProjectApplicationType.URL_REPEATABLE.name());
|
ProjectConfig config = projectApplicationService.getSpecificTypeValue(project.getId(), ProjectApplicationType.URL_REPEATABLE.name());
|
||||||
boolean urlRepeat = config.getUrlRepeatable();
|
boolean urlRepeat = config.getUrlRepeatable();
|
||||||
|
if (moduleIdNotExist) {
|
||||||
|
criteria.andModulePathEqualTo(request.getModulePath());
|
||||||
|
} else {
|
||||||
|
criteria.andModuleIdEqualTo(request.getModuleId());
|
||||||
|
}
|
||||||
if (project != null && urlRepeat) {
|
if (project != null && urlRepeat) {
|
||||||
criteria.andNameEqualTo(request.getName());
|
criteria.andNameEqualTo(request.getName());
|
||||||
if (apiDefinitionMapper.countByExample(example) > 0) {
|
if (apiDefinitionMapper.countByExample(example) > 0) {
|
||||||
MSException.throwException(Translator.get("api_definition_name_not_repeating"));
|
MSException.throwException(Translator.get("api_definition_name_not_repeating") + " :" + Translator.get("api_definition_module") + ":" + request.getModulePath() + " ," + Translator.get("api_definition_name") + " :" + request.getName() + "-" + request.getPath());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (apiDefinitionMapper.countByExample(example) > 0) {
|
if (apiDefinitionMapper.countByExample(example) > 0) {
|
||||||
MSException.throwException(Translator.get("api_definition_url_not_repeating"));
|
MSException.throwException(Translator.get("api_definition_url_not_repeating") + " :" + Translator.get("api_definition_module") + ":" + request.getModulePath() + " ," + Translator.get("api_definition_name") + " :" + request.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
example.createCriteria().andProtocolEqualTo(request.getProtocol()).andStatusNotEqualTo("Trash")
|
criteria.andProtocolEqualTo(request.getProtocol()).andStatusNotEqualTo("Trash")
|
||||||
.andNameEqualTo(request.getName()).andProjectIdEqualTo(request.getProjectId())
|
.andNameEqualTo(request.getName()).andProjectIdEqualTo(request.getProjectId())
|
||||||
.andIdNotEqualTo(request.getId()).andVersionIdEqualTo(request.getVersionId()).andModuleIdEqualTo(request.getModuleId());
|
.andIdNotEqualTo(request.getId()).andVersionIdEqualTo(request.getVersionId());
|
||||||
|
if (moduleIdNotExist) {
|
||||||
|
criteria.andModulePathEqualTo(request.getModulePath());
|
||||||
|
} else {
|
||||||
|
criteria.andModuleIdEqualTo(request.getModuleId());
|
||||||
|
}
|
||||||
if (apiDefinitionMapper.countByExample(example) > 0) {
|
if (apiDefinitionMapper.countByExample(example) > 0) {
|
||||||
MSException.throwException(Translator.get("load_test_already_exists"));
|
MSException.throwException(Translator.get("api_definition_name_already_exists") + " :" + Translator.get("api_definition_module") + ":" + request.getModulePath() + " ," + Translator.get("api_definition_name") + " :" + request.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ApiDefinitionWithBLOBs updateTest(SaveApiDefinitionRequest request) {
|
private ApiDefinitionWithBLOBs updateTest(SaveApiDefinitionRequest request) {
|
||||||
checkNameExist(request);
|
checkNameExist(request, false);
|
||||||
if (StringUtils.equals(request.getMethod(), "ESB")) {
|
if (StringUtils.equals(request.getMethod(), "ESB")) {
|
||||||
//ESB的接口类型数据,采用TCP方式去发送。并将方法类型改为TCP。 并修改发送数据
|
//ESB的接口类型数据,采用TCP方式去发送。并将方法类型改为TCP。 并修改发送数据
|
||||||
request = esbApiParamService.handleEsbRequest(request);
|
request = esbApiParamService.handleEsbRequest(request);
|
||||||
|
@ -707,7 +722,7 @@ public class ApiDefinitionService {
|
||||||
}
|
}
|
||||||
|
|
||||||
private ApiDefinitionResult createTest(SaveApiDefinitionRequest request) {
|
private ApiDefinitionResult createTest(SaveApiDefinitionRequest request) {
|
||||||
checkNameExist(request);
|
checkNameExist(request, false);
|
||||||
if (StringUtils.equals(request.getMethod(), "ESB")) {
|
if (StringUtils.equals(request.getMethod(), "ESB")) {
|
||||||
//ESB的接口类型数据,采用TCP方式去发送。并将方法类型改为TCP。 并修改发送数据
|
//ESB的接口类型数据,采用TCP方式去发送。并将方法类型改为TCP。 并修改发送数据
|
||||||
request = esbApiParamService.handleEsbRequest(request);
|
request = esbApiParamService.handleEsbRequest(request);
|
||||||
|
|
|
@ -227,13 +227,17 @@ upload_content_is_null=Imported content is empty
|
||||||
test_plan_notification=Test plan notification
|
test_plan_notification=Test plan notification
|
||||||
task_defect_notification=Task defect notification
|
task_defect_notification=Task defect notification
|
||||||
task_notification_=Timing task result notification
|
task_notification_=Timing task result notification
|
||||||
api_definition_url_not_repeating=The interface request address already exists
|
api_definition_url_not_repeating=The interface request address already exists under the same module
|
||||||
api_definition_name_not_repeating=The same name-url combination already exists
|
api_definition_name_not_repeating=The same name-url combination already exists under the same module
|
||||||
|
api_definition_name_already_exists=Interface names under the same module cannot be repeated
|
||||||
|
api_definition_module=The module path is
|
||||||
task_notification_jenkins=Jenkins Task notification
|
task_notification_jenkins=Jenkins Task notification
|
||||||
|
api_definition_name=Interface
|
||||||
task_notification=Result notification
|
task_notification=Result notification
|
||||||
message_task_already_exists=Task recipient already exists
|
message_task_already_exists=Task recipient already exists
|
||||||
#automation
|
#automation
|
||||||
automation_name_already_exists=the scenario already exists in the module of the same project
|
automation_name_already_exists=the scenario already exists in the module of the same project
|
||||||
|
automation_name=Scenario
|
||||||
automation_exec_info=There are no test steps to execute
|
automation_exec_info=There are no test steps to execute
|
||||||
delete_check_reference_by=be referenced by Scenario
|
delete_check_reference_by=be referenced by Scenario
|
||||||
not_execute=Not execute
|
not_execute=Not execute
|
||||||
|
|
|
@ -227,13 +227,17 @@ upload_content_is_null=导入内容为空
|
||||||
test_plan_notification=测试计划通知
|
test_plan_notification=测试计划通知
|
||||||
task_defect_notification=缺陷任务通知
|
task_defect_notification=缺陷任务通知
|
||||||
task_notification_=定时任务结果通知
|
task_notification_=定时任务结果通知
|
||||||
api_definition_url_not_repeating=接口请求地址已经存在
|
api_definition_url_not_repeating=同一模块下接口请求地址已经存在
|
||||||
api_definition_name_not_repeating=相同的名称-url组合已存在
|
api_definition_name_not_repeating=同一模块下相同的名称-url组合已存在
|
||||||
|
api_definition_name_already_exists=同一模块下接口名称不能重复
|
||||||
|
api_definition_module=模块路径为
|
||||||
|
api_definition_name=接口
|
||||||
task_notification_jenkins=jenkins任务通知
|
task_notification_jenkins=jenkins任务通知
|
||||||
task_notification=任务通知
|
task_notification=任务通知
|
||||||
message_task_already_exists=任务接收人已经存在
|
message_task_already_exists=任务接收人已经存在
|
||||||
#automation
|
#automation
|
||||||
automation_name_already_exists=同一个项目的同一模块下,场景名称不能重复
|
automation_name_already_exists=同一个项目的同一模块下,场景名称不能重复
|
||||||
|
automation_name=场景
|
||||||
automation_exec_info=没有测试步骤,无法执行
|
automation_exec_info=没有测试步骤,无法执行
|
||||||
delete_check_reference_by=被场景引用
|
delete_check_reference_by=被场景引用
|
||||||
not_execute=未执行
|
not_execute=未执行
|
||||||
|
|
|
@ -226,13 +226,17 @@ upload_content_is_null=導入內容為空
|
||||||
test_plan_notification=測試計劃通知
|
test_plan_notification=測試計劃通知
|
||||||
task_defect_notification=缺陷任務通知
|
task_defect_notification=缺陷任務通知
|
||||||
task_notification_=定時任務結果通知
|
task_notification_=定時任務結果通知
|
||||||
api_definition_url_not_repeating=接口請求地址已經存在
|
api_definition_url_not_repeating=同一模塊下介面請求地址已經存在
|
||||||
api_definition_name_not_repeating=相同的名稱-url組合已存在
|
api_definition_name_not_repeating=同一模塊下相同的名稱-url組合已存在
|
||||||
|
api_definition_name_already_exists=同一模塊下介面名稱不能重複
|
||||||
|
api_definition_module=模塊路徑為
|
||||||
|
api_definition_name=介面
|
||||||
task_notification_jenkins=jenkins任務通知
|
task_notification_jenkins=jenkins任務通知
|
||||||
task_notification=任務通知
|
task_notification=任務通知
|
||||||
message_task_already_exists=任務接收人已經存在
|
message_task_already_exists=任務接收人已經存在
|
||||||
#automation
|
#automation
|
||||||
automation_name_already_exists=同一個項目同一模塊下,場景名稱不能重復
|
automation_name_already_exists=同一個項目同一模塊下,場景名稱不能重復
|
||||||
|
automation_name=場景
|
||||||
automation_exec_info=沒有測試步驟,無法執行
|
automation_exec_info=沒有測試步驟,無法執行
|
||||||
delete_check_reference_by=被場景引用
|
delete_check_reference_by=被場景引用
|
||||||
not_execute=未執行
|
not_execute=未執行
|
||||||
|
|
Loading…
Reference in New Issue