diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 0254508a..9a26a093 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -44,13 +44,14 @@ jobs: - uses: ./tools/github-actions/setup-deps - name: Unit Test run: | - make test + make test build-ui test-ui - name: Report if: github.actor == 'linuxsuren' env: CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }} run: | bash <(curl -Ls https://coverage.codacy.com/get.sh) report --partial --force-coverage-parser go -r coverage.out + bash <(curl -Ls https://coverage.codacy.com/get.sh) report --partial console/atest-ui/coverage/clover.xml bash <(curl -Ls https://coverage.codacy.com/get.sh) final image: diff --git a/README.md b/README.md index ffd3073f..23aa5468 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ > English | [δΈ­ζ–‡](README-ZH.md) -This is a API testing tool. πŸš€ +This is an awesome API testing tool. πŸš€ ## Features diff --git a/console/atest-ui/package-lock.json b/console/atest-ui/package-lock.json index 43b67551..a35aea4b 100644 --- a/console/atest-ui/package-lock.json +++ b/console/atest-ui/package-lock.json @@ -43,6 +43,7 @@ "eslint-plugin-vue": "^9.11.0", "fetch-mock-jest": "^1.5.1", "jest": "^29.6.1", + "jest-fetch-mock": "^3.0.3", "jsdom": "^22.1.0", "npm-run-all": "^4.1.5", "prettier": "^2.8.8", @@ -4270,6 +4271,15 @@ "resolved": "https://registry.npmmirror.com/crelt/-/crelt-1.0.6.tgz", "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.12" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -7492,6 +7502,16 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-fetch-mock": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", + "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", + "dev": true, + "dependencies": { + "cross-fetch": "^3.0.4", + "promise-polyfill": "^8.1.3" + } + }, "node_modules/jest-get-type": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", @@ -9299,8 +9319,6 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -9320,25 +9338,19 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -10025,6 +10037,12 @@ "asap": "~2.0.6" } }, + "node_modules/promise-polyfill": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", + "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==", + "dev": true + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -15368,6 +15386,15 @@ "resolved": "https://registry.npmmirror.com/crelt/-/crelt-1.0.6.tgz", "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" }, + "cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dev": true, + "requires": { + "node-fetch": "^2.6.12" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -17864,6 +17891,16 @@ "jest-util": "^29.6.1" } }, + "jest-fetch-mock": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", + "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", + "dev": true, + "requires": { + "cross-fetch": "^3.0.4", + "promise-polyfill": "^8.1.3" + } + }, "jest-get-type": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", @@ -19264,8 +19301,6 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "dev": true, - "optional": true, - "peer": true, "requires": { "whatwg-url": "^5.0.0" }, @@ -19274,25 +19309,19 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "optional": true, - "peer": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -19823,6 +19852,12 @@ "asap": "~2.0.6" } }, + "promise-polyfill": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", + "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==", + "dev": true + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", diff --git a/console/atest-ui/package.json b/console/atest-ui/package.json index 8e34fdfc..7b1e7da9 100644 --- a/console/atest-ui/package.json +++ b/console/atest-ui/package.json @@ -51,6 +51,7 @@ "eslint-plugin-vue": "^9.11.0", "fetch-mock-jest": "^1.5.1", "jest": "^29.6.1", + "jest-fetch-mock": "^3.0.3", "jsdom": "^22.1.0", "npm-run-all": "^4.1.5", "prettier": "^2.8.8", diff --git a/console/atest-ui/src/components/LoginDialog.vue b/console/atest-ui/src/components/LoginDialog.vue new file mode 100644 index 00000000..357666dc --- /dev/null +++ b/console/atest-ui/src/components/LoginDialog.vue @@ -0,0 +1,62 @@ + + + diff --git a/console/atest-ui/src/components/TestSuiteCreationDialog.vue b/console/atest-ui/src/components/TestSuiteCreationDialog.vue new file mode 100644 index 00000000..ff4e4c18 --- /dev/null +++ b/console/atest-ui/src/components/TestSuiteCreationDialog.vue @@ -0,0 +1,135 @@ + + + diff --git a/console/atest-ui/src/components/TestSuiteImportDialog.vue b/console/atest-ui/src/components/TestSuiteImportDialog.vue new file mode 100644 index 00000000..ddb0f1d5 --- /dev/null +++ b/console/atest-ui/src/components/TestSuiteImportDialog.vue @@ -0,0 +1,132 @@ + + + diff --git a/console/atest-ui/src/locales/en.json b/console/atest-ui/src/locales/en.json index 6a4a60b0..1d7e487c 100644 --- a/console/atest-ui/src/locales/en.json +++ b/console/atest-ui/src/locales/en.json @@ -68,7 +68,7 @@ "disabled": "Disabled", "status": "Status", "operations": "Operations", - "storageLocation": "Storage Location", + "storageLocation": "Location", "suiteKind": "Suite Kind", "key": "Key", "value": "Value" diff --git a/console/atest-ui/src/views/TestingHistoryPanel.vue b/console/atest-ui/src/views/TestingHistoryPanel.vue index 6b5374bc..e1eaba09 100644 --- a/console/atest-ui/src/views/TestingHistoryPanel.vue +++ b/console/atest-ui/src/views/TestingHistoryPanel.vue @@ -232,29 +232,6 @@ const filterTestCases = (value: string, data: Tree) => { } const viewName = ref('') - -const deviceAuthActive = ref(0) -const deviceAuthResponse = ref({ - user_code: '', - verification_uri: '', - device_code: '' -}) -const deviceAuthNext = () => { - if (deviceAuthActive.value++ > 2) { - return - } - - if (deviceAuthActive.value === 1) { - fetch('/oauth2/getLocalCode') - .then(API.DefaultResponseProcess) - .then((d) => { - deviceAuthResponse.value = d - }) - } else if (deviceAuthActive.value === 2) { - window.location.href = '/oauth2/getUserInfoFromLocalCode?device_code=' + deviceAuthResponse.value.device_code - } -} -