From e02501901a9998f695b0203ddbc9324be0fe92a8 Mon Sep 17 00:00:00 2001 From: Izaac Zavaleta Date: Fri, 27 Sep 2024 09:45:05 -0700 Subject: [PATCH] Adjust cypress execution to generate html report on Jenkins --- cypress/jenkins/Jenkinsfile | 12 +- cypress/jenkins/cypress.config.jenkins.ts | 117 +++++++++++++ cypress/jenkins/cypress.sh | 17 +- cypress/jenkins/reporter-options.json | 15 -- cypress/jenkins/scpget.sh | 10 +- cypress/support/e2e.ts | 1 + package.json | 1 + yarn.lock | 194 +++++++++++++++++++++- 8 files changed, 336 insertions(+), 31 deletions(-) create mode 100644 cypress/jenkins/cypress.config.jenkins.ts delete mode 100644 cypress/jenkins/reporter-options.json diff --git a/cypress/jenkins/Jenkinsfile b/cypress/jenkins/Jenkinsfile index 5097e545cc7..f1206e18147 100644 --- a/cypress/jenkins/Jenkinsfile +++ b/cypress/jenkins/Jenkinsfile @@ -66,8 +66,7 @@ node { try { stage('Grab Results') { sh "cypress/jenkins/scpget.sh dashboard/results.xml" - sh "cypress/jenkins/scpget.sh dashboard/results.html" - sh "cypress/jenkins/scpget.sh dashboard/assets" + sh "cypress/jenkins/scpget.sh dashboard/cypress/reports/html/* html" } } catch(err) { echo "Error: " + err @@ -87,6 +86,15 @@ node { try { stage('Test Report') { step([$class: 'JUnitResultArchiver', testResults: '**/results.xml']) + sh "pwd && ls -al && ls -al cypress" + publishHTML(target : [allowMissing: false, + alwaysLinkToLastBuild: true, + keepAll: true, + // The path is relative to ${WORKSPACE} + reportDir: 'html', + reportFiles: 'index.html', + reportName: 'html-report', + reportTitles: 'Report']) } } catch(err) { diff --git a/cypress/jenkins/cypress.config.jenkins.ts b/cypress/jenkins/cypress.config.jenkins.ts new file mode 100644 index 00000000000..444b035c69f --- /dev/null +++ b/cypress/jenkins/cypress.config.jenkins.ts @@ -0,0 +1,117 @@ +/* eslint-disable no-console */ +import { defineConfig } from 'cypress'; +import { removeDirectory } from 'cypress-delete-downloads-folder'; +// Required for env vars to be available in cypress +require('dotenv').config(); + +/** + * VARIABLES + */ + +const testDirs = [ + 'cypress/e2e/tests/priority/**/*.spec.ts', + 'cypress/e2e/tests/components/**/*.spec.ts', + 'cypress/e2e/tests/setup/**/*.spec.ts', + 'cypress/e2e/tests/pages/**/*.spec.ts', + 'cypress/e2e/tests/navigation/**/*.spec.ts', + 'cypress/e2e/tests/global-ui/**/*.spec.ts', + 'cypress/e2e/tests/features/**/*.spec.ts', + 'cypress/e2e/tests/extensions/**/*.spec.ts' +]; +const skipSetup = process.env.TEST_SKIP?.includes('setup'); +const baseUrl = (process.env.TEST_BASE_URL || 'https://localhost:8005').replace(/\/$/, ''); +const DEFAULT_USERNAME = 'admin'; +const username = process.env.TEST_USERNAME || DEFAULT_USERNAME; +const apiUrl = process.env.API || (baseUrl.endsWith('/dashboard') ? baseUrl.split('/').slice(0, -1).join('/') : baseUrl); + +/** + * LOGS: + * Summary of the environment variables that we have detected (or are going ot use) + * We won't show any passwords + */ +console.log('E2E Test Configuration'); +console.log(''); +console.log(` Username: ${ username }`); + +if (!process.env.CATTLE_BOOTSTRAP_PASSWORD && !process.env.TEST_PASSWORD) { + console.log(' ❌ You must provide either CATTLE_BOOTSTRAP_PASSWORD or TEST_PASSWORD'); +} +if (process.env.CATTLE_BOOTSTRAP_PASSWORD && process.env.TEST_PASSWORD) { + console.log(' ❗ If both CATTLE_BOOTSTRAP_PASSWORD and TEST_PASSWORD are provided, the first will be used'); +} +if (!skipSetup && !process.env.CATTLE_BOOTSTRAP_PASSWORD) { + console.log(' ❌ You must provide CATTLE_BOOTSTRAP_PASSWORD when running setup tests'); +} +if (skipSetup && !process.env.TEST_PASSWORD) { + console.log(' ❌ You must provide TEST_PASSWORD when running the tests without the setup tests'); +} + +console.log(` Setup tests will ${ skipSetup ? 'NOT' : '' } be run`); +console.log(` Dashboard URL: ${ baseUrl }`); +console.log(` Rancher API URL: ${ apiUrl }`); + +// Check API - sometimes in dev, you might have API set to a different system to the base url - this won't work +// as the login cookie will be for the base url and any API requests will fail as not authenticated +if (apiUrl && !baseUrl.startsWith(apiUrl)) { + console.log('\n ❗ API variable is different to TEST_BASE_URL - tests may fail due to authentication issues'); +} + +console.log(''); + +/** + * CONFIGURATION + */ +export default defineConfig({ + projectId: process.env.TEST_PROJECT_ID, + defaultCommandTimeout: process.env.TEST_TIMEOUT ? +process.env.TEST_TIMEOUT : 10000, + trashAssetsBeforeRuns: true, + chromeWebSecurity: false, + retries: { + runMode: 2, + openMode: 0 + }, + env: { + grepFilterSpecs: true, + grepOmitFiltered: true, + baseUrl, + api: apiUrl, + username, + password: process.env.CATTLE_BOOTSTRAP_PASSWORD || process.env.TEST_PASSWORD, + bootstrapPassword: process.env.CATTLE_BOOTSTRAP_PASSWORD, + grepTags: process.env.GREP_TAGS, + // the below env vars are only available to tests that run in Jenkins + awsAccessKey: process.env.AWS_ACCESS_KEY_ID, + awsSecretKey: process.env.AWS_SECRET_ACCESS_KEY, + azureSubscriptionId: process.env.AZURE_AKS_SUBSCRIPTION_ID, + azureClientId: process.env.AZURE_CLIENT_ID, + azureClientSecret: process.env.AZURE_CLIENT_SECRET, + customNodeIp: process.env.CUSTOM_NODE_IP, + customNodeKey: process.env.CUSTOM_NODE_KEY + }, + // Jenkins reporters configuration jUnit and HTML + reporter: 'cypress-multi-reporters', + reporterOptions: { + reporterEnabled: 'cypress-mochawesome-reporter, mocha-junit-reporter', + mochaJunitReporterReporterOptions: { + mochaFile: 'cypress/jenkins/reports/junit/junit-[hash].xml', + toConsole: true, + jenkinsMode: true, + includePending: true + }, + cypressMochawesomeReporterReporterOptions: { charts: false }, + }, + e2e: { + setupNodeEvents(on, config) { + require('cypress-mochawesome-reporter/plugin')(on); + require('@cypress/grep/src/plugin')(config); + on('task', { removeDirectory }); + }, + fixturesFolder: 'cypress/e2e/blueprints', + experimentalSessionAndOrigin: true, + specPattern: testDirs, + baseUrl + }, + video: false, + videoCompression: 25, + videoUploadOnPasses: false, +}); diff --git a/cypress/jenkins/cypress.sh b/cypress/jenkins/cypress.sh index 45067a5a4e2..a44a703eb28 100755 --- a/cypress/jenkins/cypress.sh +++ b/cypress/jenkins/cypress.sh @@ -11,13 +11,14 @@ kubectl version --client=true kubectl get nodes node -v -yarn add --dev -W mocha mochawesome mochawesome-merge \ - mochawesome-report-generator cypress-multi-reporters \ - mocha-junit-reporter - -NO_COLOR=1 CYPRESS_grepTags="CYPRESSTAGS" cypress run --browser chrome \ - --reporter cypress-multi-reporters \ - --reporter-options \ - configFile=cypress/jenkins/reporter-options.json + +yarn config set ignore-engines true + +yarn add -W mocha cypress-mochawesome-reporter cypress-multi-reporters cypress-commands \ + mochawesome-report-generator mochawesome-merge mocha-junit-reporter junit-report-merger + +yarn add -W https://github.com/elaichenkov/cypress-delete-downloads-folder + +NO_COLOR=1 CYPRESS_grepTags="CYPRESSTAGS" cypress run --browser chrome --config-file cypress/jenkins/cypress.config.jenkins.ts echo "CYPRESS EXIT CODE: $?" diff --git a/cypress/jenkins/reporter-options.json b/cypress/jenkins/reporter-options.json deleted file mode 100644 index f985d78eabd..00000000000 --- a/cypress/jenkins/reporter-options.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "reporterEnabled": "mochawesome, mocha-junit-reporter", - "mochawesomeReporterOptions": { - "reportDir": "cypress/jenkins/reports/mochawesome/", - "overwrite": false, - "html": false, - "json": true - }, - "mochaJunitReporterReporterOptions": { - "mochaFile": "cypress/jenkins/reports/junit/junit-[hash].xml", - "toConsole": true, - "jenkinsMode": true, - "includePending": true - } -} diff --git a/cypress/jenkins/scpget.sh b/cypress/jenkins/scpget.sh index 556040fcac9..ed5b6ce7b7c 100755 --- a/cypress/jenkins/scpget.sh +++ b/cypress/jenkins/scpget.sh @@ -16,5 +16,13 @@ chmod 400 "${PRIV_KEY}" NODE_EXTERNAL_IP="$(corral vars ci first_node_ip)" + +REPORT_DIR="." + +if [[ $# -gt 1 ]]; then + REPORT_DIR="$2" + mkdir -p "$2" +fi + scp -r -i ${PRIV_KEY} -o StrictHostKeyChecking=no \ - -o UserKnownHostsFile=/dev/null "root@${NODE_EXTERNAL_IP}:$1" . + -o UserKnownHostsFile=/dev/null "root@${NODE_EXTERNAL_IP}:$1" "${REPORT_DIR}" diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts index 6f4d6fef68e..0078bedba18 100644 --- a/cypress/support/e2e.ts +++ b/cypress/support/e2e.ts @@ -4,6 +4,7 @@ import './commands/chainable'; import './commands/rancher-api-commands'; import registerCypressGrep from '@cypress/grep/src/support'; import { addCustomCommand } from 'cypress-delete-downloads-folder'; +import 'cypress-mochawesome-reporter/register'; registerCypressGrep(); addCustomCommand(); diff --git a/package.json b/package.json index c13095c7699..690aa5dd8c8 100644 --- a/package.json +++ b/package.json @@ -172,6 +172,7 @@ "cy2": "4.0.9", "cypress": "11.1.0", "cypress-delete-downloads-folder": "0.0.4", + "cypress-mochawesome-reporter": "^3.8.2", "eslint": "7.32.0", "eslint-config-standard": "16.0.3", "eslint-import-resolver-node": "0.3.4", diff --git a/yarn.lock b/yarn.lock index ec86a6aa800..e04d21b28ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5979,6 +5979,15 @@ cliui@^7.0.2, cliui@^7.0.4: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -6088,7 +6097,7 @@ commander@7, commander@^7.2.0: resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^10.0.0: +commander@^10.0.0, commander@^10.0.1: version "10.0.1" resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== @@ -6610,6 +6619,17 @@ cypress-delete-downloads-folder@0.0.4: resolved "https://registry.npmjs.org/cypress-delete-downloads-folder/-/cypress-delete-downloads-folder-0.0.4.tgz#00693d4d7a36b552e7a11148e49d2c4c34ed3ec3" integrity sha512-0zix5YIROeMHCrCGQVmMP+jUL3KtKliAs1msSnHCPwkX8rNL4DioI8UHvbBVVghWA3vxWN6GCtV1qW+5DHi9Bg== +cypress-mochawesome-reporter@^3.8.2: + version "3.8.2" + resolved "https://registry.yarnpkg.com/cypress-mochawesome-reporter/-/cypress-mochawesome-reporter-3.8.2.tgz#44a5e640916ac9686b0cb0d6882b2d4baa33729d" + integrity sha512-oJZkNzhNmN9ZD+LmZyFuPb8aWaIijyHyqYh52YOBvR6B6ckfJNCHP3A98a+/nG0H4t46CKTNwo+wNpMa4d2kjA== + dependencies: + commander "^10.0.1" + fs-extra "^10.0.1" + mochawesome "^7.1.3" + mochawesome-merge "^4.2.1" + mochawesome-report-generator "^6.2.0" + cypress@11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/cypress/-/cypress-11.1.0.tgz#b8f16495a8a5d8f9a7dd3374ae7b2cef45e9c779" @@ -7216,6 +7236,11 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" +dateformat@^4.5.1: + version "4.6.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" + integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== + dayjs@1.10.7: version "1.10.7" resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" @@ -7445,6 +7470,11 @@ diff@^4.0.1, diff@^4.0.2: resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -8794,6 +8824,24 @@ fs-extra@9.1.0, fs-extra@^9.0.0, fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^10.0.0, fs-extra@^10.0.1: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-monkey@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" @@ -8809,6 +8857,11 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== +fsu@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fsu/-/fsu-1.1.1.tgz#bd36d3579907c59d85b257a75b836aa9e0c31834" + integrity sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A== + function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -10527,7 +10580,7 @@ js-message@1.0.7: resolved "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47" integrity sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA== -js-tokens@^4.0.0: +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -10646,7 +10699,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== @@ -10663,6 +10716,13 @@ json5@^1.0.1, json5@^1.0.2: dependencies: minimist "^1.2.0" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -10931,6 +10991,26 @@ lodash.get@^4.4.2: resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== +lodash.isempty@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" + integrity sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg== + +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== + +lodash.isobject@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" + integrity sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + lodash.kebabcase@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" @@ -11020,6 +11100,13 @@ lolex@^5.0.1, lolex@^5.1.2: dependencies: "@sinonjs/commons" "^1.7.0" +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + lower-case@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -11309,6 +11396,49 @@ mkdirp@^0.5.1, mkdirp@^0.5.6: dependencies: minimist "^1.2.6" +mochawesome-merge@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mochawesome-merge/-/mochawesome-merge-4.3.0.tgz#7cc5d5730c7d8d1b034c8d8fecf3cd36e0010297" + integrity sha512-1roR6g+VUlfdaRmL8dCiVpKiaUhbPVm1ZQYUM6zHX46mWk+tpsKVZR6ba98k2zc8nlPvYd71yn5gyH970pKBSw== + dependencies: + fs-extra "^7.0.1" + glob "^7.1.6" + yargs "^15.3.1" + +mochawesome-report-generator@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz#65a30a11235ba7a68e1cf0ca1df80d764b93ae78" + integrity sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg== + dependencies: + chalk "^4.1.2" + dateformat "^4.5.1" + escape-html "^1.0.3" + fs-extra "^10.0.0" + fsu "^1.1.1" + lodash.isfunction "^3.0.9" + opener "^1.5.2" + prop-types "^15.7.2" + tcomb "^3.2.17" + tcomb-validation "^3.3.0" + validator "^13.6.0" + yargs "^17.2.1" + +mochawesome@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/mochawesome/-/mochawesome-7.1.3.tgz#07b358138f37f5b07b51a1b255d84babfa36fa83" + integrity sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ== + dependencies: + chalk "^4.1.2" + diff "^5.0.0" + json-stringify-safe "^5.0.1" + lodash.isempty "^4.4.0" + lodash.isfunction "^3.0.9" + lodash.isobject "^3.0.2" + lodash.isstring "^4.0.1" + mochawesome-report-generator "^6.2.0" + strip-ansi "^6.0.1" + uuid "^8.3.2" + module-alias@^2.2.2: version "2.2.3" resolved "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz#ec2e85c68973bda6ab71ce7c93b763ec96053221" @@ -11628,7 +11758,7 @@ nyc@15.1.0: test-exclude "^6.0.0" yargs "^15.0.2" -object-assign@^4.0.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -12577,6 +12707,15 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" +prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -12728,6 +12867,11 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-is@^17.0.1: version "17.0.2" resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" @@ -14021,6 +14165,18 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tcomb-validation@^3.3.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tcomb-validation/-/tcomb-validation-3.4.1.tgz#a7696ec176ce56a081d9e019f8b732a5a8894b65" + integrity sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA== + dependencies: + tcomb "^3.0.0" + +tcomb@^3.0.0, tcomb@^3.2.17: + version "3.2.29" + resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-3.2.29.tgz#32404fe9456d90c2cf4798682d37439f1ccc386c" + integrity sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ== + terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -14485,6 +14641,11 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + universalify@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" @@ -14645,6 +14806,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validator@^13.6.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.12.0.tgz#7d78e76ba85504da3fee4fd1922b385914d4b35f" + integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== + vary@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -15306,7 +15472,12 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^15.0.2: +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^15.0.2, yargs@^15.3.1: version "15.4.1" resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -15336,6 +15507,19 @@ yargs@^16.0.0, yargs@^16.1.1, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.2.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yarn@1.22.18: version "1.22.18" resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.18.tgz#05b822ade8c672987bab8858635145da0850f78a"