From 6c054c80d15fde3eb29e7ca19296cdad3ad0542e Mon Sep 17 00:00:00 2001 From: chenjianxing Date: Fri, 26 Nov 2021 15:41:29 +0800 Subject: [PATCH 001/256] =?UTF-8?q?refactor:=20=E5=90=8C=E6=AD=A5=E7=BC=BA?= =?UTF-8?q?=E9=99=B7=E7=9A=84=E5=88=9B=E5=BB=BA=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/metersphere/commons/utils/ServiceUtils.java | 4 ++++ .../metersphere/track/issue/AbstractIssuePlatform.java | 8 +++----- .../java/io/metersphere/track/issue/JiraPlatform.java | 1 + .../java/io/metersphere/track/issue/TapdPlatform.java | 2 ++ .../java/io/metersphere/track/issue/ZentaoPlatform.java | 9 +++++++++ .../java/io/metersphere/track/service/IssuesService.java | 2 +- backend/src/main/java/io/metersphere/xpack | 2 +- frontend/src/network/test-plan.js | 3 ++- 8 files changed, 23 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/io/metersphere/commons/utils/ServiceUtils.java b/backend/src/main/java/io/metersphere/commons/utils/ServiceUtils.java index 6d69db11eb..7c04b0ad8c 100644 --- a/backend/src/main/java/io/metersphere/commons/utils/ServiceUtils.java +++ b/backend/src/main/java/io/metersphere/commons/utils/ServiceUtils.java @@ -58,6 +58,10 @@ public class ServiceUtils { return orders; } + public static List getDefaultOrderByField(List orders, String field) { + return getDefaultOrderByField(null, orders, field); + } + /** * 获取前端全选的id列表 * diff --git a/backend/src/main/java/io/metersphere/track/issue/AbstractIssuePlatform.java b/backend/src/main/java/io/metersphere/track/issue/AbstractIssuePlatform.java index e1193f5c7b..d5682f3d0a 100644 --- a/backend/src/main/java/io/metersphere/track/issue/AbstractIssuePlatform.java +++ b/backend/src/main/java/io/metersphere/track/issue/AbstractIssuePlatform.java @@ -401,10 +401,11 @@ public abstract class AbstractIssuePlatform implements IssuesPlatform { } protected Map getUuIdMap(List issues) { + HashMap issueMap = new HashMap<>(); if (org.apache.commons.collections.CollectionUtils.isNotEmpty(issues)) { - return issues.stream().collect(Collectors.toMap(Issues::getPlatformId, i -> i)); + issues.forEach(item -> issueMap.put(item.getPlatformId(), item)); } - return new HashMap<>(); + return issueMap; } protected void deleteSyncIssue(List ids) { @@ -456,10 +457,7 @@ public abstract class AbstractIssuePlatform implements IssuesPlatform { issue.setProjectId(projectId); issue.setId(UUID.randomUUID().toString()); issue.setPlatformId(platformId); - issue.setCreateTime(System.currentTimeMillis()); - issue.setUpdateTime(System.currentTimeMillis()); issue.setCreator(SessionUtils.getUserId()); issue.setNum(nextNum); - issuesMapper.insert(issue); // 批量新增 } } diff --git a/backend/src/main/java/io/metersphere/track/issue/JiraPlatform.java b/backend/src/main/java/io/metersphere/track/issue/JiraPlatform.java index b1266e6598..4933644f23 100644 --- a/backend/src/main/java/io/metersphere/track/issue/JiraPlatform.java +++ b/backend/src/main/java/io/metersphere/track/issue/JiraPlatform.java @@ -76,6 +76,7 @@ public class JiraPlatform extends AbstractIssuePlatform { JSONObject assignee = (JSONObject) fields.get("assignee"); issue.setTitle(fields.getString("summary")); issue.setCreateTime(fields.getLong("created")); + issue.setUpdateTime(fields.getLong("updated")); issue.setLastmodify(assignee == null ? "" : assignee.getString("displayName")); issue.setDescription(description); issue.setPlatformStatus(status); diff --git a/backend/src/main/java/io/metersphere/track/issue/TapdPlatform.java b/backend/src/main/java/io/metersphere/track/issue/TapdPlatform.java index 62590d9e11..e370617cfb 100644 --- a/backend/src/main/java/io/metersphere/track/issue/TapdPlatform.java +++ b/backend/src/main/java/io/metersphere/track/issue/TapdPlatform.java @@ -240,6 +240,8 @@ public class TapdPlatform extends AbstractIssuePlatform { issue.setDescription(htmlDesc2MsDesc(issue.getDescription())); issue.setCustomFields(syncIssueCustomField(issue.getCustomFields(), bug)); issue.setPlatform(key); + issue.setCreateTime(bug.getLong("created")); + issue.setUpdateTime(bug.getLong("modified")); return issue; } diff --git a/backend/src/main/java/io/metersphere/track/issue/ZentaoPlatform.java b/backend/src/main/java/io/metersphere/track/issue/ZentaoPlatform.java index 8a1c750cc4..d066f2c4ca 100644 --- a/backend/src/main/java/io/metersphere/track/issue/ZentaoPlatform.java +++ b/backend/src/main/java/io/metersphere/track/issue/ZentaoPlatform.java @@ -143,6 +143,15 @@ public class ZentaoPlatform extends AbstractIssuePlatform { issue.setDescription(steps); issue.setReporter(bugObj.getOpenedBy()); issue.setPlatform(key); + try { + issue.setCreateTime(bug.getLong("openedDate")); + issue.setUpdateTime(bug.getLong("lastEditedDate")); + } catch (Exception e) { + LogUtil.error("update zentao time" + e.getMessage()); + } + if (issue.getUpdateTime() == null) { + issue.setUpdateTime(System.currentTimeMillis()); + } issue.setCustomFields(syncIssueCustomField(issue.getCustomFields(), bug)); return issue; } diff --git a/backend/src/main/java/io/metersphere/track/service/IssuesService.java b/backend/src/main/java/io/metersphere/track/service/IssuesService.java index e00055144a..83240c91d1 100644 --- a/backend/src/main/java/io/metersphere/track/service/IssuesService.java +++ b/backend/src/main/java/io/metersphere/track/service/IssuesService.java @@ -338,7 +338,7 @@ public class IssuesService { } public List list(IssuesRequest request) { - request.setOrders(ServiceUtils.getDefaultOrder(request.getOrders())); + request.setOrders(ServiceUtils.getDefaultOrderByField(request.getOrders(), "create_time")); List issues = extIssuesMapper.getIssues(request); List ids = issues.stream() diff --git a/backend/src/main/java/io/metersphere/xpack b/backend/src/main/java/io/metersphere/xpack index 044899d938..269d23d500 160000 --- a/backend/src/main/java/io/metersphere/xpack +++ b/backend/src/main/java/io/metersphere/xpack @@ -1 +1 @@ -Subproject commit 044899d93802a7a30ba7453aaa58bd78af3a84a9 +Subproject commit 269d23d5004ee49a9e82a977027ca72757d3056a diff --git a/frontend/src/network/test-plan.js b/frontend/src/network/test-plan.js index 306f54ddbd..2c69395dfc 100644 --- a/frontend/src/network/test-plan.js +++ b/frontend/src/network/test-plan.js @@ -142,5 +142,6 @@ export function editTestPlanLoadCaseOrder(request, callback) { } export function getPlanStageOption(callback) { - return baseGet('/test/plan/get/stage/option/' + getCurrentWorkspaceId(), callback); + let wId = getCurrentWorkspaceId(); + return wId ? baseGet('/test/plan/get/stage/option/' + wId, callback) : {}; } From 619f2c283dc73fc73a3117651c2c2acbbe2d23d4 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Fri, 26 Nov 2021 15:36:54 +0800 Subject: [PATCH 002/256] =?UTF-8?q?fix(=E6=B6=88=E6=81=AF=E9=80=9A?= =?UTF-8?q?=E7=9F=A5):=20=E4=BF=AE=E6=94=B9=E6=8E=A5=E5=8F=A3=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8C=96=E9=80=9A=E7=9F=A5=E7=9A=84=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1008385 --user=刘瑞斌 【消息通知】jenkins执行场景,机器人通知文案优化 https://www.tapd.cn/55049933/s/1075569 --- .../java/io/metersphere/api/service/TestResultService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/io/metersphere/api/service/TestResultService.java b/backend/src/main/java/io/metersphere/api/service/TestResultService.java index 9fe412c105..c866024815 100644 --- a/backend/src/main/java/io/metersphere/api/service/TestResultService.java +++ b/backend/src/main/java/io/metersphere/api/service/TestResultService.java @@ -187,8 +187,8 @@ public class TestResultService { String subject = ""; String event = ""; - String successContext = "${operator}执行接口测试成功: ${name}" + ", 报告: ${reportUrl}"; - String failedContext = "${operator}执行接口测试失败: ${name}" + ", 报告: ${reportUrl}"; + String successContext = "${operator}执行接口自动化成功: ${name}" + ", 报告: ${reportUrl}"; + String failedContext = "${operator}执行接口自动化失败: ${name}" + ", 报告: ${reportUrl}"; if (StringUtils.equals(ReportTriggerMode.API.name(), report.getTriggerMode())) { subject = Translator.get("task_notification_jenkins"); From bf4f980757a5612fe3cde1dc814de8691240bce7 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Fri, 26 Nov 2021 16:00:24 +0800 Subject: [PATCH 003/256] =?UTF-8?q?build:=20=E6=8C=87=E5=AE=9Aguava?= =?UTF-8?q?=E7=9A=84=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/backend/pom.xml b/backend/pom.xml index 952fbe8070..ce7b3ed658 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -464,6 +464,13 @@ 2.4 jdk15 + + + guava + com.google.guava + 31.0.1-jre + + From fb6edca586629ed567e508b70a6e2bf72dbdeed7 Mon Sep 17 00:00:00 2001 From: shiziyuan9527 Date: Fri, 26 Nov 2021 17:07:45 +0800 Subject: [PATCH 004/256] =?UTF-8?q?fix(=E7=B3=BB=E7=BB=9F=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE):=20=E6=9D=83=E9=99=90=E8=AE=BE=E7=BD=AE=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1008303 --user=lyh 【系统设置】用户组与权限,只给了用户模块的查看权限,但是能进行操作 https://www.tapd.cn/55049933/s/1075611 --- .../db/migration/V100__v1.15.2_release.sql | 24 ++++++++++++++ backend/src/main/resources/permission.json | 32 ++++++++++++------- .../settings/system/BaseSetting.vue | 2 +- .../settings/system/EmailSetting.vue | 2 +- .../settings/system/LdapSetting.vue | 2 +- .../settings/system/SystemWorkspace.vue | 7 ++-- .../settings/system/group/UserGroup.vue | 6 +++- .../environment/EnvironmentGroupList.vue | 10 ++++-- frontend/src/business/components/xpack | 2 +- 9 files changed, 66 insertions(+), 21 deletions(-) create mode 100644 backend/src/main/resources/db/migration/V100__v1.15.2_release.sql diff --git a/backend/src/main/resources/db/migration/V100__v1.15.2_release.sql b/backend/src/main/resources/db/migration/V100__v1.15.2_release.sql new file mode 100644 index 0000000000..c9ccb69015 --- /dev/null +++ b/backend/src/main/resources/db/migration/V100__v1.15.2_release.sql @@ -0,0 +1,24 @@ +-- project admin +insert into user_group_permission (id, group_id, permission_id, module_id) +values (UUID(), 'project_admin', 'WORKSPACE_PROJECT_ENVIRONMENT:READ+CREATE_GROUP', 'WORKSPACE_PROJECT_ENVIRONMENT'); +insert into user_group_permission (id, group_id, permission_id, module_id) +values (UUID(), 'project_admin', 'WORKSPACE_PROJECT_ENVIRONMENT:READ+EDIT_GROUP', 'WORKSPACE_PROJECT_ENVIRONMENT'); +insert into user_group_permission (id, group_id, permission_id, module_id) +values (UUID(), 'project_admin', 'WORKSPACE_PROJECT_ENVIRONMENT:READ+COPY_GROUP', 'WORKSPACE_PROJECT_ENVIRONMENT'); +insert into user_group_permission (id, group_id, permission_id, module_id) +values (UUID(), 'project_admin', 'WORKSPACE_PROJECT_ENVIRONMENT:READ+DELETE_GROUP', 'WORKSPACE_PROJECT_ENVIRONMENT'); +-- project member +insert into user_group_permission (id, group_id, permission_id, module_id) +values (UUID(), 'project_member', 'WORKSPACE_PROJECT_ENVIRONMENT:READ+CREATE_GROUP', 'WORKSPACE_PROJECT_ENVIRONMENT'); +insert into user_group_permission (id, group_id, permission_id, module_id) +values (UUID(), 'project_member', 'WORKSPACE_PROJECT_ENVIRONMENT:READ+EDIT_GROUP', 'WORKSPACE_PROJECT_ENVIRONMENT'); +insert into user_group_permission (id, group_id, permission_id, module_id) +values (UUID(), 'project_member', 'WORKSPACE_PROJECT_ENVIRONMENT:READ+COPY_GROUP', 'WORKSPACE_PROJECT_ENVIRONMENT'); +insert into user_group_permission (id, group_id, permission_id, module_id) +values (UUID(), 'project_member', 'WORKSPACE_PROJECT_ENVIRONMENT:READ+DELETE_GROUP', 'WORKSPACE_PROJECT_ENVIRONMENT'); +-- delete old permission +delete +from user_group_permission +where permission_id = 'WORKSPACE_TEMPLATE:READ+REPORT_TEMPLATE'; + + diff --git a/backend/src/main/resources/permission.json b/backend/src/main/resources/permission.json index 088158dd2e..60354593bf 100644 --- a/backend/src/main/resources/permission.json +++ b/backend/src/main/resources/permission.json @@ -105,11 +105,6 @@ "name": "编辑", "resourceId": "SYSTEM_SETTING" }, - { - "id": "SYSTEM_SETTING:READ+AUTH_MANAGE", - "name": "授权管理", - "resourceId": "SYSTEM_SETTING" - }, { "id": "SYSTEM_QUOTA:READ", "name": "查询系统配额", @@ -202,7 +197,7 @@ }, { "id": "WORKSPACE_PROJECT_ENVIRONMENT:READ", - "name": "查询环境", + "name": "查询", "resourceId": "WORKSPACE_PROJECT_ENVIRONMENT" }, { @@ -235,6 +230,26 @@ "name": "导出环境", "resourceId": "WORKSPACE_PROJECT_ENVIRONMENT" }, + { + "id": "WORKSPACE_PROJECT_ENVIRONMENT:READ+CREATE_GROUP", + "name": "创建环境组", + "resourceId": "WORKSPACE_PROJECT_ENVIRONMENT" + }, + { + "id": "WORKSPACE_PROJECT_ENVIRONMENT:READ+EDIT_GROUP", + "name": "编辑环境组", + "resourceId": "WORKSPACE_PROJECT_ENVIRONMENT" + }, + { + "id": "WORKSPACE_PROJECT_ENVIRONMENT:READ+COPY_GROUP", + "name": "复制环境组", + "resourceId": "WORKSPACE_PROJECT_ENVIRONMENT" + }, + { + "id": "WORKSPACE_PROJECT_ENVIRONMENT:READ+DELETE_GROUP", + "name": "删除环境组", + "resourceId": "WORKSPACE_PROJECT_ENVIRONMENT" + }, { "id": "WORKSPACE_OPERATING_LOG:READ", "name": "查询操作日志", @@ -260,11 +275,6 @@ "name": "自定义字段", "resourceId": "WORKSPACE_TEMPLATE" }, - { - "id": "WORKSPACE_TEMPLATE:READ+REPORT_TEMPLATE", - "name": "测试报告模版", - "resourceId": "WORKSPACE_TEMPLATE" - }, { "id": "PROJECT_USER:READ", "name": "查询成员", diff --git a/frontend/src/business/components/settings/system/BaseSetting.vue b/frontend/src/business/components/settings/system/BaseSetting.vue index dfaa923adc..92514a6c0a 100644 --- a/frontend/src/business/components/settings/system/BaseSetting.vue +++ b/frontend/src/business/components/settings/system/BaseSetting.vue @@ -19,7 +19,7 @@
- {{ $t('commons.edit') }} + {{ $t('commons.edit') }} {{ $t('commons.save') }} diff --git a/frontend/src/business/components/settings/system/EmailSetting.vue b/frontend/src/business/components/settings/system/EmailSetting.vue index 575702a9dd..fd8e02dfd7 100644 --- a/frontend/src/business/components/settings/system/EmailSetting.vue +++ b/frontend/src/business/components/settings/system/EmailSetting.vue @@ -61,7 +61,7 @@ {{ $t('system_parameter_setting.test_connection') }} - {{ $t('commons.edit') }} + {{ $t('commons.edit') }} {{ $t('commons.save') }} diff --git a/frontend/src/business/components/settings/system/LdapSetting.vue b/frontend/src/business/components/settings/system/LdapSetting.vue index fc9ea67764..51f6002a65 100644 --- a/frontend/src/business/components/settings/system/LdapSetting.vue +++ b/frontend/src/business/components/settings/system/LdapSetting.vue @@ -31,7 +31,7 @@ {{ $t('ldap.test_login') }} - {{ $t('ldap.edit') }} + {{ $t('ldap.edit') }} {{ $t('commons.save') }} {{ $t('commons.cancel') }} diff --git a/frontend/src/business/components/settings/system/SystemWorkspace.vue b/frontend/src/business/components/settings/system/SystemWorkspace.vue index b143b073a8..e4751085e6 100644 --- a/frontend/src/business/components/settings/system/SystemWorkspace.vue +++ b/frontend/src/business/components/settings/system/SystemWorkspace.vue @@ -14,7 +14,7 @@ @@ -161,7 +161,7 @@ import MsTableOperator from "../../common/components/MsTableOperator"; import MsTableOperatorButton from "../../common/components/MsTableOperatorButton"; import MsDialogFooter from "../../common/components/MsDialogFooter"; import { - getCurrentWorkspaceId, + getCurrentWorkspaceId, hasPermission, listenGoBack, removeGoBackListener } from "@/common/js/utils"; @@ -400,6 +400,9 @@ export default { computed: { workspaceId() { return getCurrentWorkspaceId(); + }, + disabledEditWorkspaceMember() { + return !hasPermission('SYSTEM_WORKSPACE:READ+EDIT'); } }, data() { diff --git a/frontend/src/business/components/settings/system/group/UserGroup.vue b/frontend/src/business/components/settings/system/group/UserGroup.vue index 363d413c11..f033124dcb 100644 --- a/frontend/src/business/components/settings/system/group/UserGroup.vue +++ b/frontend/src/business/components/settings/system/group/UserGroup.vue @@ -17,7 +17,7 @@ @@ -79,6 +79,7 @@ import EditPermission from "@/business/components/settings/system/group/EditPerm import MsDeleteConfirm from "@/business/components/common/components/MsDeleteConfirm"; import {_sort} from "@/common/js/tableUtils"; import GroupMember from "@/business/components/settings/system/group/GroupMember"; +import {hasPermission} from "@/common/js/utils"; export default { name: "UserGroup", @@ -110,6 +111,9 @@ export default { computed: { userGroupType() { return USER_GROUP_SCOPE; + }, + disabledEditGroupMember() { + return !hasPermission('SYSTEM_GROUP:READ+EDIT'); } }, methods: { diff --git a/frontend/src/business/components/settings/workspace/environment/EnvironmentGroupList.vue b/frontend/src/business/components/settings/workspace/environment/EnvironmentGroupList.vue index 650f4e6025..a91c8fdd36 100644 --- a/frontend/src/business/components/settings/workspace/environment/EnvironmentGroupList.vue +++ b/frontend/src/business/components/settings/workspace/environment/EnvironmentGroupList.vue @@ -3,7 +3,7 @@ {{ scope.row.name }} - + @@ -38,9 +38,13 @@ + :clickType="clickType" :plan-id="planId" ref="testPlanFunctional"/> { if (this.$route.name === 'planView') { diff --git a/frontend/src/business/components/track/plan/view/comonents/functional/FunctionalTestCaseList.vue b/frontend/src/business/components/track/plan/view/comonents/functional/FunctionalTestCaseList.vue index 11177d73a4..747dca3085 100644 --- a/frontend/src/business/components/track/plan/view/comonents/functional/FunctionalTestCaseList.vue +++ b/frontend/src/business/components/track/plan/view/comonents/functional/FunctionalTestCaseList.vue @@ -450,7 +450,7 @@ export default { this.testCaseTemplate = template; this.fields = getTableHeaderWithCustomFields(this.tableHeaderKey, this.testCaseTemplate.customFields); this.result.loading = false; - this.$refs.table.reloadTable(); + if (this.$refs.table) this.$refs.table.reloadTable(); }); }, getCustomFieldValue(row, field) { diff --git a/frontend/src/business/components/track/plan/view/comonents/functional/TestPlanFunctional.vue b/frontend/src/business/components/track/plan/view/comonents/functional/TestPlanFunctional.vue index f208e9de4b..60f062aedf 100644 --- a/frontend/src/business/components/track/plan/view/comonents/functional/TestPlanFunctional.vue +++ b/frontend/src/business/components/track/plan/view/comonents/functional/TestPlanFunctional.vue @@ -83,7 +83,8 @@ export default { activeDom: 'left', selectNode: {}, condition: {}, - tmpActiveDom: null + tmpActiveDom: null, + tmpPath: null }; }, props: [ @@ -164,7 +165,16 @@ export default { }, changeConfirm(isSave) { saveMinderConfirm(this, isSave); - } + }, + handleBeforeRouteLeave(to) { + if (this.$store.state.isTestCaseMinderChanged) { + this.$refs.isChangeConfirm.open(); + this.tmpPath = to.path; + return false; + } else { + return true; + } + }, } }; diff --git a/frontend/src/business/components/track/review/view/TestCaseReviewView.vue b/frontend/src/business/components/track/review/view/TestCaseReviewView.vue index 045c56b905..f89aba2c3a 100644 --- a/frontend/src/business/components/track/review/view/TestCaseReviewView.vue +++ b/frontend/src/business/components/track/review/view/TestCaseReviewView.vue @@ -17,7 +17,7 @@ + :clickType="clickType" :review-id="reviewId" ref="testReviewFunction"/>
@@ -86,6 +86,13 @@ export default { this.initData(); this.openTestCaseEdit(this.$route.path); }, + beforeRouteLeave(to, from, next) { + if (!this.$refs.testReviewFunction) { + next(); + } else if (this.$refs.testReviewFunction.handleBeforeRouteLeave(to)) { + next(); + } + }, watch: { '$route'(to, from) { this.openTestCaseEdit(to.path); diff --git a/frontend/src/business/components/track/review/view/components/TestReviewFunction.vue b/frontend/src/business/components/track/review/view/components/TestReviewFunction.vue index 284f6d0134..16e09ccab0 100644 --- a/frontend/src/business/components/track/review/view/components/TestReviewFunction.vue +++ b/frontend/src/business/components/track/review/view/components/TestReviewFunction.vue @@ -82,7 +82,8 @@ export default { isMenuShow: true, activeDom: 'left', condition: {}, - tmpActiveDom: null + tmpActiveDom: null, + tmpPath: null } }, props: [ @@ -130,7 +131,16 @@ export default { }, changeConfirm(isSave) { saveMinderConfirm(this, isSave); - } + }, + handleBeforeRouteLeave(to) { + if (this.$store.state.isTestCaseMinderChanged) { + this.$refs.isChangeConfirm.open(); + this.tmpPath = to.path; + return false; + } else { + return true; + } + }, } } From daac8f1da9aa21c080cfdc2b3e3ec39351a69a19 Mon Sep 17 00:00:00 2001 From: guoyuqi Date: Mon, 29 Nov 2021 12:40:54 +0800 Subject: [PATCH 014/256] =?UTF-8?q?fix(=E6=88=91=E7=9A=84=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0):=20xpack?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1007507 --user=郭雨琦 接口用例在接口定义后面 --- frontend/src/business/components/xpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/business/components/xpack b/frontend/src/business/components/xpack index a8c75d8f4c..170b78b71a 160000 --- a/frontend/src/business/components/xpack +++ b/frontend/src/business/components/xpack @@ -1 +1 @@ -Subproject commit a8c75d8f4c88979a8e7851402776bce5b7ed2551 +Subproject commit 170b78b71af0fae99f45eca1aea17713fc7c2628 From 06596d33d2d06641a51a2fdfc092b8e040a9c1b6 Mon Sep 17 00:00:00 2001 From: fit2-zhao Date: Mon, 29 Nov 2021 16:09:18 +0800 Subject: [PATCH 015/256] =?UTF-8?q?fix(=E6=8E=A5=E5=8F=A3=E6=B5=8B?= =?UTF-8?q?=E8=AF=95):=20=E4=BF=AE=E5=A4=8DSQL=E8=AF=B7=E6=B1=82=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=90=8E=E7=94=A8=E4=BE=8B=E5=8F=98=E9=87=8F=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1008389 --user=赵勇 【github#7532】接口定义中,选择SQL,创建接口,自定义变量修改后,会把原有case的内容全部清空 https://www.tapd.cn/55049933/s/1076029 --- .../api/service/ApiDefinitionService.java | 12 +- .../scenario/ApiScenarioVariables.vue | 26 +-- .../components/ApiScenarioVariables.vue | 180 +++++++++--------- .../components/EditCompleteContainer.vue | 5 - 4 files changed, 117 insertions(+), 106 deletions(-) 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 8eb0f3aa9a..bc34ce8c34 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java @@ -514,11 +514,13 @@ public class ApiDefinitionService { } this.setModule(test); apiDefinitionMapper.updateByPrimaryKeySelective(test); - // 同步修改用例 - List ids = new ArrayList<>(); - ids.add(request.getId()); - apiTestCaseService.updateByApiDefinitionId(ids, test.getPath(), test.getMethod(), test.getProtocol()); - //saveFollows(test.getId(), request.getFollows()); + + // 同步修改用例路径 + if (StringUtils.equals(test.getProtocol(), "HTTP")) { + List ids = new ArrayList<>(); + ids.add(request.getId()); + apiTestCaseService.updateByApiDefinitionId(ids, test.getPath(), test.getMethod(), test.getProtocol()); + } return test; } diff --git a/frontend/src/business/components/api/automation/scenario/ApiScenarioVariables.vue b/frontend/src/business/components/api/automation/scenario/ApiScenarioVariables.vue index 8c7f0947b0..50dd810124 100644 --- a/frontend/src/business/components/api/automation/scenario/ApiScenarioVariables.vue +++ b/frontend/src/business/components/api/automation/scenario/ApiScenarioVariables.vue @@ -56,22 +56,26 @@ }, methods: { remove: function (index) { - this.items.splice(index, 1); - this.$emit('change', this.items); + if(this.items) { + this.items.splice(index, 1); + this.$emit('change', this.items); + } }, change: function () { let isNeedCreate = true; let removeIndex = -1; - this.items.forEach((item, index) => { - if (!item.name && !item.value) { - // 多余的空行 - if (index !== this.items.length - 1) { - removeIndex = index; + if(this.items) { + this.items.forEach((item, index) => { + if (!item.name && !item.value) { + // 多余的空行 + if (index !== this.items.length - 1) { + removeIndex = index; + } + // 没有空行,需要创建空行 + isNeedCreate = false; } - // 没有空行,需要创建空行 - isNeedCreate = false; - } - }); + }); + } if (isNeedCreate) { this.items.push(new KeyValue({enable: true})); } diff --git a/frontend/src/business/components/api/definition/components/ApiScenarioVariables.vue b/frontend/src/business/components/api/definition/components/ApiScenarioVariables.vue index c692d6be57..c6654488a1 100644 --- a/frontend/src/business/components/api/definition/components/ApiScenarioVariables.vue +++ b/frontend/src/business/components/api/definition/components/ApiScenarioVariables.vue @@ -1,7 +1,7 @@ diff --git a/frontend/src/business/components/api/definition/components/EditCompleteContainer.vue b/frontend/src/business/components/api/definition/components/EditCompleteContainer.vue index 60ff7c46a5..4c2931e1fe 100644 --- a/frontend/src/business/components/api/definition/components/EditCompleteContainer.vue +++ b/frontend/src/business/components/api/definition/components/EditCompleteContainer.vue @@ -78,12 +78,10 @@
-
-
@@ -263,9 +261,6 @@ export default { this.$emit("refresh"); }, changeTab(tabType) { - if (this.$refs.apiConfig) { - this.$refs.apiConfig.handleSave(); - } this.refreshButtonActiveClass(tabType); }, removeListener() { From 568bb275e4eb3a0414d5d784a495582cd7c58277 Mon Sep 17 00:00:00 2001 From: fit2-zhao Date: Mon, 29 Nov 2021 17:19:53 +0800 Subject: [PATCH 016/256] =?UTF-8?q?fix(=E6=8E=A5=E5=8F=A3=E6=B5=8B?= =?UTF-8?q?=E8=AF=95):=20=20=E4=BF=AE=E5=A4=8D=E5=B9=B6=E5=8F=91=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E6=89=A7=E8=A1=8C=E6=8A=A5=E5=91=8A=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/metersphere/api/service/MsResultService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/src/main/java/io/metersphere/api/service/MsResultService.java b/backend/src/main/java/io/metersphere/api/service/MsResultService.java index 9b6fa71db2..25c5afdfb7 100644 --- a/backend/src/main/java/io/metersphere/api/service/MsResultService.java +++ b/backend/src/main/java/io/metersphere/api/service/MsResultService.java @@ -102,6 +102,9 @@ public class MsResultService { public void formatTestResult(TestResult testResult, Map scenarios, SampleResult result) { String scenarioName = StringUtils.substringBeforeLast(result.getThreadName(), THREAD_SPLIT); + if (StringUtils.equals(scenarioName, "parallel")) { + scenarioName = testResult.getTestId(); + } ScenarioResult scenarioResult; if (!scenarios.containsKey(scenarioName)) { scenarioResult = new ScenarioResult(); From c17be67a9a7b3ff5a2f7ec31f89a5ada425a5b97 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Mon, 29 Nov 2021 18:18:26 +0800 Subject: [PATCH 017/256] =?UTF-8?q?refactor:=20=E5=8E=BB=E6=8E=89=E4=B8=8D?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/business/components/api/head/ApiHeaderMenus.vue | 3 +-- .../src/business/components/common/head/ProjectSwitch.vue | 4 +++- .../components/performance/head/PerformanceHeaderMenus.vue | 2 -- .../business/components/project/head/ProjectHeaderMenus.vue | 3 +-- .../src/business/components/project/menu/EnvironmentList.vue | 2 -- .../settings/workspace/environment/EnvironmentGroupList.vue | 2 -- .../settings/workspace/environment/EnvironmentList.vue | 2 -- .../src/business/components/track/head/TrackHeaderMenus.vue | 3 +-- 8 files changed, 6 insertions(+), 15 deletions(-) diff --git a/frontend/src/business/components/api/head/ApiHeaderMenus.vue b/frontend/src/business/components/api/head/ApiHeaderMenus.vue index 79e40d6714..febf0990f0 100644 --- a/frontend/src/business/components/api/head/ApiHeaderMenus.vue +++ b/frontend/src/business/components/api/head/ApiHeaderMenus.vue @@ -31,13 +31,12 @@ import MsRecentList from "../../common/head/RecentList"; import MsShowAll from "../../common/head/ShowAll"; import MsCreateButton from "../../common/head/CreateButton"; -import SearchList from "@/business/components/common/head/SearchList"; import ProjectChange from "@/business/components/common/head/ProjectSwitch"; import {mapGetters} from "vuex"; export default { name: "MsApiHeaderMenus", - components: {SearchList, MsCreateButton, MsShowAll, MsRecentList, ProjectChange}, + components: {MsCreateButton, MsShowAll, MsRecentList, ProjectChange}, data() { return { currentPath: '', diff --git a/frontend/src/business/components/common/head/ProjectSwitch.vue b/frontend/src/business/components/common/head/ProjectSwitch.vue index 0fa2b5c66e..427d57ba01 100644 --- a/frontend/src/business/components/common/head/ProjectSwitch.vue +++ b/frontend/src/business/components/common/head/ProjectSwitch.vue @@ -9,7 +9,9 @@ - +
+ +
{{ $t("project.create") }} diff --git a/frontend/src/business/components/performance/head/PerformanceHeaderMenus.vue b/frontend/src/business/components/performance/head/PerformanceHeaderMenus.vue index 1a75acc8e1..145e87625e 100644 --- a/frontend/src/business/components/performance/head/PerformanceHeaderMenus.vue +++ b/frontend/src/business/components/performance/head/PerformanceHeaderMenus.vue @@ -25,14 +25,12 @@ import MsRecentList from "../../common/head/RecentList"; import MsCreateButton from "../../common/head/CreateButton"; import MsShowAll from "../../common/head/ShowAll"; -import SearchList from "@/business/components/common/head/SearchList"; import ProjectChange from "@/business/components/common/head/ProjectSwitch"; export default { name: "PerformanceHeaderMenus", components: { ProjectChange, - SearchList, MsCreateButton, MsShowAll, MsRecentList, diff --git a/frontend/src/business/components/project/head/ProjectHeaderMenus.vue b/frontend/src/business/components/project/head/ProjectHeaderMenus.vue index d0d8e813b4..c59230feb6 100644 --- a/frontend/src/business/components/project/head/ProjectHeaderMenus.vue +++ b/frontend/src/business/components/project/head/ProjectHeaderMenus.vue @@ -47,12 +47,11 @@ import MsShowAll from "@/business/components/common/head/ShowAll"; import MsRecentList from "@/business/components/common/head/RecentList"; import MsCreateButton from "@/business/components/common/head/CreateButton"; -import SearchList from "@/business/components/common/head/SearchList"; import ProjectChange from "@/business/components/common/head/ProjectSwitch"; export default { name: "ProjectHeaderMenus", - components: {ProjectChange, SearchList, MsShowAll, MsRecentList, MsCreateButton}, + components: {ProjectChange, MsShowAll, MsRecentList, MsCreateButton}, data() { return { currentProject: '', diff --git a/frontend/src/business/components/project/menu/EnvironmentList.vue b/frontend/src/business/components/project/menu/EnvironmentList.vue index 1060cd1824..a2a9cdb1e7 100644 --- a/frontend/src/business/components/project/menu/EnvironmentList.vue +++ b/frontend/src/business/components/project/menu/EnvironmentList.vue @@ -111,7 +111,6 @@ import EnvironmentEdit from "@/business/components/api/test/components/environme import MsAsideItem from "@/business/components/common/components/MsAsideItem"; import MsAsideContainer from "@/business/components/common/components/MsAsideContainer"; import ProjectSwitch from "@/business/components/common/head/ProjectSwitch"; -import SearchList from "@/business/components/common/head/SearchList"; import {downloadFile, getCurrentProjectID} from "@/common/js/utils"; import EnvironmentImport from "@/business/components/project/menu/EnvironmentImport"; import MsMainContainer from "@/business/components/common/components/MsMainContainer"; @@ -123,7 +122,6 @@ export default { MsContainer, MsMainContainer, EnvironmentImport, - SearchList, ProjectSwitch, MsAsideContainer, MsAsideItem, diff --git a/frontend/src/business/components/settings/workspace/environment/EnvironmentGroupList.vue b/frontend/src/business/components/settings/workspace/environment/EnvironmentGroupList.vue index a91c8fdd36..301794a490 100644 --- a/frontend/src/business/components/settings/workspace/environment/EnvironmentGroupList.vue +++ b/frontend/src/business/components/settings/workspace/environment/EnvironmentGroupList.vue @@ -73,7 +73,6 @@ import EnvironmentEdit from "@/business/components/api/test/components/environme import MsAsideItem from "@/business/components/common/components/MsAsideItem"; import MsAsideContainer from "@/business/components/common/components/MsAsideContainer"; import ProjectSwitch from "@/business/components/common/head/ProjectSwitch"; -import SearchList from "@/business/components/common/head/SearchList"; import EnvironmentImport from "@/business/components/project/menu/EnvironmentImport"; import EnvironmentGroupRow from "@/business/components/settings/workspace/environment/EnvironmentGroupRow"; import EditEnvironmentGroup from "@/business/components/settings/workspace/environment/EditEnvironmentGroup"; @@ -84,7 +83,6 @@ export default { components: { EditEnvironmentGroup, EnvironmentImport, - SearchList, ProjectSwitch, MsAsideContainer, MsAsideItem, diff --git a/frontend/src/business/components/settings/workspace/environment/EnvironmentList.vue b/frontend/src/business/components/settings/workspace/environment/EnvironmentList.vue index 6ad11cf546..d874c93c47 100644 --- a/frontend/src/business/components/settings/workspace/environment/EnvironmentList.vue +++ b/frontend/src/business/components/settings/workspace/environment/EnvironmentList.vue @@ -121,7 +121,6 @@ import EnvironmentEdit from "@/business/components/api/test/components/environme import MsAsideItem from "@/business/components/common/components/MsAsideItem"; import MsAsideContainer from "@/business/components/common/components/MsAsideContainer"; import ProjectSwitch from "@/business/components/common/head/ProjectSwitch"; -import SearchList from "@/business/components/common/head/SearchList"; import {downloadFile, strMapToObj} from "@/common/js/utils"; import EnvironmentImport from "@/business/components/project/menu/EnvironmentImport"; import ShowMoreBtn from "@/business/components/track/case/components/ShowMoreBtn"; @@ -133,7 +132,6 @@ export default { components: { EnvGroupCascader, EnvironmentImport, - SearchList, ProjectSwitch, MsAsideContainer, MsAsideItem, diff --git a/frontend/src/business/components/track/head/TrackHeaderMenus.vue b/frontend/src/business/components/track/head/TrackHeaderMenus.vue index 0d24e643bc..f4874a943c 100644 --- a/frontend/src/business/components/track/head/TrackHeaderMenus.vue +++ b/frontend/src/business/components/track/head/TrackHeaderMenus.vue @@ -41,13 +41,12 @@ import MsShowAll from "../../common/head/ShowAll"; import MsRecentList from "../../common/head/RecentList"; import MsCreateButton from "../../common/head/CreateButton"; -import SearchList from "@/business/components/common/head/SearchList"; import ProjectChange from "@/business/components/common/head/ProjectSwitch"; import {getCurrentProjectID} from "@/common/js/utils"; export default { name: "TrackHeaderMenus", - components: {ProjectChange, SearchList, MsShowAll, MsRecentList, MsCreateButton}, + components: {ProjectChange, MsShowAll, MsRecentList, MsCreateButton}, data() { return { testPlanViewPath: '', From be051153ba05b6710765483e96f9bb521063e9b7 Mon Sep 17 00:00:00 2001 From: wxg0103 <727495428@qq.com> Date: Mon, 29 Nov 2021 18:04:47 +0800 Subject: [PATCH 018/256] =?UTF-8?q?fix(=E6=8E=A5=E5=8F=A3=E6=B5=8B?= =?UTF-8?q?=E8=AF=95):=20=E6=8E=A5=E5=8F=A3=E5=AE=9A=E4=B9=89=E4=B8=AD?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=E6=95=B0=E6=8D=AE=E5=8F=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/definition/components/ApiConfig.vue | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/frontend/src/business/components/api/definition/components/ApiConfig.vue b/frontend/src/business/components/api/definition/components/ApiConfig.vue index 03cb9dc3bb..7e54453f1d 100644 --- a/frontend/src/business/components/api/definition/components/ApiConfig.vue +++ b/frontend/src/business/components/api/definition/components/ApiConfig.vue @@ -73,17 +73,18 @@ export default { }, deep: true }, - }, - response: { - handler(newObj, oldObj) { - this.responseCount++; - if (this.responseCount > 1) { - this.$store.state.apiStatus.set("responseChange", true); - this.$store.state.apiMap.set(this.currentApi.id, this.$store.state.apiStatus); - } + response: { + handler(newObj, oldObj) { + this.responseCount++; + if (this.responseCount > 1) { + this.$store.state.apiStatus.set("responseChange", true); + this.$store.state.apiMap.set(this.currentApi.id, this.$store.state.apiStatus); + } + }, + deep: true }, - deep: true }, + created() { this.getMaintainerOptions(); switch (this.currentProtocol) { From 0deb97504ceaf34d5368f356339f2af7354976ac Mon Sep 17 00:00:00 2001 From: wxg0103 <727495428@qq.com> Date: Tue, 23 Nov 2021 20:15:32 +0800 Subject: [PATCH 019/256] =?UTF-8?q?fix(=E4=BB=BB=E5=8A=A1=E4=B8=AD?= =?UTF-8?q?=E5=BF=83):=20=E8=AF=AD=E8=A8=80=E9=80=89=E6=8B=A9=E8=8B=B1?= =?UTF-8?q?=E6=96=87=EF=BC=8C=E7=BF=BB=E9=A1=B5=E6=8C=89=E9=92=AE=E8=A2=AB?= =?UTF-8?q?=E6=8C=A4=E6=B2=A1=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1008242 --user=王孝刚 【任务中心】语言选择英文,翻页按钮被挤没了 https://www.tapd.cn/55049933/s/1076087 --- .../api/homepage/components/SceneInfoCard.vue | 8 +- .../components/ScheduleTaskInfoCard.vue | 8 +- .../homepage/components/TestCaseInfoCard.vue | 135 ++++++++++-------- .../business/components/task/TaskCenter.vue | 2 +- 4 files changed, 86 insertions(+), 67 deletions(-) diff --git a/frontend/src/business/components/api/homepage/components/SceneInfoCard.vue b/frontend/src/business/components/api/homepage/components/SceneInfoCard.vue index 41051161e1..b15a58e1d4 100644 --- a/frontend/src/business/components/api/homepage/components/SceneInfoCard.vue +++ b/frontend/src/business/components/api/homepage/components/SceneInfoCard.vue @@ -50,17 +50,17 @@ - + - {{$t('api_test.home_page.detail_card.rate.pass')+":"}} + {{ $t('api_test.home_page.detail_card.rate.pass') + ":" }} - {{sceneCountData.passRage}} + {{ sceneCountData.passRage }} -
{{ $t('api_test.home_page.formula.pass')}}
+
{{ $t('api_test.home_page.formula.pass') }}
diff --git a/frontend/src/business/components/api/homepage/components/ScheduleTaskInfoCard.vue b/frontend/src/business/components/api/homepage/components/ScheduleTaskInfoCard.vue index e4abbc6993..11169edeb9 100644 --- a/frontend/src/business/components/api/homepage/components/ScheduleTaskInfoCard.vue +++ b/frontend/src/business/components/api/homepage/components/ScheduleTaskInfoCard.vue @@ -44,17 +44,17 @@ - + - {{$t('api_test.home_page.detail_card.rate.success')+":"}} + {{ $t('api_test.home_page.detail_card.rate.success') + ":" }} - {{scheduleTaskCountData.successRage}} + {{ scheduleTaskCountData.successRage }} -
{{ $t('api_test.home_page.formula.success')}}
+
{{ $t('api_test.home_page.formula.success') }}
diff --git a/frontend/src/business/components/api/homepage/components/TestCaseInfoCard.vue b/frontend/src/business/components/api/homepage/components/TestCaseInfoCard.vue index 24260eadae..f58fc29dbe 100644 --- a/frontend/src/business/components/api/homepage/components/TestCaseInfoCard.vue +++ b/frontend/src/business/components/api/homepage/components/TestCaseInfoCard.vue @@ -1,31 +1,34 @@ + + +