From 24e89c2c570b9d8067d0285e4fe50d8670f52ec3 Mon Sep 17 00:00:00 2001 From: luoylove Date: Mon, 28 Dec 2020 13:47:25 +0800 Subject: [PATCH 01/10] swaggerParser RefProperty bug fix (#994) Co-authored-by: luoyoujun --- .../main/java/io/metersphere/api/parse/Swagger2Parser.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java b/backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java index 8be3f760f7..4ce1a57eb0 100644 --- a/backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java +++ b/backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java @@ -283,6 +283,12 @@ public class Swagger2Parser extends ApiImportAbstractParser { } else { jsonObject.put(key, new ArrayList<>()); } + } else if (value instanceof RefProperty) { + RefProperty refProperty = (RefProperty) value; + String simpleRef = refProperty.getSimpleRef(); + refSet.add(simpleRef); + Model model = definitions.get(simpleRef); + jsonObject.put(key, getBodyParameters(model.getProperties(), refSet)); } else { jsonObject.put(key, getDefaultValueByPropertyType(value)); } From 0163e8673e057be9129db7bee631a61768755716 Mon Sep 17 00:00:00 2001 From: Guan <43517950+chenfanghang@users.noreply.github.com> Date: Mon, 28 Dec 2020 13:54:52 +0800 Subject: [PATCH 02/10] =?UTF-8?q?refactor(=E6=8E=A5=E5=8F=A3=E6=B5=8B?= =?UTF-8?q?=E8=AF=95):=E6=8E=A5=E5=8F=A3=E6=B5=8B=E8=AF=95=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=AE=BD=E5=BA=A6=E6=94=B9=E4=B8=BA=E5=8F=AF=E6=8B=96?= =?UTF-8?q?=E6=8B=BD=20(#914)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/test/components/ApiScenarioConfig.vue | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/frontend/src/business/components/api/test/components/ApiScenarioConfig.vue b/frontend/src/business/components/api/test/components/ApiScenarioConfig.vue index cff3eefaa8..604410b7c8 100644 --- a/frontend/src/business/components/api/test/components/ApiScenarioConfig.vue +++ b/frontend/src/business/components/api/test/components/ApiScenarioConfig.vue @@ -1,6 +1,6 @@ - - - - - @@ -56,15 +44,14 @@ import TestCaseRelevanceBase from "../base/TestCaseRelevanceBase"; import MsApiModule from "../../../../../api/definition/components/module/ApiModule"; - import {getCurrentProjectID} from "../../../../../../../common/js/utils"; - import ApiList from "../../../../../api/definition/components/list/ApiList"; - import ApiCaseSimpleList from "../../../../../api/definition/components/list/ApiCaseSimpleList"; + import RelevanceApiList from "../../../../../api/automation/scenario/api/RelevanceApiList"; + import RelevanceCaseList from "../../../../../api/automation/scenario/api/RelevanceCaseList"; export default { name: "TestCaseApiRelevance", components: { - ApiCaseSimpleList, - ApiList, + RelevanceCaseList, + RelevanceApiList, MsApiModule, TestCaseRelevanceBase, }, @@ -145,11 +132,6 @@ param.planId = this.planId; param.selectIds = selectIds; param.environmentId = environmentId; - // param.request = this.condition; - // 选择全选则全部加入到评审,无论是否加载完全部 - // if (this.testCases.length === param.testCaseIds.length) { - // param.testCaseIds = ['all']; - // } this.result = this.$post(url, param, () => { this.$success(this.$t('commons.save_success')); diff --git a/frontend/src/business/components/track/plan/view/comonents/base/TestCaseRelevanceBase.vue b/frontend/src/business/components/track/plan/view/comonents/base/TestCaseRelevanceBase.vue index 6be80f9c4e..e2a3f23ffc 100644 --- a/frontend/src/business/components/track/plan/view/comonents/base/TestCaseRelevanceBase.vue +++ b/frontend/src/business/components/track/plan/view/comonents/base/TestCaseRelevanceBase.vue @@ -1,55 +1,45 @@ diff --git a/frontend/src/common/js/tableUtils.js b/frontend/src/common/js/tableUtils.js index 44ed9b0cfa..fcd06333bd 100644 --- a/frontend/src/common/js/tableUtils.js +++ b/frontend/src/common/js/tableUtils.js @@ -29,12 +29,7 @@ export function _handleSelect(component, selection, row, selectRows) { selectRows.add(row); } let arr = Array.from(selectRows); - // 选中1个以上的用例时显示更多操作 - if (selectRows.size === 1) { - component.$set(arr[0], "showMore", false); - } else if (selectRows.size === 2) { - arr.forEach(row => { - component.$set(row, "showMore", true); - }) - } + arr.forEach(row => { + component.$set(row, "showMore", true); + }) } From 9ce507d201b28880e2ecfade2e3be22505d2bcba Mon Sep 17 00:00:00 2001 From: chenjianxing Date: Tue, 29 Dec 2020 15:32:57 +0800 Subject: [PATCH 08/10] =?UTF-8?q?refactor:=20=E6=B5=8B=E8=AF=95=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E8=8E=B7=E5=8F=96=E5=85=B3=E8=81=94=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ApiDefinitionController.java | 7 +++ .../dto/definition/ApiDefinitionRequest.java | 1 + .../api/service/ApiDefinitionService.java | 45 ++++++++++------- .../mapper/ext/ExtApiDefinitionMapper.java | 2 + .../mapper/ext/ExtApiDefinitionMapper.xml | 48 +++++++++++++++++++ .../mapper/ext/ExtTestPlanApiCaseMapper.xml | 20 +------- .../scenario/api/RelevanceApiList.vue | 8 +++- .../comonents/api/TestCaseApiRelevance.vue | 1 + 8 files changed, 95 insertions(+), 37 deletions(-) diff --git a/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java b/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java index 6be94e45a0..99180bed1d 100644 --- a/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java +++ b/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java @@ -41,6 +41,13 @@ public class ApiDefinitionController { return PageUtils.setPageInfo(page, apiDefinitionService.list(request)); } + @PostMapping("/list/relevance/{goPage}/{pageSize}") + public Pager> listRelevance(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody ApiDefinitionRequest request) { + Page page = PageHelper.startPage(goPage, pageSize, true); + request.setWorkspaceId(SessionUtils.getCurrentWorkspaceId()); + return PageUtils.setPageInfo(page, apiDefinitionService.listRelevance(request)); + } + @PostMapping("/list/all") public List list(@RequestBody ApiDefinitionRequest request) { return apiDefinitionService.list(request); diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/ApiDefinitionRequest.java b/backend/src/main/java/io/metersphere/api/dto/definition/ApiDefinitionRequest.java index 2a3cb83eea..9c18000c7d 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/ApiDefinitionRequest.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/ApiDefinitionRequest.java @@ -20,6 +20,7 @@ public class ApiDefinitionRequest { private String name; private String workspaceId; private String userId; + private String planId; private boolean recent = false; private List orders; private List filters; diff --git a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java index da1c4eed4a..e1ca7a75a0 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java @@ -78,23 +78,7 @@ public class ApiDefinitionService { public List list(ApiDefinitionRequest request) { request.setOrders(ServiceUtils.getDefaultOrder(request.getOrders())); List resList = extApiDefinitionMapper.list(request); - if (!resList.isEmpty()) { - List ids = resList.stream().map(ApiDefinitionResult::getId).collect(Collectors.toList()); - List results = extApiDefinitionMapper.selectByIds(ids); - Map resultMap = results.stream().collect(Collectors.toMap(ApiComputeResult::getApiDefinitionId, Function.identity())); - for (ApiDefinitionResult res : resList) { - ApiComputeResult compRes = resultMap.get(res.getId()); - if (compRes != null) { - res.setCaseTotal(compRes.getCaseTotal()); - res.setCasePassingRate(compRes.getPassRate()); - res.setCaseStatus(compRes.getStatus()); - } else { - res.setCaseTotal("-"); - res.setCasePassingRate("-"); - res.setCaseStatus("-"); - } - } - } + calculateResult(resList); return resList; } @@ -466,4 +450,31 @@ public class ApiDefinitionService { example.createCriteria().andIdIn(ids); return apiDefinitionMapper.selectByExample(example); } + + public List listRelevance(ApiDefinitionRequest request) { + request.setOrders(ServiceUtils.getDefaultOrder(request.getOrders())); + List resList = extApiDefinitionMapper.listRelevance(request); + calculateResult(resList); + return resList; + } + + public void calculateResult(List resList) { + if (!resList.isEmpty()) { + List ids = resList.stream().map(ApiDefinitionResult::getId).collect(Collectors.toList()); + List results = extApiDefinitionMapper.selectByIds(ids); + Map resultMap = results.stream().collect(Collectors.toMap(ApiComputeResult::getApiDefinitionId, Function.identity())); + for (ApiDefinitionResult res : resList) { + ApiComputeResult compRes = resultMap.get(res.getId()); + if (compRes != null) { + res.setCaseTotal(compRes.getCaseTotal()); + res.setCasePassingRate(compRes.getPassRate()); + res.setCaseStatus(compRes.getStatus()); + } else { + res.setCaseTotal("-"); + res.setCasePassingRate("-"); + res.setCaseStatus("-"); + } + } + } + } } diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.java b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.java index 30702b8122..e4576036f1 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.java +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.java @@ -28,4 +28,6 @@ public interface ExtApiDefinitionMapper { List countApiCoverageByProjectID(String projectId); ApiDefinition getNextNum(@Param("projectId") String projectId); + + List listRelevance(@Param("request")ApiDefinitionRequest request); } \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.xml index c6c91a5300..869ed0906f 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.xml @@ -295,4 +295,52 @@ + + \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanApiCaseMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanApiCaseMapper.xml index 55291b8a4d..d126e3372c 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanApiCaseMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanApiCaseMapper.xml @@ -19,7 +19,7 @@ select t.id, t.environment_id, t.create_time, t.update_time, c.id as case_id, c.project_id, c.name, c.api_definition_id, c.priority, c.description, c.create_user_id, c.update_user_id, - a.module_id, a.path, a.protocol, ader.status execResult + a.module_id, a.path, a.protocol, t.status execResult from test_plan_api_case t inner join @@ -32,24 +32,6 @@ api_definition a on c.api_definition_id = a.id - left join ( - select - e.status, e.id, e.resource_id - from - api_definition_exec_result e - left join ( - select - max(start_time) start_time , resource_id - from - api_definition_exec_result - group by - resource_id - ) as b - on e.resource_id = b.resource_id - where - e.start_time = b.start_time and e.type = 'API_PLAN' - ) as ader - on t.id = ader.resource_id and a.protocol = #{request.protocol} diff --git a/frontend/src/business/components/api/automation/scenario/api/RelevanceApiList.vue b/frontend/src/business/components/api/automation/scenario/api/RelevanceApiList.vue index 2ec3dfe33a..0ef1ed56f5 100644 --- a/frontend/src/business/components/api/automation/scenario/api/RelevanceApiList.vue +++ b/frontend/src/business/components/api/automation/scenario/api/RelevanceApiList.vue @@ -156,6 +156,7 @@ default: false, }, projectId: String, + planId: String, isTestPlan: Boolean }, created: function () { @@ -194,7 +195,12 @@ if (this.currentProtocol != null) { this.condition.protocol = this.currentProtocol; } - this.result = this.$post("/api/definition/list/" + this.currentPage + "/" + this.pageSize, this.condition, response => { + let url = '/api/definition/list/'; + if (this.isTestPlan) { + url = '/api/definition/list/relevance/'; + this.condition.planId = this.planId; + } + this.result = this.$post(url + this.currentPage + "/" + this.pageSize, this.condition, response => { this.total = response.data.itemCount; this.tableData = response.data.listObject; }); diff --git a/frontend/src/business/components/track/plan/view/comonents/api/TestCaseApiRelevance.vue b/frontend/src/business/components/track/plan/view/comonents/api/TestCaseApiRelevance.vue index a4d9f046f4..2f52de0af6 100644 --- a/frontend/src/business/components/track/plan/view/comonents/api/TestCaseApiRelevance.vue +++ b/frontend/src/business/components/track/plan/view/comonents/api/TestCaseApiRelevance.vue @@ -23,6 +23,7 @@ :is-api-list-enable="isApiListEnable" :project-id="projectId" :is-test-plan="true" + :plan-id="planId" @isApiListEnableChange="isApiListEnableChange" ref="apiList"/> From 62ac695a0b352216a9a97195d787ebc243525838 Mon Sep 17 00:00:00 2001 From: chenjianxing Date: Tue, 29 Dec 2020 16:43:29 +0800 Subject: [PATCH 09/10] =?UTF-8?q?refactor:=20=E6=B5=8B=E8=AF=95=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E5=85=B3=E8=81=94=E5=88=97=E8=A1=A8=E5=8F=AA=E5=88=97?= =?UTF-8?q?=E5=87=BA=E6=9C=89=E6=9C=AA=E5=85=B3=E8=81=94=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/mapper/ext/ExtApiDefinitionMapper.xml | 17 ++++++++++++++--- .../scenario/api/RelevanceApiList.vue | 5 ----- .../scenario/api/RelevanceCaseList.vue | 9 ++++++++- .../view/comonents/api/TestCaseApiRelevance.vue | 13 +++++++++++++ .../plan/view/comonents/api/TestPlanApi.vue | 12 ------------ 5 files changed, 35 insertions(+), 21 deletions(-) diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.xml index 869ed0906f..2ca103606a 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionMapper.xml @@ -297,10 +297,20 @@