diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 8c7962a665..ea94c9f698 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -150,7 +150,6 @@ jobs: timeout-minutes: 35 env: EQ_RUN_FUNCTIONAL_TESTS_HEADLESS: True - # :TODO: Revisit & update when 2 instances can be used without adverse effects EQ_FUNCTIONAL_TEST_MAX_INSTANCES: 2 steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -173,8 +172,10 @@ jobs: run: npm install - name: Docker compose run: docker compose --version && RUNNER_ENV_FILE=.functional-tests.env docker compose up --build -d - - name: Functional tests - run: make test-functional + - name: Functional tests (supplementary data) + run: make test-functional-sds + - name: Functional tests (main suite) + run: make test-functional-main - name: Docker compose shutdown run: RUNNER_ENV_FILE=.functional-tests.env docker compose kill docker-push: diff --git a/Makefile b/Makefile index bb9da1f6f6..42f101a58f 100644 --- a/Makefile +++ b/Makefile @@ -45,8 +45,15 @@ test: test-unit: poetry run ./scripts/run_tests_unit.sh +test-functional-main: generate-pages + npm run test_functional_main + +test-functional-sds: generate-pages + EQ_FUNCTIONAL_TEST_MAX_INSTANCES=1 npm run test_functional_sds + test-functional: generate-pages - npm run test_functional + $(MAKE) test-functional-main + $(MAKE) test-functional-sds test-functional-headless: generate-pages EQ_RUN_FUNCTIONAL_TESTS_HEADLESS='True' make test-functional diff --git a/package-lock.json b/package-lock.json index 173c5ca40b..cee3d58b19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,15 +8,15 @@ "name": "eq-questionnaire-runner", "version": "1.0.0", "devDependencies": { - "@babel/core": "7.28.0", - "@babel/plugin-transform-runtime": "7.28.0", - "@babel/preset-env": "7.28.0", - "@babel/register": "7.27.1", - "@babel/runtime": "7.28.2", - "@wdio/cli": "9.18.4", - "@wdio/local-runner": "8.45.0", - "@wdio/mocha-framework": "9.18.0", - "@wdio/spec-reporter": "9.18.0", + "@babel/core": "7.28.5 ", + "@babel/plugin-transform-runtime": "7.28.5", + "@babel/preset-env": "7.28.5", + "@babel/register": "7.28.3", + "@babel/runtime": "7.28.4", + "@wdio/cli": "9.20.0", + "@wdio/local-runner": "9.20.0", + "@wdio/mocha-framework": "9.20.0", + "@wdio/spec-reporter": "9.20.0", "eslint": "8.57.1", "eslint-cli": "1.1.1", "eslint-config-standard": "17.1.0", @@ -33,20 +33,7 @@ "prettier": "3.6.2", "typescript": "5.9.2", "uuid": "11.1.0", - "webdriverio": "9.18.4" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" + "webdriverio": "9.20.0" } }, "node_modules/@babel/code-frame": { @@ -65,9 +52,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "dev": true, "license": "MIT", "engines": { @@ -75,23 +62,23 @@ } }, "node_modules/@babel/core": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", - "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.28.0", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -107,14 +94,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -154,18 +141,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.27.1", + "@babel/traverse": "^7.28.5", "semver": "^6.3.1" }, "engines": { @@ -221,14 +208,14 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -249,15 +236,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -350,9 +337,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -385,27 +372,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", - "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2" + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.0" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -415,14 +402,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -482,14 +469,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", - "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -627,9 +614,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", - "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", "dev": true, "license": "MIT", "dependencies": { @@ -660,13 +647,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", - "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { @@ -677,9 +664,9 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", - "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", "dev": true, "license": "MIT", "dependencies": { @@ -688,7 +675,7 @@ "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -715,14 +702,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", - "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -815,9 +802,9 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", + "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", "dev": true, "license": "MIT", "dependencies": { @@ -914,9 +901,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", "dev": true, "license": "MIT", "dependencies": { @@ -980,16 +967,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1081,9 +1068,9 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", - "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", "dev": true, "license": "MIT", "dependencies": { @@ -1091,7 +1078,7 @@ "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -1134,9 +1121,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1218,9 +1205,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz", - "integrity": "sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", "dev": true, "license": "MIT", "dependencies": { @@ -1267,9 +1254,9 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.0.tgz", - "integrity": "sha512-dGopk9nZrtCs2+nfIem25UuHyt5moSJamArzIoh9/vezUQPmYDOzjaHDCkAzuGJibCIkPup8rMT2+wYB6S73cA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", + "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", "dev": true, "license": "MIT", "dependencies": { @@ -1436,21 +1423,21 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.0.tgz", - "integrity": "sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", + "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.0", + "@babel/compat-data": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.27.1", "@babel/plugin-syntax-import-attributes": "^7.27.1", @@ -1459,42 +1446,42 @@ "@babel/plugin-transform-async-generator-functions": "^7.28.0", "@babel/plugin-transform-async-to-generator": "^7.27.1", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-block-scoping": "^7.28.5", "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.27.1", - "@babel/plugin-transform-classes": "^7.28.0", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.4", "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.27.1", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-exponentiation-operator": "^7.28.5", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", "@babel/plugin-transform-json-strings": "^7.27.1", "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.28.5", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-rest-spread": "^7.28.4", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.0", + "@babel/plugin-transform-regenerator": "^7.28.4", "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -1535,9 +1522,9 @@ } }, "node_modules/@babel/register": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.27.1.tgz", - "integrity": "sha512-K13lQpoV54LATKkzBpBAEu1GGSIRzxR9f4IN4V8DCDgiUMo2UDGagEZr3lPeVNJPLkWUi5JE4hCHKneVTwQlYQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.3.tgz", + "integrity": "sha512-CieDOtd8u208eI49bYl4z1J22ySFw87IGwE+IswFEExH7e3rLgKb0WNQeumnacQ1+VoDJLYI5QFA3AJZuyZQfA==", "dev": true, "license": "MIT", "dependencies": { @@ -1555,9 +1542,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", - "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "dev": true, "license": "MIT", "engines": { @@ -1580,18 +1567,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -1599,14 +1586,14 @@ } }, "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -2792,6 +2779,17 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -2939,19 +2937,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, "node_modules/@sindresorhus/merge-streams": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", @@ -2965,19 +2950,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", @@ -2985,13 +2957,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -3139,19 +3104,19 @@ } }, "node_modules/@wdio/cli": { - "version": "9.18.4", - "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-9.18.4.tgz", - "integrity": "sha512-nSCMxko+g91KvUhIvUBp3ULnCDTBD8D5ma7LbPBDr7j72mQyXlQoNamKRCNsNVaFEXA/FtCmPXc1m/ynQDgeaA==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-9.20.0.tgz", + "integrity": "sha512-dGkZFp09aIyoN6HlJah7zJApG/FzN0O/HaTfTkWrOM5GBli9th/9VIfbsT3vx4I9mBdETiYPmgfl4LqDP2p0VQ==", "dev": true, "license": "MIT", "dependencies": { "@vitest/snapshot": "^2.1.1", - "@wdio/config": "9.18.0", + "@wdio/config": "9.20.0", "@wdio/globals": "9.17.0", "@wdio/logger": "9.18.0", "@wdio/protocols": "9.16.2", - "@wdio/types": "9.16.2", - "@wdio/utils": "9.18.0", + "@wdio/types": "9.20.0", + "@wdio/utils": "9.20.0", "async-exit-hook": "^2.0.1", "chalk": "^5.4.1", "chokidar": "^4.0.0", @@ -3163,7 +3128,7 @@ "lodash.union": "^4.6.0", "read-pkg-up": "^10.0.0", "tsx": "^4.7.2", - "webdriverio": "9.18.4", + "webdriverio": "9.20.0", "yargs": "^17.7.2" }, "bin": { @@ -3187,23 +3152,52 @@ } }, "node_modules/@wdio/config": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.18.0.tgz", - "integrity": "sha512-fN+Z7SkKjb0u3UUMSxMN4d+CCZQKZhm/tx3eX7Rv+3T78LtpOjlesBYQ7Ax3tQ3tp8hgEo+CoOXU0jHEYubFrg==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.20.0.tgz", + "integrity": "sha512-ggwd3EMsVj/LTcbYw2h+hma+/7fQ1cTXMuy9B5WTkLjDlOtbLjsqs9QLt4BLIo1cdsxvAw/UVpRVUuYy7rTmtQ==", "dev": true, "license": "MIT", "dependencies": { "@wdio/logger": "9.18.0", - "@wdio/types": "9.16.2", - "@wdio/utils": "9.18.0", + "@wdio/types": "9.20.0", + "@wdio/utils": "9.20.0", "deepmerge-ts": "^7.0.3", "glob": "^10.2.2", - "import-meta-resolve": "^4.0.0" + "import-meta-resolve": "^4.0.0", + "jiti": "^2.5.1" + }, + "engines": { + "node": ">=18.20.0" + } + }, + "node_modules/@wdio/dot-reporter": { + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wdio/dot-reporter/-/dot-reporter-9.20.0.tgz", + "integrity": "sha512-lRhihDQ56dApJcKOIEkVHThl8t2e5h7f3FW3JVmMLcGgbbkkLgXqVWPpbEGJcLld3wL4CipAPojVE/YEWp80hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@wdio/reporter": "9.20.0", + "@wdio/types": "9.20.0", + "chalk": "^5.0.1" }, "engines": { "node": ">=18.20.0" } }, + "node_modules/@wdio/dot-reporter/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/@wdio/globals": { "version": "9.17.0", "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-9.17.0.tgz", @@ -3228,84 +3222,27 @@ } }, "node_modules/@wdio/local-runner": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.45.0.tgz", - "integrity": "sha512-KT8vzsNPcdo4r0JQYfUMm+tkU2o3+Sa5u7hkENyAbxKXhgCDrCdtokaPDwAwqUlhwrw89AEVVnwhHo3VS8R55w==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-9.20.0.tgz", + "integrity": "sha512-Q2zuSlWVf/GEuzV1c5xGHSH8Y/l9GXZQBZgXeNLp9unVMP4dqQToHgadMihW+8owdva7LVMjoGa2dxcdE6m8HQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "^22.2.0", - "@wdio/logger": "8.38.0", - "@wdio/repl": "8.40.3", - "@wdio/runner": "8.45.0", - "@wdio/types": "8.41.0", - "async-exit-hook": "^2.0.1", + "@types/node": "^20.1.0", + "@wdio/logger": "9.18.0", + "@wdio/repl": "9.16.2", + "@wdio/runner": "9.20.0", + "@wdio/types": "9.20.0", + "@wdio/xvfb": "9.20.0", + "exit-hook": "^4.0.0", + "expect-webdriverio": "^5.3.4", "split2": "^4.1.0", "stream-buffers": "^3.0.2" }, "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/@wdio/local-runner/node_modules/@types/node": { - "version": "22.18.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz", - "integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@wdio/local-runner/node_modules/@wdio/logger": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.38.0.tgz", - "integrity": "sha512-kcHL86RmNbcQP+Gq/vQUGlArfU6IIcbbnNp32rRIraitomZow+iEoc519rdQmSVusDozMS5DZthkgDdxK+vz6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.1.2", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/@wdio/local-runner/node_modules/@wdio/types": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.41.0.tgz", - "integrity": "sha512-t4NaNTvJZci3Xv/yUZPH4eTL0hxrVTf5wdwNnYIBrzMnlRDbNefjQ0P7FM7ZjQCLaH92AEH6t/XanUId7Webug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^22.2.0" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/@wdio/local-runner/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=18.20.0" } }, - "node_modules/@wdio/local-runner/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@wdio/logger": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.18.0.tgz", @@ -3338,17 +3275,17 @@ } }, "node_modules/@wdio/mocha-framework": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-9.18.0.tgz", - "integrity": "sha512-foycDp9DFpW1z4+GJMPitn69V7CJ8FK86Z1C/6JHJlvGfNpz5Kpfn22NYX6+ph1mpW4bvK2BeWCNMm1EgOl4mw==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-9.20.0.tgz", + "integrity": "sha512-kqLaGJ2okdNyOjBsTJcmZ9fvl2nrcdbgaXHk9V1znhAzuHiTEPicaIRPG5T0Itb/vOKb72rp0BdisuJ/PBfs7g==", "dev": true, "license": "MIT", "dependencies": { "@types/mocha": "^10.0.6", "@types/node": "^20.11.28", "@wdio/logger": "9.18.0", - "@wdio/types": "9.16.2", - "@wdio/utils": "9.18.0", + "@wdio/types": "9.20.0", + "@wdio/utils": "9.20.0", "mocha": "^10.3.0" }, "engines": { @@ -3363,45 +3300,28 @@ "license": "MIT" }, "node_modules/@wdio/repl": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.40.3.tgz", - "integrity": "sha512-mWEiBbaC7CgxvSd2/ozpbZWebnRIc8KRu/J81Hlw/txUWio27S7IpXBlZGVvhEsNzq0+cuxB/8gDkkXvMPbesw==", + "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-9.16.2.tgz", + "integrity": "sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "^22.2.0" + "@types/node": "^20.1.0" }, "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/@wdio/repl/node_modules/@types/node": { - "version": "22.18.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz", - "integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" + "node": ">=18.20.0" } }, - "node_modules/@wdio/repl/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@wdio/reporter": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-9.18.0.tgz", - "integrity": "sha512-AaGfyOkypHjCO2Igo/36NloNYi2Mq+yHY80Z6OlM2MjTwUC/upieKzn4H7qPAeOtxCgbLgcsaDuUXqH36wsM2w==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-9.20.0.tgz", + "integrity": "sha512-HjKJzm8o0MCcnwGVGprzaCAyau0OB8mWHwH1ZI/ka+z1nmVBr2tsr7H53SdHsGIhAg/XuZObobqdzeVF63ApeA==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "9.18.0", - "@wdio/types": "9.16.2", + "@wdio/types": "9.20.0", "diff": "^8.0.2", "object-inspect": "^1.12.0" }, @@ -3410,1000 +3330,149 @@ } }, "node_modules/@wdio/runner": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.45.0.tgz", - "integrity": "sha512-AGiatfrDk4aO8uqHEJjJiwOE8IgNjTb/OIWcQPjt/LgFgw51+/4bhl9amhnL9lSOT6rli6emqqWTTnnLxN72EQ==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-9.20.0.tgz", + "integrity": "sha512-z6CFANs5F02ww5mDTF1WUc1DA2mqJiCPKGr+xNXhpd3YH+537aFSsjww/S5SO4gFlAwf0cQiQZTKWUY3uJUGJQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "^22.2.0", - "@wdio/config": "8.45.0", - "@wdio/globals": "8.45.0", - "@wdio/logger": "8.38.0", - "@wdio/types": "8.41.0", - "@wdio/utils": "8.45.0", - "deepmerge-ts": "^5.1.0", - "expect-webdriverio": "^4.12.0", - "gaze": "^1.1.3", - "webdriver": "8.45.0", - "webdriverio": "8.45.0" + "@types/node": "^20.11.28", + "@wdio/config": "9.20.0", + "@wdio/dot-reporter": "9.20.0", + "@wdio/globals": "9.17.0", + "@wdio/logger": "9.18.0", + "@wdio/types": "9.20.0", + "@wdio/utils": "9.20.0", + "deepmerge-ts": "^7.0.3", + "webdriver": "9.20.0", + "webdriverio": "9.20.0" }, "engines": { - "node": "^16.13 || >=18" + "node": ">=18.20.0" + }, + "peerDependencies": { + "expect-webdriverio": "^5.3.4", + "webdriverio": "^9.0.0" + }, + "peerDependenciesMeta": { + "expect-webdriverio": { + "optional": false + }, + "webdriverio": { + "optional": false + } } }, - "node_modules/@wdio/runner/node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "node_modules/@wdio/spec-reporter": { + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-9.20.0.tgz", + "integrity": "sha512-YHj3kF86RoOVVR+k3eb+e/Fki6Mq1FIrJQ380Cz5SSWbIc9gL8HXG3ydReldY6/80KLFOuHn9ZHvDHrCIXRjiw==", "dev": true, "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3" + "@wdio/reporter": "9.20.0", + "@wdio/types": "9.20.0", + "chalk": "^5.1.2", + "easy-table": "^1.2.0", + "pretty-ms": "^9.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18.20.0" } }, - "node_modules/@wdio/runner/node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@wdio/spec-reporter/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@wdio/runner/node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@wdio/types": { + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.20.0.tgz", + "integrity": "sha512-zMmAtse2UMCSOW76mvK3OejauAdcFGuKopNRH7crI0gwKTZtvV89yXWRziz9cVXpFgfmJCjf9edxKFWdhuF5yw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@types/node": "^20.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18.20.0" } }, - "node_modules/@wdio/runner/node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@wdio/utils": { + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.20.0.tgz", + "integrity": "sha512-T1ze005kncUTocYImSBQc/FAVcOwP/vOU4MDJFgzz/RTcps600qcKX98sVdWM5/ukXCVkjOufWteDHIbX5/tEA==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@puppeteer/browsers": "^2.2.0", + "@wdio/logger": "9.18.0", + "@wdio/types": "9.20.0", + "decamelize": "^6.0.0", + "deepmerge-ts": "^7.0.3", + "edgedriver": "^6.1.2", + "geckodriver": "^5.0.0", + "get-port": "^7.0.0", + "import-meta-resolve": "^4.0.0", + "locate-app": "^2.2.24", + "mitt": "^3.0.1", + "safaridriver": "^1.0.0", + "split2": "^4.2.0", + "wait-port": "^1.1.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=18.20.0" } }, - "node_modules/@wdio/runner/node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@wdio/xvfb": { + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wdio/xvfb/-/xvfb-9.20.0.tgz", + "integrity": "sha512-shllZH9CsLiZqTXkqBTJrwi6k/ajBE7/78fQgvafMUIQU1Hpb2RdsmydKfPFZ5NDoA+LNm67PD2cPkvkXy4pSw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@wdio/logger": "9.18.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=18" } }, - "node_modules/@wdio/runner/node_modules/@puppeteer/browsers": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.1.tgz", - "integrity": "sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==", + "node_modules/@zip.js/zip.js": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.2.tgz", + "integrity": "sha512-PI6UdgpSeVoGvzguKHmy2bwOqI3UYkntLZOCpyJSKIi7234c5aJmQYkJB/P4P2YUJkqhbqvu7iM2/0eJZ178nA==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.3.1", - "tar-fs": "3.0.4", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.2" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=16.3.0" + "bun": ">=0.7.0", + "deno": ">=1.0.0", + "node": ">=16.5.0" } }, - "node_modules/@wdio/runner/node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@wdio/runner/node_modules/@types/node": { - "version": "22.18.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz", - "integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==", + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" } }, - "node_modules/@wdio/runner/node_modules/@wdio/config": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.45.0.tgz", - "integrity": "sha512-rxnTEe7UKFSGMWMHaGUtrGoFOYqqw2t8UjtidDAyJVHUUkAhKGPbk88qpq6tON4mwaI1yuMiR41qci+ZaAmf4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@wdio/logger": "8.38.0", - "@wdio/types": "8.41.0", - "@wdio/utils": "8.45.0", - "decamelize": "^6.0.0", - "deepmerge-ts": "^5.0.0", - "glob": "^10.2.2", - "import-meta-resolve": "^4.0.0" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/@wdio/runner/node_modules/@wdio/globals": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.45.0.tgz", - "integrity": "sha512-T5DOh4pqqItZLwG+xIwvsHtRW5ttVu1oia++vmY6BN2Eq4P1LxdxwJOngoY+wWVX+jD917ioD9uq+bfYvo7XAg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.13 || >=18" - }, - "optionalDependencies": { - "expect-webdriverio": "^4.11.2", - "webdriverio": "8.45.0" - } - }, - "node_modules/@wdio/runner/node_modules/@wdio/logger": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.38.0.tgz", - "integrity": "sha512-kcHL86RmNbcQP+Gq/vQUGlArfU6IIcbbnNp32rRIraitomZow+iEoc519rdQmSVusDozMS5DZthkgDdxK+vz6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.1.2", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/@wdio/runner/node_modules/@wdio/protocols": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.44.0.tgz", - "integrity": "sha512-Do+AW3xuDUHWkrX++LeMBSrX2yRILlDqunRHPMv4adGFEA45m7r4WP8wGCDb+chrHGhXq5TwB9Ne4J7x1dHGng==", - "dev": true, - "license": "MIT" - }, - "node_modules/@wdio/runner/node_modules/@wdio/types": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.41.0.tgz", - "integrity": "sha512-t4NaNTvJZci3Xv/yUZPH4eTL0hxrVTf5wdwNnYIBrzMnlRDbNefjQ0P7FM7ZjQCLaH92AEH6t/XanUId7Webug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^22.2.0" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/@wdio/runner/node_modules/@wdio/utils": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.45.0.tgz", - "integrity": "sha512-jLJ8eafbo3VrKE3fxumcWh/oiYq77MR+JSyIarGipZpxxMYUWhleba/Pqphc1J8LkDg/WRRVUdvOManP6BLAoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@puppeteer/browsers": "^1.6.0", - "@wdio/logger": "8.38.0", - "@wdio/types": "8.41.0", - "decamelize": "^6.0.0", - "deepmerge-ts": "^5.1.0", - "edgedriver": "^5.5.0", - "geckodriver": "~4.2.0", - "get-port": "^7.0.0", - "import-meta-resolve": "^4.0.0", - "locate-app": "^2.1.0", - "safaridriver": "^0.1.0", - "split2": "^4.2.0", - "wait-port": "^1.0.4" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/@wdio/runner/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@wdio/runner/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@wdio/runner/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@wdio/runner/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@wdio/runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@wdio/runner/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@wdio/runner/node_modules/deepmerge-ts": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", - "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@wdio/runner/node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/runner/node_modules/expect-webdriverio": { - "version": "4.15.4", - "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.15.4.tgz", - "integrity": "sha512-Op1xZoevlv1pohCq7g2Og5Gr3xP2NhY7MQueOApmopVxgweoJ/BqJxyvMNP0A//QsMg8v0WsN/1j81Sx2er9Wg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/snapshot": "^2.0.3", - "expect": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "lodash.isequal": "^4.5.0" - }, - "engines": { - "node": ">=16 || >=18 || >=20" - }, - "optionalDependencies": { - "@wdio/globals": "^8.29.3", - "@wdio/logger": "^8.28.0", - "webdriverio": "^8.29.3" - } - }, - "node_modules/@wdio/runner/node_modules/geckodriver": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.2.1.tgz", - "integrity": "sha512-4m/CRk0OI8MaANRuFIahvOxYTSjlNAO2p9JmE14zxueknq6cdtB5M9UGRQ8R9aMV0bLGNVHHDnDXmoXdOwJfWg==", - "dev": true, - "hasInstallScript": true, - "license": "MPL-2.0", - "dependencies": { - "@wdio/logger": "^8.11.0", - "decamelize": "^6.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "node-fetch": "^3.3.1", - "tar-fs": "^3.0.4", - "unzipper": "^0.10.14", - "which": "^4.0.0" - }, - "bin": { - "geckodriver": "bin/geckodriver.js" - }, - "engines": { - "node": "^16.13 || >=18 || >=20" - } - }, - "node_modules/@wdio/runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@wdio/runner/node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/runner/node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@wdio/runner/node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@wdio/runner/node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/runner/node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@wdio/runner/node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@wdio/runner/node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/runner/node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@wdio/runner/node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@wdio/runner/node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/runner/node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@wdio/runner/node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@wdio/runner/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/@wdio/runner/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@wdio/runner/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@wdio/runner/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/runner/node_modules/proxy-agent": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", - "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@wdio/runner/node_modules/puppeteer-core": { - "version": "21.11.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.11.0.tgz", - "integrity": "sha512-ArbnyA3U5SGHokEvkfWjW+O8hOxV1RSJxOgriX/3A4xZRqixt9ZFHD0yPgZQF05Qj0oAqi8H/7stDorjoHY90Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@puppeteer/browsers": "1.9.1", - "chromium-bidi": "0.5.8", - "cross-fetch": "4.0.0", - "debug": "4.3.4", - "devtools-protocol": "0.0.1232444", - "ws": "8.16.0" - }, - "engines": { - "node": ">=16.13.2" - } - }, - "node_modules/@wdio/runner/node_modules/puppeteer-core/node_modules/chromium-bidi": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.8.tgz", - "integrity": "sha512-blqh+1cEQbHBKmok3rVJkBlBxt9beKBgOsxbFgs7UJcoVbbeZ+K7+6liAsjgpc8l1Xd55cQUy14fXZdGSb4zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "node_modules/@wdio/runner/node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1232444", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1232444.tgz", - "integrity": "sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@wdio/runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wdio/runner/node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - } - }, - "node_modules/@wdio/runner/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@wdio/runner/node_modules/urlpattern-polyfill": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", - "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@wdio/runner/node_modules/webdriverio": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.45.0.tgz", - "integrity": "sha512-eLmEVLnBpnLdVr6vgCuNDU6XitPontbSORy7RbCHNykPqjpa2vQL4YigsV7K9YnPspGR1qhCe1uxsjAN5QGhCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^22.2.0", - "@wdio/config": "8.45.0", - "@wdio/logger": "8.38.0", - "@wdio/protocols": "8.44.0", - "@wdio/repl": "8.40.3", - "@wdio/types": "8.41.0", - "@wdio/utils": "8.45.0", - "archiver": "^7.0.0", - "aria-query": "^5.0.0", - "css-shorthand-properties": "^1.1.1", - "css-value": "^0.0.1", - "devtools-protocol": "^0.0.1400418", - "grapheme-splitter": "^1.0.2", - "import-meta-resolve": "^4.0.0", - "is-plain-obj": "^4.1.0", - "jszip": "^3.10.1", - "lodash.clonedeep": "^4.5.0", - "lodash.zip": "^4.2.0", - "minimatch": "^9.0.0", - "puppeteer-core": "^21.11.0", - "query-selector-shadow-dom": "^1.0.0", - "resq": "^1.9.1", - "rgb2hex": "0.2.5", - "serialize-error": "^11.0.1", - "webdriver": "8.45.0" - }, - "engines": { - "node": "^16.13 || >=18" - }, - "peerDependencies": { - "devtools": "^8.14.0" - }, - "peerDependenciesMeta": { - "devtools": { - "optional": true - } - } - }, - "node_modules/@wdio/runner/node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@wdio/spec-reporter": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-9.18.0.tgz", - "integrity": "sha512-rLol+LTsJCh2WIpKHrRdIohe7LqYlJJfFVZWSAtcjR7fpkR22lNp4l8DW7i4sVZeKhVfllhnqMOI63b1qRgAjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@wdio/reporter": "9.18.0", - "@wdio/types": "9.16.2", - "chalk": "^5.1.2", - "easy-table": "^1.2.0", - "pretty-ms": "^9.0.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/@wdio/spec-reporter/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@wdio/types": { - "version": "9.16.2", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.16.2.tgz", - "integrity": "sha512-P86FvM/4XQGpJKwlC2RKF3I21TglPvPOozJGG9HoL0Jmt6jRF20ggO/nRTxU0XiWkRdqESUTmfA87bdCO4GRkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^20.1.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/@wdio/utils": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.18.0.tgz", - "integrity": "sha512-M+QH05FUw25aFXZfjb+V16ydKoURgV61zeZrMjQdW2aAiks3F5iiI9pgqYT5kr1kHZcMy8gawGqQQ+RVfKYscQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@puppeteer/browsers": "^2.2.0", - "@wdio/logger": "9.18.0", - "@wdio/types": "9.16.2", - "decamelize": "^6.0.0", - "deepmerge-ts": "^7.0.3", - "edgedriver": "^6.1.2", - "geckodriver": "^5.0.0", - "get-port": "^7.0.0", - "import-meta-resolve": "^4.0.0", - "locate-app": "^2.2.24", - "mitt": "^3.0.1", - "safaridriver": "^1.0.0", - "split2": "^4.2.0", - "wait-port": "^1.1.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/@wdio/utils/node_modules/edgedriver": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-6.1.2.tgz", - "integrity": "sha512-UvFqd/IR81iPyWMcxXbUNi+xKWR7JjfoHjfuwjqsj9UHQKn80RpQmS0jf+U25IPi+gKVPcpOSKm0XkqgGMq4zQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@wdio/logger": "^9.1.3", - "@zip.js/zip.js": "^2.7.53", - "decamelize": "^6.0.0", - "edge-paths": "^3.0.5", - "fast-xml-parser": "^5.0.8", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "node-fetch": "^3.3.2", - "which": "^5.0.0" - }, - "bin": { - "edgedriver": "bin/edgedriver.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@wdio/utils/node_modules/fast-xml-parser": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", - "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^2.1.0" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@wdio/utils/node_modules/safaridriver": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safaridriver/-/safaridriver-1.0.0.tgz", - "integrity": "sha512-J92IFbskyo7OYB3Dt4aTdyhag1GlInrfbPCmMteb7aBK7PwlnGz1HI0+oyNN97j7pV9DqUAVoVgkNRMrfY47mQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@wdio/utils/node_modules/strnum": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", - "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/@wdio/utils/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@zip.js/zip.js": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.2.tgz", - "integrity": "sha512-PI6UdgpSeVoGvzguKHmy2bwOqI3UYkntLZOCpyJSKIi7234c5aJmQYkJB/P4P2YUJkqhbqvu7iM2/0eJZ178nA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "bun": ">=0.7.0", - "deno": ">=1.0.0", - "node": ">=16.5.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/acorn": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", - "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", + "node_modules/acorn": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", + "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", "dev": true, "peer": true, "bin": { @@ -4931,9 +4000,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz", - "integrity": "sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.0.tgz", + "integrity": "sha512-Mh++g+2LPfzZToywfE1BUzvZbfOY52Nil0rn9H1CPC5DJ7fX+Vir7nToBeoiSbB1zTNeGYbELEvJESujgGrzXw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4950,30 +4019,6 @@ "node": ">=10.0.0" } }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "dev": true, - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -4986,13 +4031,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "dev": true, - "license": "MIT" - }, "node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", @@ -5110,25 +4148,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -5162,48 +4181,6 @@ "node": ">=10" } }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -5296,19 +4273,6 @@ ], "license": "CC-BY-4.0" }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dev": true, - "license": "MIT/X11", - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -5390,30 +4354,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/chromium-bidi": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz", - "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0", - "zod": "3.23.8" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "node_modules/chromium-bidi/node_modules/urlpattern-polyfill": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", - "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/ci-info": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", @@ -5740,37 +4680,6 @@ "node": ">=10" } }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -5945,35 +4854,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/deep-eql": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", @@ -6009,18 +4889,8 @@ "dependencies": { "clone": "^1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-data-property": { @@ -6072,14 +4942,6 @@ "node": ">= 14" } }, - "node_modules/devtools-protocol": { - "version": "0.0.1400418", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1400418.tgz", - "integrity": "sha512-U8j75zDOXF8IP3o0Cgb7K4tFA9uUHEOru2Wx64+EUqL4LNOh9dRe1i8WKR1k3mSpjcCe3aIkTDvEwq0YkI4hfw==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, "node_modules/diff": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz", @@ -6090,16 +4952,6 @@ "node": ">=0.3.1" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -6199,56 +5051,6 @@ "node": ">= 0.4" } }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexer2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -6309,52 +5111,28 @@ } }, "node_modules/edgedriver": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-5.6.1.tgz", - "integrity": "sha512-3Ve9cd5ziLByUdigw6zovVeWJjVs8QHVmqOB0sJ0WNeVPcwf4p18GnxMmVvlFmYRloUwf5suNuorea4QzwBIOA==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-6.1.2.tgz", + "integrity": "sha512-UvFqd/IR81iPyWMcxXbUNi+xKWR7JjfoHjfuwjqsj9UHQKn80RpQmS0jf+U25IPi+gKVPcpOSKm0XkqgGMq4zQ==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "@wdio/logger": "^8.38.0", - "@zip.js/zip.js": "^2.7.48", + "@wdio/logger": "^9.1.3", + "@zip.js/zip.js": "^2.7.53", "decamelize": "^6.0.0", "edge-paths": "^3.0.5", - "fast-xml-parser": "^4.4.1", + "fast-xml-parser": "^5.0.8", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", "node-fetch": "^3.3.2", - "which": "^4.0.0" + "which": "^5.0.0" }, "bin": { "edgedriver": "bin/edgedriver.js" - } - }, - "node_modules/edgedriver/node_modules/@wdio/logger": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.38.0.tgz", - "integrity": "sha512-kcHL86RmNbcQP+Gq/vQUGlArfU6IIcbbnNp32rRIraitomZow+iEoc519rdQmSVusDozMS5DZthkgDdxK+vz6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.1.2", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^7.1.0" }, "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/edgedriver/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=18.0.0" } }, "node_modules/ejs": { @@ -7392,6 +6170,19 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/exit-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-4.0.0.tgz", + "integrity": "sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/expect": { "version": "30.1.2", "resolved": "https://registry.npmjs.org/expect/-/expect-30.1.2.tgz", @@ -7550,9 +6341,9 @@ "dev": true }, "node_modules/fast-xml-parser": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", - "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.1.tgz", + "integrity": "sha512-jbNkWiv2Ec1A7wuuxk0br0d0aTMUtQ4IkL+l/i1r9PRf6pLXjDgsBsWwO+UyczmQlnehi4Tbc8/KIvxGQe+I/A==", "dev": true, "funding": [ { @@ -7562,7 +6353,7 @@ ], "license": "MIT", "dependencies": { - "strnum": "^1.1.1" + "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" @@ -7776,16 +6567,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -7819,59 +6600,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -7912,19 +6640,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "globule": "^1.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/geckodriver": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-5.0.0.tgz", @@ -7949,22 +6664,6 @@ "node": ">=18.0.0" } }, - "node_modules/geckodriver/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -8108,9 +6807,9 @@ } }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "license": "ISC", "dependencies": { @@ -8182,56 +6881,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globule": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", - "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "~7.1.1", - "lodash": "^4.17.21", - "minimatch": "~3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/globule/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globule/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -8245,45 +6894,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -8464,13 +7074,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -8485,20 +7088,6 @@ "node": ">= 14" } }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -9316,16 +7905,6 @@ "node": ">=8" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/jest-matcher-utils": { "version": "30.1.2", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.1.2.tgz", @@ -9626,6 +8205,16 @@ "node": ">=8" } }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -9799,19 +8388,6 @@ "node": ">=0.10.0" } }, - "node_modules/ky": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", - "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -9898,13 +8474,6 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", - "dev": true, - "license": "ISC" - }, "node_modules/livereload": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", @@ -10052,14 +8621,6 @@ "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -10208,19 +8769,6 @@ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", "dev": true }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -10286,19 +8834,6 @@ "node": ">=8.6" } }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -10343,26 +8878,6 @@ "dev": true, "license": "MIT" }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true, - "license": "MIT" - }, "node_modules/mocha": { "version": "10.7.3", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", @@ -10751,19 +9266,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", - "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-run-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", @@ -10951,16 +9453,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -11498,93 +9990,6 @@ "node": ">=6" } }, - "node_modules/puppeteer-core": { - "version": "22.15.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.15.0.tgz", - "integrity": "sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@puppeteer/browsers": "2.3.0", - "chromium-bidi": "0.6.3", - "debug": "^4.3.6", - "devtools-protocol": "0.0.1312386", - "ws": "^8.18.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/puppeteer-core/node_modules/@puppeteer/browsers": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.0.tgz", - "integrity": "sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "debug": "^4.3.5", - "extract-zip": "^2.0.1", - "progress": "^2.0.3", - "proxy-agent": "^6.4.0", - "semver": "^7.6.3", - "tar-fs": "^3.0.6", - "unbzip2-stream": "^1.4.3", - "yargs": "^17.7.2" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1312386", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz", - "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true - }, - "node_modules/puppeteer-core/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/puppeteer-core/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/query-selector-shadow-dom": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", @@ -11612,19 +10017,6 @@ } ] }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -11986,13 +10378,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true, - "license": "MIT" - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -12011,22 +10396,6 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/resq": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", @@ -12152,11 +10521,14 @@ } }, "node_modules/safaridriver": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/safaridriver/-/safaridriver-0.1.2.tgz", - "integrity": "sha512-4R309+gWflJktzPXBQCobbWEHlzC4aK3a+Ov3tz2Ib2aBxiwd11phkdIBH1l0EO22x24CJMUQkpKFumRriCSRg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safaridriver/-/safaridriver-1.0.0.tgz", + "integrity": "sha512-J92IFbskyo7OYB3Dt4aTdyhag1GlInrfbPCmMteb7aBK7PwlnGz1HI0+oyNN97j7pV9DqUAVoVgkNRMrfY47mQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } }, "node_modules/safe-array-concat": { "version": "1.1.3", @@ -12269,29 +10641,16 @@ } }, "node_modules/serialize-error": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-11.0.3.tgz", - "integrity": "sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-12.0.0.tgz", + "integrity": "sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^2.12.2" - }, - "engines": { - "node": ">=14.16" + "type-fest": "^4.31.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12.20" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12873,9 +11232,9 @@ } }, "node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", "dev": true, "funding": [ { @@ -12953,13 +11312,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, "node_modules/tinyrainbow": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", @@ -12981,23 +11333,6 @@ "node": ">=8.0" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "dev": true, - "license": "MIT/X11", - "engines": { - "node": "*" - } - }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -13185,42 +11520,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/undici": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", @@ -13272,85 +11571,26 @@ } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unzipper": { - "version": "0.10.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", - "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/unzipper/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/unzipper/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/unzipper/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/unzipper/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/update-browserslist-db": { @@ -13587,261 +11827,38 @@ } }, "node_modules/webdriver": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.45.0.tgz", - "integrity": "sha512-guPEo1HeZ+4gvdvgMvnFpjTdqQ5SHkE7PKzWqhnDlSl6uhkFyiwSTt+77pgFLvjEPWesr3lpSTkvhyKQ8+Ov+g==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.20.0.tgz", + "integrity": "sha512-Kk+AGV1xWLNHVpzUynQJDULMzbcO3IjXo3s0BzfC30OpGxhpaNmoazMQodhtv0Lp242Mb1VYXD89dCb4oAHc4w==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "^22.2.0", + "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.45.0", - "@wdio/logger": "8.38.0", - "@wdio/protocols": "8.44.0", - "@wdio/types": "8.41.0", - "@wdio/utils": "8.45.0", - "deepmerge-ts": "^5.1.0", - "got": "^12.6.1", - "ky": "^0.33.0", + "@wdio/config": "9.20.0", + "@wdio/logger": "9.18.0", + "@wdio/protocols": "9.16.2", + "@wdio/types": "9.20.0", + "@wdio/utils": "9.20.0", + "deepmerge-ts": "^7.0.3", + "https-proxy-agent": "^7.0.6", + "undici": "^6.21.3", "ws": "^8.8.0" }, "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/webdriver/node_modules/@puppeteer/browsers": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.1.tgz", - "integrity": "sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.3.1", - "tar-fs": "3.0.4", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.2" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=16.3.0" - } - }, - "node_modules/webdriver/node_modules/@types/node": { - "version": "22.18.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz", - "integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/webdriver/node_modules/@wdio/config": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.45.0.tgz", - "integrity": "sha512-rxnTEe7UKFSGMWMHaGUtrGoFOYqqw2t8UjtidDAyJVHUUkAhKGPbk88qpq6tON4mwaI1yuMiR41qci+ZaAmf4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@wdio/logger": "8.38.0", - "@wdio/types": "8.41.0", - "@wdio/utils": "8.45.0", - "decamelize": "^6.0.0", - "deepmerge-ts": "^5.0.0", - "glob": "^10.2.2", - "import-meta-resolve": "^4.0.0" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/webdriver/node_modules/@wdio/logger": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.38.0.tgz", - "integrity": "sha512-kcHL86RmNbcQP+Gq/vQUGlArfU6IIcbbnNp32rRIraitomZow+iEoc519rdQmSVusDozMS5DZthkgDdxK+vz6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.1.2", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/webdriver/node_modules/@wdio/protocols": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.44.0.tgz", - "integrity": "sha512-Do+AW3xuDUHWkrX++LeMBSrX2yRILlDqunRHPMv4adGFEA45m7r4WP8wGCDb+chrHGhXq5TwB9Ne4J7x1dHGng==", - "dev": true, - "license": "MIT" - }, - "node_modules/webdriver/node_modules/@wdio/types": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.41.0.tgz", - "integrity": "sha512-t4NaNTvJZci3Xv/yUZPH4eTL0hxrVTf5wdwNnYIBrzMnlRDbNefjQ0P7FM7ZjQCLaH92AEH6t/XanUId7Webug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^22.2.0" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/webdriver/node_modules/@wdio/utils": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.45.0.tgz", - "integrity": "sha512-jLJ8eafbo3VrKE3fxumcWh/oiYq77MR+JSyIarGipZpxxMYUWhleba/Pqphc1J8LkDg/WRRVUdvOManP6BLAoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@puppeteer/browsers": "^1.6.0", - "@wdio/logger": "8.38.0", - "@wdio/types": "8.41.0", - "decamelize": "^6.0.0", - "deepmerge-ts": "^5.1.0", - "edgedriver": "^5.5.0", - "geckodriver": "~4.2.0", - "get-port": "^7.0.0", - "import-meta-resolve": "^4.0.0", - "locate-app": "^2.1.0", - "safaridriver": "^0.1.0", - "split2": "^4.2.0", - "wait-port": "^1.0.4" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/webdriver/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/webdriver/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/webdriver/node_modules/deepmerge-ts": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", - "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/webdriver/node_modules/geckodriver": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.2.1.tgz", - "integrity": "sha512-4m/CRk0OI8MaANRuFIahvOxYTSjlNAO2p9JmE14zxueknq6cdtB5M9UGRQ8R9aMV0bLGNVHHDnDXmoXdOwJfWg==", - "dev": true, - "hasInstallScript": true, - "license": "MPL-2.0", - "dependencies": { - "@wdio/logger": "^8.11.0", - "decamelize": "^6.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "node-fetch": "^3.3.1", - "tar-fs": "^3.0.4", - "unzipper": "^0.10.14", - "which": "^4.0.0" - }, - "bin": { - "geckodriver": "bin/geckodriver.js" - }, - "engines": { - "node": "^16.13 || >=18 || >=20" - } - }, - "node_modules/webdriver/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" + "node": ">=18.20.0" } }, - "node_modules/webdriver/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/webdriver/node_modules/proxy-agent": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", - "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", + "node_modules/webdriver/node_modules/undici": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", + "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" - }, "engines": { - "node": ">= 14" - } - }, - "node_modules/webdriver/node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" + "node": ">=18.17" } }, - "node_modules/webdriver/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, "node_modules/webdriver/node_modules/ws": { "version": "8.18.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", @@ -13865,21 +11882,21 @@ } }, "node_modules/webdriverio": { - "version": "9.18.4", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.18.4.tgz", - "integrity": "sha512-Q/gghz/Zt7EhTnbDQfLb61WgSwCksXZE60lEzmDXe4fULCH/6Js5IWUsne3W+BRy6nXeVvFscHD/d7S77dbamw==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.20.0.tgz", + "integrity": "sha512-cqaXfahTzCFaQLlk++feZaze6tAsW8OSdaVRgmOGJRII1z2A4uh4YGHtusTpqOiZAST7OBPqycOwfh01G/Ktbg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@types/node": "^20.11.30", "@types/sinonjs__fake-timers": "^8.1.5", - "@wdio/config": "9.18.0", + "@wdio/config": "9.20.0", "@wdio/logger": "9.18.0", "@wdio/protocols": "9.16.2", "@wdio/repl": "9.16.2", - "@wdio/types": "9.16.2", - "@wdio/utils": "9.18.0", + "@wdio/types": "9.20.0", + "@wdio/utils": "9.20.0", "archiver": "^7.0.1", "aria-query": "^5.3.0", "cheerio": "^1.0.0-rc.12", @@ -13896,7 +11913,7 @@ "rgb2hex": "0.2.5", "serialize-error": "^12.0.0", "urlpattern-polyfill": "^10.0.0", - "webdriver": "9.18.0" + "webdriver": "9.20.0" }, "engines": { "node": ">=18.20.0" @@ -13910,97 +11927,6 @@ } } }, - "node_modules/webdriverio/node_modules/@wdio/repl": { - "version": "9.16.2", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-9.16.2.tgz", - "integrity": "sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^20.1.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/webdriverio/node_modules/serialize-error": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-12.0.0.tgz", - "integrity": "sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^4.31.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webdriverio/node_modules/undici": { - "version": "6.21.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", - "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/webdriverio/node_modules/webdriver": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.18.0.tgz", - "integrity": "sha512-07lC4FLj45lHJo0FvLjUp5qkjzEGWJWKGsxLoe9rQ2Fg88iYsqgr9JfSj8qxHpazBaBd+77+ZtpmMZ2X2D1Zuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^20.1.0", - "@types/ws": "^8.5.3", - "@wdio/config": "9.18.0", - "@wdio/logger": "9.18.0", - "@wdio/protocols": "9.16.2", - "@wdio/types": "9.16.2", - "@wdio/utils": "9.18.0", - "deepmerge-ts": "^7.0.3", - "https-proxy-agent": "^7.0.6", - "undici": "^6.21.3", - "ws": "^8.8.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/webdriverio/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "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, - "license": "BSD-2-Clause" - }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -14037,21 +11963,10 @@ "node": ">=18" } }, - "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, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "dev": true, "license": "ISC", "dependencies": { @@ -14061,7 +11976,7 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/which-boxed-primitive": { @@ -14553,17 +12468,6 @@ "engines": { "node": ">= 14" } - }, - "node_modules/zod": { - "version": "3.23.8", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", - "dev": true, - "license": "MIT", - "optional": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } } } } diff --git a/package.json b/package.json index ea772342e2..0a6e8cbded 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,8 @@ "lint:tests": "prettier --check \"tests/functional/**/*.js\" && eslint \"tests/functional/**/*.js\"", "lint:test-schemas": "prettier --check \"schemas/test/*/*.json\" && eslint \"schemas/test/**/*.json\"", "test_functional": "./node_modules/.bin/wdio tests/functional/wdio.conf.js", + "test_functional_main": "FUNCTIONAL_MODE=main npm run test_functional", + "test_functional_sds": "FUNCTIONAL_MODE=sds npm run test_functional", "generate_pages": "rm -rf ./tests/functional/generated_pages && poetry run python -m tests.functional.generate_pages schemas/test/en/ ./tests/functional/generated_pages -r '../../base_pages'", "format": "npm run format:tests && npm run format:test-schemas", "format:tests": "prettier \"tests/functional/**/*.js\" --write && eslint --fix \"tests/functional/**/*.js\"", @@ -24,15 +26,15 @@ "wdio": "wdio run ./tests/functional/wdio.conf.js" }, "devDependencies": { - "@babel/core": "7.28.0", - "@babel/plugin-transform-runtime": "7.28.0", - "@babel/preset-env": "7.28.0", - "@babel/register": "7.27.1", - "@babel/runtime": "7.28.2", - "@wdio/cli": "9.18.4", - "@wdio/local-runner": "8.45.0", - "@wdio/mocha-framework": "9.18.0", - "@wdio/spec-reporter": "9.18.0", + "@babel/core": "7.28.5 ", + "@babel/plugin-transform-runtime": "7.28.5", + "@babel/preset-env": "7.28.5", + "@babel/register": "7.28.3", + "@babel/runtime": "7.28.4", + "@wdio/cli": "9.20.0", + "@wdio/local-runner": "9.20.0", + "@wdio/mocha-framework": "9.20.0", + "@wdio/spec-reporter": "9.20.0", "eslint": "8.57.1", "eslint-cli": "1.1.1", "eslint-config-standard": "17.1.0", @@ -49,7 +51,7 @@ "prettier": "3.6.2", "typescript": "5.9.2", "uuid": "11.1.0", - "webdriverio": "9.18.4" + "webdriverio": "9.20.0" }, "prettier": {} } diff --git a/tests/functional/helpers.js b/tests/functional/helpers.js index 9200b67e55..16593badab 100644 --- a/tests/functional/helpers.js +++ b/tests/functional/helpers.js @@ -67,3 +67,21 @@ export const verifyUrlContains = async (expectedUrlString) => { export const verifyUrlContainsSyncMode = (expectedUrlString) => { expect(browser).toHaveUrl(expect.stringContaining(expectedUrlString)); }; + +export async function openQuestionnaireWithRetry(schema, options, maxRetries = 1) { + for (let attempt = 0; attempt <= maxRetries; attempt++) { + await browser.openQuestionnaire(schema, options); + + const bodyText = await $("body").getText(); + const isServiceError = bodyText.includes("Sorry, there is a problem with this service"); + + if (!isServiceError) { + return; + } + + if (attempt === maxRetries) { + throw new Error(`Service error page after ${maxRetries + 1} attempt(s) for schema="${schema}" with options=${JSON.stringify(options)}`); + } + await browser.reloadSession(); + } +} diff --git a/tests/functional/spec/checkbox.spec.js b/tests/functional/spec/checkbox.spec.js index 141ba83afd..1d3f5b7d79 100644 --- a/tests/functional/spec/checkbox.spec.js +++ b/tests/functional/spec/checkbox.spec.js @@ -44,7 +44,7 @@ describe('Checkbox with "other" option', () => { // When await click(MandatoryCheckboxPage.submit()); // Then - await expect(await $(MandatoryCheckboxPage.error()).getHTML()).toContain( + await expect(await $(MandatoryCheckboxPage.error()).getHTML({ prettify: false })).toContain( 'Select at least one answer to ‘Which pizza toppings would you like?’', ); }); diff --git a/tests/functional/spec/components/address/address.spec.js b/tests/functional/spec/components/address/address.spec.js index db27e65147..47fe243642 100644 --- a/tests/functional/spec/components/address/address.spec.js +++ b/tests/functional/spec/components/address/address.spec.js @@ -21,7 +21,7 @@ describe("Address Answer Type", () => { await click(AddressConfirmation.submit()); await verifyUrlContains(SubmitPage.pageName); await expect(await $(SubmitPage.addressMandatory()).getText()).toBe("Evelyn Street\nApt 7\nBarry\nCF63 4JG"); - await expect(await $(SubmitPage.addressMandatory()).getHTML()).toContain("Evelyn Street
Apt 7
Barry
CF63 4JG"); + await expect(await $(SubmitPage.addressMandatory()).getHTML({ prettify: false })).toContain("Evelyn Street
Apt 7
Barry
CF63 4JG"); }); }); diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_currency.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_currency.spec.js index f570d6c5f3..a2c7fa6352 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_currency.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_currency.spec.js @@ -5,7 +5,7 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive Currency With Single Checkbox Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive.json"); - await browser.pause(100); + await browser.url("/questionnaire/mutually-exclusive-currency"); }); diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_day_month_year_date.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_day_month_year_date.spec.js index 5a8869797f..9ae7f16e21 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_day_month_year_date.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_day_month_year_date.spec.js @@ -5,7 +5,6 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive Day Month Year Date With Single Checkbox Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive.json"); - await browser.pause(100); await browser.url("/questionnaire/mutually-exclusive-date"); }); diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_duration.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_duration.spec.js index acb887c4cc..8511b4010b 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_duration.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_duration.spec.js @@ -5,7 +5,7 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive Duration With Single Checkbox Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive.json"); - await browser.pause(100); + await browser.url("/questionnaire/mutually-exclusive-duration"); }); diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_month_year_date.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_month_year_date.spec.js index b089da7571..5c54eb6e0d 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_month_year_date.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_month_year_date.spec.js @@ -5,7 +5,7 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive Month Year Date With Single Checkbox Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive.json"); - await browser.pause(100); + await browser.url("/questionnaire/mutually-exclusive-month-year-date"); }); diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_multiple_day_month_year_date.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_multiple_day_month_year_date.spec.js index 036c53daa5..60030f6af4 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_multiple_day_month_year_date.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_multiple_day_month_year_date.spec.js @@ -5,7 +5,7 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive Day Month Year Date With Multiple Radio Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive_multiple.json"); - await browser.pause(100); + await browser.url("/questionnaire/mutually-exclusive-date"); }); describe("Given the user has entered a value for the non-exclusive month year date answer", () => { diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_multiple_textfield.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_multiple_textfield.spec.js index 0ea9f981c9..eedefb9110 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_multiple_textfield.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_multiple_textfield.spec.js @@ -5,7 +5,7 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive Textfield With Multiple Radio Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive_multiple.json"); - await browser.pause(100); + await browser.url("/questionnaire/mutually-exclusive-textfield"); }); diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_number.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_number.spec.js index a0295cb499..3c1c46e35b 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_number.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_number.spec.js @@ -5,7 +5,7 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive Number With Single Checkbox Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive.json"); - await browser.pause(100); + await browser.url("/questionnaire/mutually-exclusive-number"); }); diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_percentage.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_percentage.spec.js index c12e9413a9..943dbb1743 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_percentage.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_percentage.spec.js @@ -5,7 +5,7 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive Percentage With Single Checkbox Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive.json"); - await browser.pause(100); + await browser.url("/questionnaire/mutually-exclusive-percentage"); }); diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_textarea.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_textarea.spec.js index 08cb99c00c..85582991b7 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_textarea.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_textarea.spec.js @@ -5,7 +5,7 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive TextArea With Single Checkbox Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive.json"); - await browser.pause(100); + await browser.url("/questionnaire/mutually-exclusive-textarea"); }); diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_textfield.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_textfield.spec.js index cf7c1a44ed..44447a2116 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_textfield.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_textfield.spec.js @@ -5,7 +5,7 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive Textfield With Single Checkbox Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive.json"); - await browser.pause(100); + await browser.url("/questionnaire/mutually-exclusive-textfield"); }); diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_unit.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_unit.spec.js index b4e953a77c..768a2cf1b6 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_unit.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_unit.spec.js @@ -5,7 +5,7 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive Unit With Single Checkbox Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive.json"); - await browser.pause(100); + await browser.url("/questionnaire/mutually-exclusive-unit"); }); diff --git a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_year_date.spec.js b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_year_date.spec.js index 14a7d8f69c..731713f65d 100644 --- a/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_year_date.spec.js +++ b/tests/functional/spec/components/checkbox/mutually_exclusive/mutually_exclusive_year_date.spec.js @@ -5,7 +5,7 @@ import { click } from "../../../../helpers"; describe("Component: Mutually Exclusive Year Date With Single Checkbox Override", () => { beforeEach(async () => { await browser.openQuestionnaire("test_mutually_exclusive.json"); - await browser.pause(100); + await browser.url("/questionnaire/mutually-exclusive-year-date"); }); diff --git a/tests/functional/spec/components/radio/radio.js b/tests/functional/spec/components/radio/radio.js index 01b1c08b4c..6c5f5ca1f6 100644 --- a/tests/functional/spec/components/radio/radio.js +++ b/tests/functional/spec/components/radio/radio.js @@ -50,7 +50,7 @@ describe("Component: Radio", () => { it("When I have submitted the page without any option, Then the question text is hidden in the error message using a span element", async () => { await click(RadioMandatoryOverriddenPage.submit()); - await expect(await $(RadioMandatoryOverriddenPage.errorNumber(1)).getHTML()).toContain( + await expect(await $(RadioMandatoryOverriddenPage.errorNumber(1)).getHTML({ prettify: false })).toContain( 'Select an answer to ‘What do you prefer for breakfast?’', ); }); diff --git a/tests/functional/spec/features/last_viewed_guidance/last_viewed_guidance.spec.js b/tests/functional/spec/features/last_viewed_guidance/last_viewed_guidance.spec.js index a8d2f523f7..055271141f 100644 --- a/tests/functional/spec/features/last_viewed_guidance/last_viewed_guidance.spec.js +++ b/tests/functional/spec/features/last_viewed_guidance/last_viewed_guidance.spec.js @@ -22,7 +22,7 @@ describe("Last viewed question guidance", () => { it("When the respondent resumes on the first block of a section, then last question guidance is not shown", async () => { await $(HouseholdInterstitialPage.saveSignOut()).click(); await browser.openQuestionnaire("test_last_viewed_question_guidance.json", resumableLaunchParams); - await browser.pause(100); + await verifyUrlContains(HouseholdInterstitialPage.url()); await expect(await $(HouseholdInterstitialPage.lastViewedQuestionGuidance()).isExisting()).toBe(false); }); @@ -31,7 +31,7 @@ describe("Last viewed question guidance", () => { await click(HouseholdInterstitialPage.submit()); await $(AddressConfirmationPage.saveSignOut()).click(); await browser.openQuestionnaire("test_last_viewed_question_guidance.json", resumableLaunchParams); - await browser.pause(100); + await verifyUrlContains(AddressConfirmationPage.url()); await expect(await $(AddressConfirmationPage.lastViewedQuestionGuidanceLink()).getAttribute("href")).toContain(HouseholdInterstitialPage.url()); await expect(await $(AddressConfirmationPage.lastViewedQuestionGuidance()).isExisting()).toBe(true); diff --git a/tests/functional/spec/features/last_viewed_guidance/last_viewed_guidance_hub.spec.js b/tests/functional/spec/features/last_viewed_guidance/last_viewed_guidance_hub.spec.js index 1d53bf1aa1..0edc0c79c9 100644 --- a/tests/functional/spec/features/last_viewed_guidance/last_viewed_guidance_hub.spec.js +++ b/tests/functional/spec/features/last_viewed_guidance/last_viewed_guidance_hub.spec.js @@ -28,7 +28,7 @@ describe("Last viewed question guidance", () => { it("When the respondent saves and resumes from a section which is not started, then last question guidance is not shown", async () => { await $(WorkInterstitialPage.saveSignOut()).click(); await browser.openQuestionnaire("test_last_viewed_question_guidance_hub.json", resumableLaunchParams); - await browser.pause(100); + await verifyUrlContains(WorkInterstitialPage.url()); await expect(await $(WorkInterstitialPage.lastViewedQuestionGuidance()).isExisting()).toBe(false); }); diff --git a/tests/functional/spec/features/placeholder/playback_confirmation.spec.js b/tests/functional/spec/features/placeholder/playback_confirmation.spec.js index fe5017b2df..798d210715 100644 --- a/tests/functional/spec/features/placeholder/playback_confirmation.spec.js +++ b/tests/functional/spec/features/placeholder/playback_confirmation.spec.js @@ -10,7 +10,7 @@ describe("Feature: Playback Confirmation", () => { await $(MandatoryCheckboxPage.ham()).click(); await click(MandatoryCheckboxPage.submit()); - await expect(await $("#confirm-answers-question ul").getHTML()).toContain("Ham"); - await expect(await $("#confirm-answers-question ul").getHTML()).toContain("Cheese"); + await expect(await $("#confirm-answers-question ul").getHTML({ prettify: false })).toContain("Ham"); + await expect(await $("#confirm-answers-question ul").getHTML({ prettify: false })).toContain("Cheese"); }); }); diff --git a/tests/functional/spec/features/view_submitted_response/view_submitted_response.spec.js b/tests/functional/spec/features/view_submitted_response/view_submitted_response.spec.js index ec66ee4280..47803362bb 100644 --- a/tests/functional/spec/features/view_submitted_response/view_submitted_response.spec.js +++ b/tests/functional/spec/features/view_submitted_response/view_submitted_response.spec.js @@ -31,7 +31,7 @@ describe("View Submitted Response", () => { await click(AddressBlockPage.submit()); await click(SubmitPage.submit()); await verifyUrlContains(ThankYouPage.pageName); - await expect(await $(ThankYouPage.title()).getHTML()).toContain("Thank you for completing the Test"); + await expect(await $(ThankYouPage.title()).getHTML({ prettify: false })).toContain("Thank you for completing the Test"); await $(ThankYouPage.savePrintAnswersLink()).click(); await verifyUrlContains(ViewSubmittedResponsePage.pageName); }); @@ -55,7 +55,7 @@ describe("View Submitted Response", () => { await browser.pause(40000); // Waiting 40 seconds for the timeout to expire (45 minute timeout changed to 35 seconds by overriding VIEW_SUBMITTED_RESPONSE_EXPIRATION_IN_SECONDS for the purpose of the functional test) await $(ViewSubmittedResponsePage.downloadButton()).click(); await expect(await $(ViewSubmittedResponsePage.informationPanel()).isDisplayed()).toBe(true); - await expect(await $(ViewSubmittedResponsePage.informationPanel()).getHTML()).toContain( + await expect(await $(ViewSubmittedResponsePage.informationPanel()).getHTML({ prettify: false })).toContain( "For security, you can no longer view or get a copy of your answers", ); }); @@ -124,7 +124,7 @@ describe("View Submitted Response Summary Page With Repeating Sections", () => { await click(HubPage.submit()); await verifyUrlContains(ThankYouPage.pageName); - await expect(await $(ThankYouPage.title()).getHTML()).toContain("Thank you for completing the Test"); + await expect(await $(ThankYouPage.title()).getHTML({ prettify: false })).toContain("Thank you for completing the Test"); await $(ThankYouPage.savePrintAnswersLink()).click(); await verifyUrlContains(ViewSubmittedResponsePage.pageName); }); @@ -141,14 +141,14 @@ describe("View Submitted Response Summary Page With Repeating Sections", () => { await expect(await $(ViewSubmittedResponseRepeatingPage.addressDetailsGroupTitle()).getText()).toBe("Address Details"); await expect(await $(ViewSubmittedResponseRepeatingPage.addressQuestion()).getText()).toBe("What is your address?"); await expect(await $(ViewSubmittedResponseRepeatingPage.addressAnswer()).getText()).toBe("NP10 8XG"); - await expect(await $("body").getHTML()).toContain("Marcus Twin"); + await expect(await $("body").getHTML({ prettify: false })).toContain("Marcus Twin"); await expect(await $(firstGroup).$$(groupTitle)[0].getText()).toBe("Calculated Summary Group"); await expect(await $(firstGroup).$$(repeatingSectionAnswer)[0].getText()).toBe("40 - calculated summary answer (current section)"); - await expect(await $("body").getHTML()).toContain("How much did Marcus Twin spend on fruit?"); + await expect(await $("body").getHTML({ prettify: false })).toContain("How much did Marcus Twin spend on fruit?"); await expect(await $(firstGroup).$$(skippableRepeatingSectionAnswer)[0].getText()).toBe("£100"); - await expect(await $("body").getHTML()).toContain("John Doe"); + await expect(await $("body").getHTML({ prettify: false })).toContain("John Doe"); await expect(await $(secondGroup).$$(groupTitle)[0].getText()).toBe("Calculated Summary Group"); await expect(await $(secondGroup).$$(repeatingSectionAnswer)[0].getText()).toBe("80 - calculated summary answer (current section)"); - await expect(await $("body").getHTML()).not.toContain("How much did John Doe spend on fruit?"); + await expect(await $("body").getHTML({ prettify: false })).not.toContain("How much did John Doe spend on fruit?"); }); }); diff --git a/tests/functional/spec/hub_and_spoke/hub_and_spoke.spec.js b/tests/functional/spec/hub_and_spoke/hub_and_spoke.spec.js index 3faab203c9..625c21bd3b 100644 --- a/tests/functional/spec/hub_and_spoke/hub_and_spoke.spec.js +++ b/tests/functional/spec/hub_and_spoke/hub_and_spoke.spec.js @@ -35,9 +35,9 @@ describe("Feature: Hub and Spoke", () => { }); it("When a user utilises a screen reader, The visually hidden text read aloud should be the state and name of each section in the hub", async () => { - await expect(await $(HubPage.summaryRowLink("employment-section")).getHTML()).toContain("Start section: Employment"); - await expect(await $(HubPage.summaryRowLink("accommodation-section")).getHTML()).toContain("Start section: Accommodation"); - await expect(await $(HubPage.summaryRowLink("household-section")).getHTML()).toContain("Start section: Household residents"); + await expect(await $(HubPage.summaryRowLink("employment-section")).getHTML({ prettify: false })).toContain("Start section: Employment"); + await expect(await $(HubPage.summaryRowLink("accommodation-section")).getHTML({ prettify: false })).toContain("Start section: Accommodation"); + await expect(await $(HubPage.summaryRowLink("household-section")).getHTML({ prettify: false })).toContain("Start section: Household residents"); }); it("When a user views the Hub, any section with show_on_hub set to true should appear", async () => { @@ -68,9 +68,9 @@ describe("Feature: Hub and Spoke", () => { await expect(await $(HubPage.summaryRowState("employment-section")).getText()).toBe("Not started"); await expect(await $(HubPage.summaryRowState("accommodation-section")).getText()).toBe("Not started"); await expect(await $(HubPage.summaryRowState("household-section")).getText()).toBe("Not started"); - await expect(await $(HubPage.summaryRowLink("employment-section")).getHTML()).toContain("Start section: Employment"); - await expect(await $(HubPage.summaryRowLink("accommodation-section")).getHTML()).toContain("Start section: Accommodation"); - await expect(await $(HubPage.summaryRowLink("household-section")).getHTML()).toContain("Start section: Household residents"); + await expect(await $(HubPage.summaryRowLink("employment-section")).getHTML({ prettify: false })).toContain("Start section: Employment"); + await expect(await $(HubPage.summaryRowLink("accommodation-section")).getHTML({ prettify: false })).toContain("Start section: Accommodation"); + await expect(await $(HubPage.summaryRowLink("household-section")).getHTML({ prettify: false })).toContain("Start section: Household residents"); }); it("When the user starts a section, Then the first question in the section should be displayed", async () => { @@ -102,7 +102,7 @@ describe("Feature: Hub and Spoke", () => { it("When the user returns to the Hub, Then the section should be marked as 'Partially completed'", async () => { await browser.url(HubPage.url()); await expect(await $(HubPage.summaryRowState("employment-section")).getText()).toBe("Partially completed"); - await expect(await $(HubPage.summaryRowLink("employment-section")).getHTML()).toContain("Continue with section: Employment"); + await expect(await $(HubPage.summaryRowLink("employment-section")).getHTML({ prettify: false })).toContain("Continue with section: Employment"); }); it("When the user returns to the Hub and restarts the same section, Then they should be redirected to the first incomplete block", async () => { @@ -135,7 +135,7 @@ describe("Feature: Hub and Spoke", () => { it("When the user returns to the Hub, Then the section should be marked as 'Completed'", async () => { await click(EmploymentTypeBlockPage.submit()); await expect(await $(HubPage.summaryRowState("employment-section")).getText()).toBe("Completed"); - await expect(await $(HubPage.summaryRowLink("employment-section")).getHTML()).toContain("View answers: Employment"); + await expect(await $(HubPage.summaryRowLink("employment-section")).getHTML({ prettify: false })).toContain("View answers: Employment"); }); it("When the user returns to the Hub and clicks the 'View answers' link on the Hub, if this no summary they are returned to the first block", async () => { @@ -178,7 +178,7 @@ describe("Feature: Hub and Spoke", () => { await browser.url(HubPage.url()); await verifyUrlPathIs(HubPage.url()); await expect(await $(HubPage.summaryRowState("employment-section")).getText()).toBe("Partially completed"); - await expect(await $(HubPage.summaryRowLink("employment-section")).getHTML()).toContain("Continue with section: Employment"); + await expect(await $(HubPage.summaryRowLink("employment-section")).getHTML({ prettify: false })).toContain("Continue with section: Employment"); }); }); @@ -303,14 +303,14 @@ describe("Feature: Hub and Spoke", () => { await $(DoesAnyoneLiveHere.no()).click(); await click(DoesAnyoneLiveHere.submit()); await click(HouseholdSummary.submit()); - await expect(await $(HubPage.summaryRowLink("household-section")).getHTML()).toContain("View answers: Household residents"); + await expect(await $(HubPage.summaryRowLink("household-section")).getHTML({ prettify: false })).toContain("View answers: Household residents"); }); it("When there are no changes, continue returns directly to the hub", async () => { await $(HubPage.summaryRowLink("household-section")).click(); await click(HouseholdSummary.submit()); await verifyUrlPathIs(HubPage.url()); - await expect(await $(HubPage.summaryRowLink("household-section")).getHTML()).toContain("View answers: Household residents"); + await expect(await $(HubPage.summaryRowLink("household-section")).getHTML({ prettify: false })).toContain("View answers: Household residents"); }); it("When there are changes, which would set the section to in_progress it routes accordingly", async () => { diff --git a/tests/functional/spec/hub_and_spoke/hub_and_spoke_supplementary_data.spec.js b/tests/functional/spec/hub_and_spoke/hub_and_spoke_supplementary_data.spec.js index 4d0c2e9cb6..0d94b94f6b 100644 --- a/tests/functional/spec/hub_and_spoke/hub_and_spoke_supplementary_data.spec.js +++ b/tests/functional/spec/hub_and_spoke/hub_and_spoke_supplementary_data.spec.js @@ -12,8 +12,8 @@ describe("Feature: Hub and Spoke", () => { beforeEach("Load survey", () => { const responseId = getRandomString(16); - browser.openQuestionnaire("test_hub_section_required_with_repeat_supplementary.json.json", { - version: "v2", + browser.openQuestionnaire("test_hub_section_required_with_repeat_supplementary.json", { + launchVersion: "v2", sdsDatasetId: "203b2f9d-c500-8175-98db-86ffcfdccfa3", responseId, }); diff --git a/tests/functional/spec/introduction.spec.js b/tests/functional/spec/introduction.spec.js index b00bef77bd..2e5dccf26b 100644 --- a/tests/functional/spec/introduction.spec.js +++ b/tests/functional/spec/introduction.spec.js @@ -7,7 +7,6 @@ describe("Introduction page", () => { }); it("Given I start a survey, When I view the introduction page, Then I should be able to see introduction information", async () => { - await browser.openQuestionnaire(introductionSchema); await expect(await $(IntroductionPage.useOfData()).getText()).toContain("How we use your data"); await expect(await $(IntroductionPage.useOfInformation()).getText()).toContain( "Data should relate to all sites in England, Scotland and Wales unless otherwise stated.", @@ -19,13 +18,11 @@ describe("Introduction page", () => { ); }); it("Given I start a survey, When preview content is set on the introduction page, Then the content headings should be displayed at the correct level", async () => { - await browser.openQuestionnaire(introductionSchema); const introQuestionH3Selector = `${IntroductionPage.introQuestion()} h3`; const h3Exists = await $(introQuestionH3Selector).isExisting(); await expect(h3Exists).toBe(true); }); it("Given I start a survey with introduction guidance set, When I view the introduction page, Then I should be able to see introduction guidance", async () => { - await browser.openQuestionnaire(introductionSchema); await expect(await $(IntroductionPage.guidancePanel(1)).isDisplayed()).toBe(true); await expect(await $(IntroductionPage.guidancePanel(1)).getText()).toContain("Coronavirus (COVID-19) guidance"); await expect(await $(IntroductionPage.guidancePanel(1)).getText()).toContain( diff --git a/tests/functional/spec/journeys/hub_and_spoke/hub_and_spoke_custom_content.spec.js b/tests/functional/spec/journeys/hub_and_spoke/hub_and_spoke_custom_content.spec.js index ad1509d6ef..b148467d53 100644 --- a/tests/functional/spec/journeys/hub_and_spoke/hub_and_spoke_custom_content.spec.js +++ b/tests/functional/spec/journeys/hub_and_spoke/hub_and_spoke_custom_content.spec.js @@ -10,7 +10,7 @@ describe("Feature: Hub and Spoke with custom content", () => { await browser.openQuestionnaire(hubAndSpokeSchema); await expect(await $(HubPage.heading()).getText()).toBe("Choose another section to complete"); await expect(await $(HubPage.guidance()).isExisting()).toBe(false); - await expect(await $(HubPage.summaryRowLink("household-section")).getHTML()).toContain("Start section: Household residents"); + await expect(await $(HubPage.summaryRowLink("household-section")).getHTML({ prettify: false })).toContain("Start section: Household residents"); await expect(await $(HubPage.submit()).getText()).toBe("Continue"); await expect(await $(HubPage.warning()).isExisting()).toBe(false); }); @@ -23,7 +23,7 @@ describe("Feature: Hub and Spoke with custom content", () => { await $(HowManyPeopleLiveHere.answer1()).click(); await click(HowManyPeopleLiveHere.submit()); await click(HouseholdSummary.submit()); - await expect(await $(HubPage.summaryRowLink("household-section")).getHTML()).toContain("View answers: Household residents"); + await expect(await $(HubPage.summaryRowLink("household-section")).getHTML({ prettify: false })).toContain("View answers: Household residents"); await expect(await $(HubPage.heading()).getText()).toBe("Submission title"); await expect(await $(HubPage.guidance()).getText()).toBe("Submission guidance"); await expect(await $(HubPage.submit()).getText()).toBe("Submission button"); diff --git a/tests/functional/spec/launch_with_cir.spec.js b/tests/functional/spec/launch_with_cir.spec.js index dfc5105055..93ece33492 100644 --- a/tests/functional/spec/launch_with_cir.spec.js +++ b/tests/functional/spec/launch_with_cir.spec.js @@ -6,7 +6,7 @@ import ThankYouPage from "../base_pages/thank-you.page"; describe("Launch a survey from the collection instrument registry", () => { it("Given I retrieve a Collection Instrument, When I Launch, Then I am able to complete the survey as normal", async () => { await browser.openQuestionnaire(null, { - version: "v2", + launchVersion: "v2", cirInstrumentId: "fd4a527f-c126-da2d-8ee6-51663a43e416", }); await verifyUrlContains(NameBlockPage.pageName); diff --git a/tests/functional/spec/list_collector/list_collector_content.spec.js b/tests/functional/spec/list_collector/list_collector_content.spec.js index 43c02d3f6d..89a0bdd54c 100644 --- a/tests/functional/spec/list_collector/list_collector_content.spec.js +++ b/tests/functional/spec/list_collector/list_collector_content.spec.js @@ -32,7 +32,7 @@ describe("List Collector Section Summary and Summary Items", () => { await click(HubPage.submit()); await $(ResponsiblePartyQuestionPage.yes()).click(); await click(ResponsiblePartyQuestionPage.submit()); - await expect(await $(ListCollectorContentPage.heading()).getHTML()).toContain("Companies"); + await expect(await $(ListCollectorContentPage.heading()).getHTML({ prettify: false })).toContain("Companies"); await expect(await $("#main-content > p").getText()).toBe( "You have previously reported the following companies. Press continue to updated registration and trading information.", ); diff --git a/tests/functional/spec/list_collector/list_collector_section_summary.spec.js b/tests/functional/spec/list_collector/list_collector_section_summary.spec.js index c591cc89ff..5ea8c8d2e1 100644 --- a/tests/functional/spec/list_collector/list_collector_section_summary.spec.js +++ b/tests/functional/spec/list_collector/list_collector_section_summary.spec.js @@ -34,14 +34,15 @@ describe("List Collector Section Summary and Summary Items", () => { await expect(await $(companiesListRowItem(1)).$$(".ons-summary__values")[1].getText()).toContain("123"); await expect(await $(companiesListRowItem(1)).$$(".ons-summary__values")[2].getText()).toContain("Yes"); const listItemId = (await listItemIds())[0]; - await expect(await $(companiesListRowItem(1)).$$(".ons-summary__actions")[0].getHTML()).toContain( + const row = await $(companiesListRowItem(1)); + await expect(await row.$(`dd.ons-summary__actions#${listItemId}`).getHTML({ prettify: false })).toContain( `return_to=section-summary&return_to_answer_id=${listItemId}#company-or-branch-name`, ); - await expect(await $(companiesListRowItem(1)).$$(".ons-summary__actions")[1].getHTML()).toContain( - `return_to_answer_id=registration-number-${listItemId}#registration-number`, + await expect(await row.$(`dd#registration-number-${listItemId}`).getHTML({ prettify: false })).toContain( + `return_to=section-summary&return_to_answer_id=registration-number-${listItemId}#registration-number`, ); - await expect(await $(companiesListRowItem(1)).$$(".ons-summary__actions")[2].getHTML()).toContain( - `return_to_answer_id=authorised-insurer-radio-${listItemId}#authorised-insurer-radio`, + await expect(await row.$(`dd#authorised-insurer-radio-${listItemId}`).getHTML({ prettify: false })).toContain( + `return_to=section-summary&return_to_answer_id=authorised-insurer-radio-${listItemId}#authorised-insurer-radio`, ); }); it("When I add multiple items, Then all the items should be visible on the section summary and have correct values", async () => { @@ -271,8 +272,8 @@ describe("List Collector Section Summary and Summary Items", () => { await expect(await $(companiesListRowItem(3)).$$(".ons-summary__values")[1].getText()).toContain("234"); await expect(await $(companiesListRowItem(3)).$$(".ons-summary__actions")[0].getText()).toContain("Change"); await expect(await $(SubmitPage.householderCheckboxAnswer()).getText()).toContain("No"); - await expect(await $("body").getHTML()).toContain("Add another UK company or branch"); - await expect(await $("body").getHTML()).toContain("Remove"); + await expect(await $("body").getHTML({ prettify: false })).toContain("Add another UK company or branch"); + await expect(await $("body").getHTML({ prettify: false })).toContain("Remove"); }); it("When I get to the view submitted response page, Then the summary should be displayed as expected without any change or remove links", async () => { @@ -293,7 +294,7 @@ describe("List Collector Section Summary and Summary Items", () => { await click(HouseholderCheckboxPage.submit()); await click(SectionSummaryTwoPage.submit()); await click(SubmitPage.submit()); - await expect(await $(ThankYouPage.title()).getHTML()).toContain("Thank you for completing the Test"); + await expect(await $(ThankYouPage.title()).getHTML({ prettify: false })).toContain("Thank you for completing the Test"); await $(ThankYouPage.savePrintAnswersLink()).click(); await verifyUrlContains(ViewSubmittedResponsePage.pageName); @@ -306,9 +307,9 @@ describe("List Collector Section Summary and Summary Items", () => { await expect(await $(companiesListRowItem(3)).$$(".ons-summary__values")[0].getText()).toContain("Company C"); await expect(await $(companiesListRowItem(3)).$$(".ons-summary__values")[1].getText()).toContain("234"); await expect(await $(companiesListRowItem(3)).$$(".ons-summary__values")[2].getText()).toContain("Yes"); - await expect(await $("body").getHTML()).not.toContain("Change"); - await expect(await $("body").getHTML()).not.toContain("Remove"); - await expect(await $("body").getHTML()).not.toContain("Add another UK company or branch"); + await expect(await $("body").getHTML({ prettify: false })).not.toContain("Change"); + await expect(await $("body").getHTML({ prettify: false })).not.toContain("Remove"); + await expect(await $("body").getHTML({ prettify: false })).not.toContain("Add another UK company or branch"); }); }); }); diff --git a/tests/functional/spec/my_account_header_link.spec.js b/tests/functional/spec/my_account_header_link.spec.js index 97f318a2e8..42cb345e99 100644 --- a/tests/functional/spec/my_account_header_link.spec.js +++ b/tests/functional/spec/my_account_header_link.spec.js @@ -4,7 +4,7 @@ import { verifyUrlContains } from "../helpers"; describe("My Account header link", () => { it("Given I start a survey, When I visit a page then I should not see the My account button", async () => { await browser.openQuestionnaire("test_introduction.json"); - await browser.pause(100); + await verifyUrlContains("introduction"); await expect(await $(IntroductionPage.myAccountLink()).isExisting()).toBe(false); }); diff --git a/tests/functional/spec/preview.spec.js b/tests/functional/spec/preview.spec.js index 8700553462..ae03aadb3b 100644 --- a/tests/functional/spec/preview.spec.js +++ b/tests/functional/spec/preview.spec.js @@ -52,6 +52,7 @@ describe("Introduction preview questions", () => { it("Given I complete some of a survey and the piped answers should be being populated, Then preview answers should still be showing placeholders", async () => { await browser.openQuestionnaire(introductionSchemaLinear); + await $(startSurveyButton).click(); await $(noRadio).click(); await $(submitButton).click(); diff --git a/tests/functional/spec/question_description.spec.js b/tests/functional/spec/question_description.spec.js index dc901cf3f7..48c162797b 100644 --- a/tests/functional/spec/question_description.spec.js +++ b/tests/functional/spec/question_description.spec.js @@ -9,7 +9,7 @@ import { click, verifyUrlContains } from "../helpers"; describe("Question description", () => { it("Given a question description has been set in the schema as an array, When it is rendered, Then it is displayed correctly as multiple paragraph attributes", async () => { await browser.openQuestionnaire("test_question_description.json"); - await expect(await $(NameBlockPage.questionTitle()).getHTML()).toContain("

Answer the question

Go on

"); + await expect(await $(NameBlockPage.questionTitle()).getHTML({ prettify: false })).toContain("

Answer the question

Go on

"); }); }); @@ -17,12 +17,12 @@ describe("Optional question description and guidance", () => { it("Given a question description has been set in the schema, When the value to be displayed is None, Then it is not rendered on the page", async () => { await browser.openQuestionnaire("test_optional_guidance_and_description.json"); await click(DescriptionBlockPage.submit()); - await expect(await $(RadioPage.questionTitle()).getHTML()).not.toContain("

''

"); + await expect(await $(RadioPage.questionTitle()).getHTML({ prettify: false })).not.toContain("

''

"); await expect(await $(RadioPage.guidance()).isExisting()).toBe(false); await $(RadioPage.no()).click(); await click(RadioPage.submit()); - await expect(await $(RadioPageTwo.questionTitle()).getHTML()).toContain("
  • List item one
  • "); - await expect(await $(RadioPageTwo.questionTitle()).getHTML()).not.toContain("
  • "); + await expect(await $(RadioPageTwo.questionTitle()).getHTML({ prettify: false })).toContain("
  • List item one
  • "); + await expect(await $(RadioPageTwo.questionTitle()).getHTML({ prettify: false })).not.toContain("
  • "); }); }); diff --git a/tests/functional/spec/save_sign_out.spec.js b/tests/functional/spec/save_sign_out.spec.js index 67765c1afb..522bebcda9 100644 --- a/tests/functional/spec/save_sign_out.spec.js +++ b/tests/functional/spec/save_sign_out.spec.js @@ -21,7 +21,7 @@ describe("Save sign out / Exit", () => { await verifyUrlContains("/surveys/todo"); await browser.back(); - await expect(await $("body").getHTML()).toContain("Sorry, you need to sign in again"); + await expect(await $("body").getHTML({ prettify: false })).toContain("Sorry, you need to sign in again"); }); it("Given I am completing a questionnaire, when I select save and sign out, then I am redirected to the signed out page", async () => { @@ -34,7 +34,7 @@ describe("Save sign out / Exit", () => { await verifyUrlContains("/signed-out"); await browser.back(); - await expect(await $("body").getHTML()).toContain("Sorry, you need to sign in again"); + await expect(await $("body").getHTML({ prettify: false })).toContain("Sorry, you need to sign in again"); }); it("Given I have started a questionnaire, when I return to the questionnaire, then I am returned to the page I was on and can then complete the questionnaire", async () => { @@ -63,9 +63,9 @@ describe("Save sign out / Exit", () => { await browser.openQuestionnaire("test_theme_social.json", { theme: "social" }); await $(SubmitPage.saveSignOut()).click(); await verifyUrlContains("/signed-out"); - await expect(await $("body").getHTML()).toContain("Your progress has been saved"); - await expect(await $("body").getHTML()).toContain("To resume the survey,"); - await expect(await $("body").getHTML()).toContain("/en/start"); + await expect(await $("body").getHTML({ prettify: false })).toContain("Your progress has been saved"); + await expect(await $("body").getHTML({ prettify: false })).toContain("To resume the survey,"); + await expect(await $("body").getHTML({ prettify: false })).toContain("/en/start"); }); it("Given a I have started a business questionnaire, when I select save and sign out, then I am redirected to the signed out page and the correct access code link is shown", async () => { @@ -73,9 +73,9 @@ describe("Save sign out / Exit", () => { await $(IntroductionPage.getStarted()).click(); await $(IntroInterstitialPage.saveSignOut()).click(); await verifyUrlContains("/signed-out"); - await expect(await $("body").getHTML()).toContain("Your progress has been saved"); - await expect(await $("body").getHTML()).toContain("To find further information or resume the survey,"); - await expect(await $("body").getHTML()).toContain("/surveys/todo"); + await expect(await $("body").getHTML({ prettify: false })).toContain("Your progress has been saved"); + await expect(await $("body").getHTML({ prettify: false })).toContain("To find further information or resume the survey,"); + await expect(await $("body").getHTML({ prettify: false })).toContain("/surveys/todo"); }); it("Given a business questionnaire, when I navigate the questionnaire, then I see the correct sign out buttons", async () => { diff --git a/tests/functional/spec/summaries/calculated_summary/new_calculated_summary_repeating_blocks.spec.js b/tests/functional/spec/summaries/calculated_summary/new_calculated_summary_repeating_blocks.spec.js index 7311aae531..25059fe28f 100644 --- a/tests/functional/spec/summaries/calculated_summary/new_calculated_summary_repeating_blocks.spec.js +++ b/tests/functional/spec/summaries/calculated_summary/new_calculated_summary_repeating_blocks.spec.js @@ -232,6 +232,7 @@ describe("Feature: Calculated Summary using Repeating Blocks", () => { await click(CalculatedSummarySpendingPage.submit()); await click(SectionOnePage.submit()); // section 2 is now gone + await expect(await $$(HubPage.summaryItems()).length).toBe(1); }); }); diff --git a/tests/functional/spec/summaries/section_summary/section_summary_repeating_sections.spec.js b/tests/functional/spec/summaries/section_summary/section_summary_repeating_sections.spec.js index 81d1e9d8c2..2f3513a1f1 100644 --- a/tests/functional/spec/summaries/section_summary/section_summary_repeating_sections.spec.js +++ b/tests/functional/spec/summaries/section_summary/section_summary_repeating_sections.spec.js @@ -12,8 +12,7 @@ describe("Feature: Repeating Section Summaries", () => { describe("Given the user has added some members to the household and is on the Hub", () => { before("Open survey and add household members", async () => { await browser.openQuestionnaire("test_repeating_section_summaries.json"); - // Ensure the questionnaire fully loads - await browser.pause(100); + // Ensure we are on the Hub await verifyUrlContains(HubPage.url()); // Start first section to add household members diff --git a/tests/functional/spec/supplementary_data/supplementary_data_calculated_question_and_interstitial.spec.js b/tests/functional/spec/supplementary_data/supplementary_data_calculated_question_and_interstitial.spec.js index d4798d46ac..9d68f68005 100644 --- a/tests/functional/spec/supplementary_data/supplementary_data_calculated_question_and_interstitial.spec.js +++ b/tests/functional/spec/supplementary_data/supplementary_data_calculated_question_and_interstitial.spec.js @@ -1,4 +1,4 @@ -import { click, assertSummaryTitles } from "../../helpers"; +import { click, assertSummaryTitles, openQuestionnaireWithRetry } from "../../helpers"; import { expect } from "@wdio/globals"; import { getRandomString } from "../../jwt_helper"; import CalculatedSummarySalesPage from "../../generated_pages/supplementary_data_with_introduction_and_calculated_summary/calculated-summary-sales.page.js"; @@ -19,8 +19,8 @@ describe("Using supplementary data", () => { const summaryRowTitles = ".ons-summary__row-title"; before("Starting the survey", async () => { - await browser.openQuestionnaire("test_supplementary_data_with_introduction_and_calculated_summary.json", { - version: "v2", + await openQuestionnaireWithRetry("test_supplementary_data_with_introduction_and_calculated_summary.json", { + launchVersion: "v2", sdsDatasetId: "203b2f9d-c500-8175-98db-86ffcfdccfa3", responseId, }); @@ -114,10 +114,11 @@ describe("Using supplementary data", () => { }); it("Given I can view my response after submission, When I submit the survey, Then I see the values I've entered and correct rendering with supplementary data", async () => { await browser.openQuestionnaire("test_supplementary_data_with_introduction_and_calculated_summary.json", { - version: "v2", + launchVersion: "v2", sdsDatasetId: "3bb41d29-4daa-9520-82f0-cae365f390c6", responseId, }); + await click(HubPage.submit()); await $(ThankYouPage.savePrintAnswersLink()).click(); await assertSummaryTitles(["Company Details"]); diff --git a/tests/functional/spec/supplementary_data/supplementary_data_calculated_summary_and_repeating_block.spec.js b/tests/functional/spec/supplementary_data/supplementary_data_calculated_summary_and_repeating_block.spec.js index 04074ce97d..23f550bc19 100644 --- a/tests/functional/spec/supplementary_data/supplementary_data_calculated_summary_and_repeating_block.spec.js +++ b/tests/functional/spec/supplementary_data/supplementary_data_calculated_summary_and_repeating_block.spec.js @@ -21,8 +21,9 @@ describe("Using supplementary data", () => { const summaryValues = ".ons-summary__values"; before("Starting the survey", async () => { + await browser.reloadSession(); await browser.openQuestionnaire("test_supplementary_data_repeating_block_and_calculated_summary.json", { - version: "v2", + launchVersion: "v2", sdsDatasetId: "203b2f9d-c500-8175-98db-86ffcfdccfa3", responseId, }); @@ -145,10 +146,11 @@ describe("Using supplementary data", () => { it("Given the survey has been relaunched with new data and more items in the products list, When I am on the Hub, Then I see the products section and section with a new block due to the product list size are both in progress", async () => { await browser.openQuestionnaire("test_supplementary_data_repeating_block_and_calculated_summary.json", { - version: "v2", + launchVersion: "v2", sdsDatasetId: "3bb41d29-4daa-9520-82f0-cae365f390c6", responseId, }); + await expect(await $(HubPage.summaryRowState("section-1")).getText()).toBe("Partially completed"); await expect(await $(HubPage.summaryRowState("section-3")).getText()).toBe("Partially completed"); }); @@ -183,20 +185,22 @@ describe("Using supplementary data", () => { await click(Section1Page.submit()); await expect(await $(HubPage.summaryRowState("section-1")).getText()).toBe("Completed"); await browser.openQuestionnaire("test_supplementary_data_repeating_block_and_calculated_summary.json", { - version: "v2", + launchVersion: "v2", sdsDatasetId: "203b2f9d-c500-8175-98db-86ffcfdccfa3", responseId, }); + await expect(await $(HubPage.summaryRowState("section-1")).getText()).toBe("Partially completed"); await expect(await $(HubPage.summaryRowState("section-2")).getText()).toBe("Partially completed"); }); it("Given I can view my response after submission, When I submit the survey, Then I see the values I've entered and correct rendering with supplementary data", async () => { await browser.openQuestionnaire("test_supplementary_data_repeating_block_and_calculated_summary.json", { - version: "v2", + launchVersion: "v2", sdsDatasetId: "3bb41d29-4daa-9520-82f0-cae365f390c6", responseId, }); + await click(HubPage.submit()); await click(ListCollectorProductsPage.submit()); await $(ProductRepeatingBlock1Page.productVolumeSales()).setValue(40); diff --git a/tests/functional/spec/supplementary_data/supplementary_data_with_list_collector.spec.js b/tests/functional/spec/supplementary_data/supplementary_data_with_list_collector.spec.js index 56ccdcd26b..a9d98f3826 100644 --- a/tests/functional/spec/supplementary_data/supplementary_data_with_list_collector.spec.js +++ b/tests/functional/spec/supplementary_data/supplementary_data_with_list_collector.spec.js @@ -23,8 +23,9 @@ describe("Using supplementary data", () => { const summaryValues = ".ons-summary__values"; before("Starting the survey", async () => { + await browser.reloadSession(); await browser.openQuestionnaire("test_supplementary_data_with_list_collector.json", { - version: "v2", + launchVersion: "v2", sdsDatasetId: "203b2f9d-c500-8175-98db-86ffcfdccfa3", responseId, }); @@ -116,10 +117,11 @@ describe("Using supplementary data", () => { }); it("Given I relaunch the survey with new supplementary data and new list items for the repeating section, When I open the Hub page, Then I see the new supplementary list items as new incomplete sections and not any old ones", async () => { await browser.openQuestionnaire("test_supplementary_data_with_list_collector.json", { - version: "v2", + launchVersion: "v2", sdsDatasetId: "3bb41d29-4daa-9520-82f0-cae365f390c6", responseId, }); + await expect(await $(HubPage.summaryItems("section-3-1")).getText()).toContain("Harry Potter"); await expect(await $(HubPage.summaryItems("section-3-2")).getText()).toContain("Bruce Wayne"); await expect(await $(HubPage.summaryItems("section-4-1")).getText()).toContain("Jane Doe"); diff --git a/tests/functional/spec/thank_you.spec.js b/tests/functional/spec/thank_you.spec.js index 1747cd5a87..e87b3ec920 100644 --- a/tests/functional/spec/thank_you.spec.js +++ b/tests/functional/spec/thank_you.spec.js @@ -15,10 +15,10 @@ describe("Thank You Social", () => { await click(SubmitPage.submit()); await click(HubPage.submit()); await verifyUrlContains(ThankYouPage.pageName); - await expect(await $(ThankYouPage.title()).getHTML()).toContain("Thank you for completing the Test Social Survey"); - await expect(await $(ThankYouPage.guidance()).getHTML()).toContain("Your answers have been submitted"); - await expect(await $(ThankYouPage.metadata()).getHTML()).toContain("Submitted on:"); - await expect(await $(ThankYouPage.metadata()).getHTML()).not.toContain("Submission reference:"); + await expect(await $(ThankYouPage.title()).getHTML({ prettify: false })).toContain("Thank you for completing the Test Social Survey"); + await expect(await $(ThankYouPage.guidance()).getHTML({ prettify: false })).toContain("Your answers have been submitted"); + await expect(await $(ThankYouPage.metadata()).getHTML({ prettify: false })).toContain("Submitted on:"); + await expect(await $(ThankYouPage.metadata()).getHTML({ prettify: false })).not.toContain("Submission reference:"); }); }); }); @@ -34,10 +34,10 @@ describe("Thank You Default", () => { await click(SubmitPage.submit()); await click(HubPage.submit()); await verifyUrlContains(ThankYouPage.pageName); - await expect(await $(ThankYouPage.title()).getHTML()).toContain("Thank you for completing the Question Title Test"); - await expect(await $(ThankYouPage.guidance()).getHTML()).toContain("Your answers have been submitted for"); - await expect(await $(ThankYouPage.metadata()).getHTML()).toContain("Submitted on:"); - await expect(await $(ThankYouPage.metadata()).getHTML()).toContain("Submission reference:"); + await expect(await $(ThankYouPage.title()).getHTML({ prettify: false })).toContain("Thank you for completing the Question Title Test"); + await expect(await $(ThankYouPage.guidance()).getHTML({ prettify: false })).toContain("Your answers have been submitted for"); + await expect(await $(ThankYouPage.metadata()).getHTML({ prettify: false })).toContain("Submitted on:"); + await expect(await $(ThankYouPage.metadata()).getHTML({ prettify: false })).toContain("Submission reference:"); }); }); }); @@ -54,17 +54,21 @@ describe("Thank You Default View Response Enabled", () => { it("When I navigate to the thank you page, and I have submitted less than 40 seconds ago, Then I should see the countdown timer and option to view my answers", async () => { await expect(await $(ThankYouPage.viewSubmittedGuidance()).isDisplayed()).toBe(false); - await expect(await $(ThankYouPage.title()).getHTML()).toContain("Thank you for completing the Test Thank You"); - await expect(await $(ThankYouPage.viewAnswersTitle()).getHTML()).toContain("Get a copy of your answers"); + await expect(await $(ThankYouPage.title()).getHTML({ prettify: false })).toContain("Thank you for completing the Test Thank You"); + await expect(await $(ThankYouPage.viewAnswersTitle()).getHTML({ prettify: false })).toContain("Get a copy of your answers"); await expect(await $(ThankYouPage.viewAnswersLink()).getText()).toContain("save or print your answers"); - await expect(await $(ThankYouPage.viewSubmittedCountdown()).getHTML()).toContain("For security, your answers will only be available to view for another"); + await expect(await $(ThankYouPage.viewSubmittedCountdown()).getHTML({ prettify: false })).toContain( + "For security, your answers will only be available to view for another", + ); }); it("When I navigate to the thank you page, and I have submitted more than 40 seconds ago, Then I shouldn't see the option to view my answers", async () => { await expect(await $(ThankYouPage.viewSubmittedGuidance()).isDisplayed()).toBe(false); await browser.pause(46000); // Waiting 40 seconds for the timeout to expire (45 minute timeout changed to 35 seconds by overriding VIEW_SUBMITTED_RESPONSE_EXPIRATION_IN_SECONDS for the purpose of the functional test) await expect(await $(ThankYouPage.viewSubmittedGuidance()).isDisplayed()).toBe(true); - await expect(await $(ThankYouPage.viewSubmittedGuidance()).getHTML()).toContain("For security, you can no longer view or get a copy of your answers"); + await expect(await $(ThankYouPage.viewSubmittedGuidance()).getHTML({ prettify: false })).toContain( + "For security, you can no longer view or get a copy of your answers", + ); }); }); }); diff --git a/tests/functional/spec/theme_dbt.spec.js b/tests/functional/spec/theme_dbt.spec.js index 3dea14156a..48510e9121 100644 --- a/tests/functional/spec/theme_dbt.spec.js +++ b/tests/functional/spec/theme_dbt.spec.js @@ -9,7 +9,7 @@ describe("Theme DBT", () => { it("When I navigate to the radio page, Then I should see DBT theme content", async () => { await verifyUrlContains(RadioPage.pageName); - await expect(await $("#dbt-logo-alt").getHTML()).toContain("Department for Business and Trade"); + await expect(await $("#dbt-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain("Department for Business and Trade"); }); }); }); diff --git a/tests/functional/spec/theme_dbt_dsit.spec.js b/tests/functional/spec/theme_dbt_dsit.spec.js index b52afe2d35..a6668fb616 100644 --- a/tests/functional/spec/theme_dbt_dsit.spec.js +++ b/tests/functional/spec/theme_dbt_dsit.spec.js @@ -9,8 +9,10 @@ describe("Theme DBT-DSIT", () => { it("When I navigate to the radio page, Then I should see DBT-DSIT theme content", async () => { await verifyUrlContains(RadioPage.pageName); - await expect(await $("#dbt-logo-alt").getHTML()).toContain("Department for Business and Trade logo"); - await expect(await $("#dsit-logo-alt").getHTML()).toContain("Department for Science, Innovation and Technology logo"); + await expect(await $("#dbt-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain("Department for Business and Trade logo"); + await expect(await $("#dsit-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain( + "Department for Science, Innovation and Technology logo", + ); }); }); }); diff --git a/tests/functional/spec/theme_dbt_dsit_ni.spec.js b/tests/functional/spec/theme_dbt_dsit_ni.spec.js index 23e3e801f1..27c92929dc 100644 --- a/tests/functional/spec/theme_dbt_dsit_ni.spec.js +++ b/tests/functional/spec/theme_dbt_dsit_ni.spec.js @@ -9,9 +9,13 @@ describe("Theme DBT-DSIT-NI", () => { it("When I navigate to the radio page, Then I should see DBT-DSIT-NI theme content", async () => { await verifyUrlContains(RadioPage.pageName); - await expect(await $("#dbt-logo-alt").getHTML()).toContain("Department for Business and Trade logo"); - await expect(await $("#dsit-logo-alt").getHTML()).toContain("Department for Science, Innovation and Technology logo"); - await expect(await $("#finance-ni-logo-alt").getHTML()).toContain("Northern Ireland Department of Finance logo"); + await expect(await $("#dbt-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain("Department for Business and Trade logo"); + await expect(await $("#dsit-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain( + "Department for Science, Innovation and Technology logo", + ); + await expect(await $("#finance-ni-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain( + "Northern Ireland Department of Finance logo", + ); }); }); }); diff --git a/tests/functional/spec/theme_dbt_ni.spec.js b/tests/functional/spec/theme_dbt_ni.spec.js index 83915b7cd8..77d99ecadd 100644 --- a/tests/functional/spec/theme_dbt_ni.spec.js +++ b/tests/functional/spec/theme_dbt_ni.spec.js @@ -9,8 +9,10 @@ describe("Theme DBT-NI", () => { it("When I navigate to the radio page, Then I should see DBT-NI theme content", async () => { await verifyUrlContains(RadioPage.pageName); - await expect(await $("#dbt-logo-alt").getHTML()).toContain("Department for Business and Trade"); - await expect(await $("#finance-ni-logo-alt").getHTML()).toContain("Northern Ireland Department of Finance logo"); + await expect(await $("#dbt-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain("Department for Business and Trade"); + await expect(await $("#finance-ni-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain( + "Northern Ireland Department of Finance logo", + ); }); }); }); diff --git a/tests/functional/spec/theme_desnz.spec.js b/tests/functional/spec/theme_desnz.spec.js index 744283562f..86a2abd7a1 100644 --- a/tests/functional/spec/theme_desnz.spec.js +++ b/tests/functional/spec/theme_desnz.spec.js @@ -9,7 +9,7 @@ describe("Theme DESNZ", () => { it("When I navigate to the radio page, Then I should see DESNZ theme content", async () => { await verifyUrlContains(RadioPage.pageName); - await expect(await $("#desnz-logo-alt").getHTML()).toContain("Department for Energy Security and Net Zero"); + await expect(await $("#desnz-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain("Department for Energy Security and Net Zero"); }); }); }); diff --git a/tests/functional/spec/theme_desnz_ni.spec.js b/tests/functional/spec/theme_desnz_ni.spec.js index 0f9bf748a8..a5b13ce7db 100644 --- a/tests/functional/spec/theme_desnz_ni.spec.js +++ b/tests/functional/spec/theme_desnz_ni.spec.js @@ -9,8 +9,10 @@ describe("Theme DESNZ-NI", () => { it("When I navigate to the radio page, Then I should see DESNZ-NI theme content", async () => { await verifyUrlContains(RadioPage.pageName); - await expect(await $("#desnz-logo-alt").getHTML()).toContain("Department for Energy Security and Net Zero"); - await expect(await $("#finance-ni-logo-alt").getHTML()).toContain("Northern Ireland Department of Finance logo"); + await expect(await $("#desnz-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain("Department for Energy Security and Net Zero"); + await expect(await $("#finance-ni-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain( + "Northern Ireland Department of Finance logo", + ); }); }); }); diff --git a/tests/functional/spec/theme_nhse.spec.js b/tests/functional/spec/theme_nhse.spec.js index 760b0940c5..3945187731 100644 --- a/tests/functional/spec/theme_nhse.spec.js +++ b/tests/functional/spec/theme_nhse.spec.js @@ -10,8 +10,8 @@ describe("Theme NHSE", () => { it("When I navigate to the radio page, Then I should see NHSE theme content", async () => { await verifyUrlContains(RadioPage.pageName); - await expect(await $("#ons-logo-stacked-en-alt").getHTML()).toContain("Office for National Statistics"); - await expect(await $("#nhs-logo-alt").getHTML()).toContain("National Heath Service"); + await expect(await $("#ons-logo-stacked-en-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain("Office for National Statistics"); + await expect(await $("#nhs-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain("National Heath Service"); }); }); }); diff --git a/tests/functional/spec/theme_northernireland.spec.js b/tests/functional/spec/theme_northernireland.spec.js index f3eef0e3f4..308e79ab2a 100644 --- a/tests/functional/spec/theme_northernireland.spec.js +++ b/tests/functional/spec/theme_northernireland.spec.js @@ -9,7 +9,9 @@ describe("Theme Northern Ireland", () => { it("When I navigate to the radio page, Then I should see Northern Ireland theme content", async () => { await verifyUrlContains(RadioPage.pageName); - await expect(await $("#finance-ni-logo-alt").getHTML()).toContain("Northern Ireland Department of Finance logo"); + await expect(await $("#finance-ni-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain( + "Northern Ireland Department of Finance logo", + ); }); }); }); diff --git a/tests/functional/spec/theme_orr.spec.js b/tests/functional/spec/theme_orr.spec.js index ae42be571a..8c3df4159a 100644 --- a/tests/functional/spec/theme_orr.spec.js +++ b/tests/functional/spec/theme_orr.spec.js @@ -9,7 +9,7 @@ describe("Theme Rail and Road", () => { it("When I navigate to the radio page, Then I should see Rail and Road theme content", async () => { await verifyUrlContains(RadioPage.pageName); - await expect(await $("#orr-logo-mobile-alt").getHTML()).toContain("Office of Rail and Road logo"); + await expect(await $("#orr-logo-mobile-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain("Office of Rail and Road logo"); }); }); }); diff --git a/tests/functional/spec/theme_ukhsa_ons.spec.js b/tests/functional/spec/theme_ukhsa_ons.spec.js index 116b7ea828..7bad8d3b77 100644 --- a/tests/functional/spec/theme_ukhsa_ons.spec.js +++ b/tests/functional/spec/theme_ukhsa_ons.spec.js @@ -10,8 +10,9 @@ describe("Theme UKHSA-ONS", () => { it("When I navigate to the radio page, Then I should see UKHSA-ONS theme content", async () => { await verifyUrlContains(RadioPage.pageName); - await expect(await $("#ons-logo-stacked-en-alt").getHTML()).toContain("Office for National Statistics"); - await expect(await $("#ukhsa-logo-alt").getHTML()).toContain("UK Health Security Agency"); + await $("#ons-logo-stacked-en-alt").waitForExist(); + await expect(await $("#ons-logo-stacked-en-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain("Office for National Statistics"); + await expect(await $("#ukhsa-logo-alt").getHTML({ includeSelectorTag: false, prettify: false })).toContain("UK Health Security Agency"); }); }); }); diff --git a/tests/functional/spec/timeout/timeout_modal.js b/tests/functional/spec/timeout/timeout_modal.js index 56275134b1..bba50a7861 100644 --- a/tests/functional/spec/timeout/timeout_modal.js +++ b/tests/functional/spec/timeout/timeout_modal.js @@ -7,14 +7,16 @@ class TestCase { await this.checkTimeoutModal(); await browser.pause(65000); // We are waiting for the session to expire await verifyUrlContains("/session-expired"); - await expect(await $("body").getHTML()).toContain( + await expect(await $("body").getHTML({ prettify: false })).toContain( "Sorry, you need to sign in again", "This is because you have either:", "been inactive for 45 minutes and your session has timed out to protect your information", "followed a link to a page you are not signed in to", "followed a link to a survey that has already been submitted", ); - await expect(await $("body").getHTML()).not.toContain("To protect your information, your progress will be saved and you will be signed out in"); + await expect(await $("body").getHTML({ prettify: false })).not.toContain( + "To protect your information, your progress will be saved and you will be signed out in", + ); }).timeout(140000); } @@ -26,14 +28,14 @@ class TestCase { await browser.pause(65000); // Waiting 65 seconds to sanity check that it hasn’t expired await browser.refresh(); await verifyUrlContains(await page.pageName); - await expect(await $("body").getHTML()).not.toContain("Sorry, you need to sign in again"); + await expect(await $("body").getHTML({ prettify: false })).not.toContain("Sorry, you need to sign in again"); }).timeout(140000); } testCaseExtendedNewWindow(page) { it("When the timeout modal is displayed, but I open a new window and then focus back on the timeout modal window, Then my session will be extended", async () => { await this.checkTimeoutModal(); - await browser.newWindow(""); + await browser.newWindow("about:blank"); // Opens an empty new window await browser.switchWindow(await page.pageName); await browser.refresh(); await browser.pause(65000); // Waiting 65 seconds to sanity check that it hasn’t expired diff --git a/tests/functional/wdio.conf.cjs b/tests/functional/wdio.conf.cjs index eaaceb0de2..d91b252e4e 100644 --- a/tests/functional/wdio.conf.cjs +++ b/tests/functional/wdio.conf.cjs @@ -1,3 +1,22 @@ +const path = require("node:path"); + +const MODE = process.env.FUNCTIONAL_MODE; // "main" or "sds" + +function specPath(p) { + return path.join(__dirname, "spec", p); +} + +let specs; +let exclude = []; + +if (MODE === "sds") { + specs = [specPath("supplementary_data/**/*.spec.js")]; +} else { + specs = [specPath("**/*.spec.js")]; + exclude = [specPath("supplementary_data/**/*.spec.js")]; +} + + exports.config = { // // ==================== @@ -16,7 +35,7 @@ exports.config = { // NPM script (see https://docs.npmjs.com/cli/run-script) then the current working // directory is where your package.json resides, so `wdio` will be called from there. // - specs: ["./spec/**/*.js"], + specs, suites: { components: ["./spec/components/**/*.js", "./spec/*.spec.js", "./spec/summaries/**/*.js"], timeout_modal: ["./spec/timeout/timeout_modal_extended_new_window/*.js", "./spec/timeout/timeout_modal_expired/*.js", "./spec/timeout/timeout_modal_extended/*.js"], @@ -24,9 +43,8 @@ exports.config = { journeys: ["./spec/journeys/**/*.js"] }, // Patterns to exclude. - exclude: [ - // 'path/to/excluded/files' - ], + exclude, + // // ============ // Capabilities @@ -58,11 +76,13 @@ exports.config = { // excludeDriverLogs: ['bugreport', 'server'], "goog:chromeOptions": { args: [ - process.env.EQ_RUN_FUNCTIONAL_TESTS_HEADLESS ? "--headless" : "--start-maximized", + process.env.EQ_RUN_FUNCTIONAL_TESTS_HEADLESS ? "--headless=new" : "--start-maximized", "--window-size=3840,2160", "--no-sandbox", + "--disable-dev-shm-usage", "--disable-gpu", "--disable-extensions", + "--disable-features=SameSiteByDefaultCookies,CookieSameSite" ], }, }, @@ -74,7 +94,7 @@ exports.config = { // Define all options that are relevant for the WebdriverIO instance here // // Level of logging verbosity: trace | debug | info | warn | error | silent - logLevel: "error", + logLevel: 'error', outputDir: "tests/functional/logs/", // // Set specific log levels per logger @@ -233,7 +253,7 @@ exports.config = { cirInstrumentId, booleanFlag, }); - this.url(`/session?token=${token}`); + await this.url(`/session?token=${encodeURIComponent(token)}`); }, ); },