Backported `/tests` from `macros-2.0`. (#4842) * Backported `/tests` from `macros-2.0`. * Added `eslint-plugin-playwright` * Improve formatting --------- Co-authored-by: user <user@exmaple.com> Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>

1c1f25b5c6aa8041175df8b77fdfc6e27416b4c8

DeclineThyself <235079501+DeclineThyself@users.noreply.github.com>

Signed
12 files changed, +150 -586Showing whitespace changes
package-lock.json+31 -1
@@ -134,7 +134,8 @@
134134 "@types/yauzl": "^2.10.3",
135135 "eslint": "^8.57.1",
136136 "eslint-plugin-jest": "^27.9.0",
137137 "eslint-plugin-jsdoc": "^48.10.0",
138+ "eslint-plugin-playwright": "^2.3.0"
138139 },
139140 "engines": {
140141 "node": ">= 18"
@@ -4559,6 +4560,35 @@
45594560 "dev": true,
45604561 "license": "MIT"
45614562 },
4563+ "node_modules/eslint-plugin-playwright": {
4564+ "version": "2.3.0",
4565+ "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-2.3.0.tgz",
4566+ "integrity": "sha512-7UeUuIb5SZrNkrUGb2F+iwHM97kn33/huajcVtAaQFCSMUYGNFvjzRPil5C0OIppslPfuOV68M/zsisXx+/ZvQ==",
4567+ "dev": true,
4568+ "license": "MIT",
4569+ "dependencies": {
4570+ "globals": "^16.4.0"
4571+ },
4572+ "engines": {
4573+ "node": ">=16.9.0"
4574+ },
4575+ "peerDependencies": {
4576+ "eslint": ">=8.40.0"
4577+ }
4578+ },
4579+ "node_modules/eslint-plugin-playwright/node_modules/globals": {
4580+ "version": "16.5.0",
4581+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz",
4582+ "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==",
4583+ "dev": true,
4584+ "license": "MIT",
4585+ "engines": {
4586+ "node": ">=18"
4587+ },
4588+ "funding": {
4589+ "url": "https://github.com/sponsors/sindresorhus"
4590+ }
4591+ },
45624592 "node_modules/eslint-scope": {
45634593 "version": "7.2.2",
45644594 "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
package.json+2 -1
@@ -165,6 +165,7 @@
165165 "@types/yauzl": "^2.10.3",
166166 "eslint": "^8.57.1",
167167 "eslint-plugin-jest": "^27.9.0",
168168 "eslint-plugin-jsdoc": "^48.10.0",
169+ "eslint-plugin-playwright": "^2.3.0"
169170 }
170171}
tests/.eslintrc.cjs+9 -2
@@ -2,10 +2,12 @@ module.exports = {
22 root: true,
33 plugins: [
44 'jest',
5+ 'playwright',
56 ],
67 extends: [
78 'eslint:recommended',
89 'plugin:jest/recommended',
10+ 'plugin:playwright/recommended',
911 ],
1012 env: {
1113 es6: true,
@@ -19,9 +21,10 @@ module.exports = {
1921 overrides: [
2022 ],
2123 ignorePatterns: [
24+ '*.min.js',
25+ 'node_modules/**/*',
2226 ],
2327 globals: {
24- page: 'readonly',
2528 },
2629 rules: {
2730 'no-unused-vars': ['error', { args: 'none' }],
@@ -38,10 +41,14 @@ module.exports = {
3841 'space-infix-ops': 'error',
3942 'no-unused-expressions': ['error', { allowShortCircuit: true, allowTernary: true }],
4043 'no-cond-assign': 'error',
44+
45+ // These rules should eventually be enabled.
46+ 'no-async-promise-executor': 'off',
47+ 'no-inner-declarations': 'off',
4148 },
4249 settings: {
4350 jest: {
4451 version: '29.7.0',
4552 },
4653 },
4754};
tests/frontend/frontent-test-utils.js+22 -0
@@ -0,0 +1,22 @@
1+export const testSetup = {
2+ /**
3+ * Navigates to the home page without waiting for SillyTavern to load.
4+ * @param {Object} params
5+ * @param {import('@playwright/test').Page} params.page
6+ */
7+ goST: async ({ page }) => {
8+ await page.goto('/');
9+ },
10+
11+ /**
12+ * Waits for SillyTavern to fully load by navigating to the home page and waiting for the preloader to disappear.
13+ * @param {Object} params
14+ * @param {import('@playwright/test').Page} params.page
15+ */
16+ awaitST: async ({ page }) => {
17+ await page.goto('/');
18+ await page.click('#userList .userSelect:last-child');
19+ await page.waitForURL('http://127.0.0.1:8000');
20+ await page.waitForFunction('document.getElementById("preloader") === null', { timeout: 0 });
21+ },
22+};
tests/jest-e2e.config.json+0 -11
@@ -1,11 +0,0 @@
1-{
2- "verbose": true,
3- "transform": {},
4- "preset": "jest-puppeteer",
5- "setupFilesAfterEnv": [
6- "<rootDir>/jest.setup.js"
7- ],
8- "testMatch": [
9- "**/?(*.)+(e2e).js"
10- ]
11-}
tests/jest.setup.js+0 -2
@@ -1,2 +0,0 @@
1-// Initialize global variables for Jest tests here
2-global.ST_URL = 'http://localhost:8000';
tests/jsconfig.json+5 -0
@@ -0,0 +1,5 @@
1+{
2+ "compilerOptions": {
3+ "baseUrl": ".",
4+ },
5+}
tests/package-lock.json+52 -556
@@ -7,10 +7,10 @@
77 "name": "sillytavern-tests",
88 "license": "AGPL-3.0",
99 "dependencies": {
10+ "@playwright/test": "^1.56.1",
1011 "@types/jest": "^29.5.12",
1112 "eslint": "^8.57.0",
1213 "jest": "^29.7.0",
13- "jest-puppeteer": "^10.0.1"
1414 }
1515 },
1616 "node_modules/@ampproject/remapping": {
@@ -601,21 +601,6 @@
601601 "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
602602 }
603603 },
604- "node_modules/@hapi/hoek": {
605- "version": "9.3.0",
606- "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
607- "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
608- "license": "BSD-3-Clause"
609- },
610- "node_modules/@hapi/topo": {
611- "version": "5.1.0",
612- "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
613- "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
614- "license": "BSD-3-Clause",
615- "dependencies": {
616- "@hapi/hoek": "^9.0.0"
617- }
618- },
619604 "node_modules/@humanwhocodes/config-array": {
620605 "version": "0.11.14",
621606 "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
@@ -1037,22 +1022,16 @@
10371022 "node": ">= 8"
10381023 }
10391024 },
10401025 "node_modules/@puppeteerplaywright/browserstest": {
10411026 "version": "21.1056.21",
10421027 "resolved": "https://registry.npmjs.org/@puppeteerplaywright/browserstest/-/browserstest-21.1056.21.tgz",
10431028 "integrity": "sha512-i4Ez+s9oRWQbNjtIvSMYtL/3+jxr7OH508mjAKvza0ekPJem0ZtmsYHP3B5dq62+IaBHKaGCOuqJxXzvFLUhJvQ6jtsQzOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==",
10441029 "license": "Apache-2.0",
10451030 "dependencies": {
10461031 "debugplaywright": "^41.456.01",
1047- "extract-zip": "^2.0.1",
1048- "progress": "^2.0.3",
1049- "proxy-agent": "^6.5.0",
1050- "semver": "^7.7.1",
1051- "tar-fs": "^3.0.8",
1052- "yargs": "^17.7.2"
10531032 },
10541033 "bin": {
10551034 "browsersplaywright": "lib/cjs/main-cli.js"
10561035 },
10571036 "engines": {
10581037 "node": ">=18"
@@ -1667,19 +1646,6 @@
16671646 "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
16681647 "license": "MIT"
16691648 },
1670- "node_modules/call-bind-apply-helpers": {
1671- "version": "1.0.2",
1672- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
1673- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
1674- "license": "MIT",
1675- "dependencies": {
1676- "es-errors": "^1.3.0",
1677- "function-bind": "^1.1.2"
1678- },
1679- "engines": {
1680- "node": ">= 0.4"
1681- }
1682- },
16831649 "node_modules/callsites": {
16841650 "version": "3.1.0",
16851651 "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -1825,27 +1791,6 @@
18251791 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
18261792 "license": "MIT"
18271793 },
1828- "node_modules/combined-stream": {
1829- "version": "1.0.8",
1830- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
1831- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
1832- "license": "MIT",
1833- "dependencies": {
1834- "delayed-stream": "~1.0.0"
1835- },
1836- "engines": {
1837- "node": ">= 0.8"
1838- }
1839- },
1840- "node_modules/commander": {
1841- "version": "5.1.0",
1842- "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
1843- "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
1844- "license": "MIT",
1845- "engines": {
1846- "node": ">= 6"
1847- }
1848- },
18491794 "node_modules/concat-map": {
18501795 "version": "0.0.1",
18511796 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -2037,13 +1982,6 @@
20371982 "node": ">=8"
20381983 }
20391984 },
2040- "node_modules/devtools-protocol": {
2041- "version": "0.0.1425554",
2042- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1425554.tgz",
2043- "integrity": "sha512-uRfxR6Nlzdzt0ihVIkV+sLztKgs7rgquY/Mhcv1YNCWDh5IZgl5mnn2aeEnW5stYTE0wwiF4RYVz8eMEpV1SEw==",
2044- "license": "BSD-3-Clause",
2045- "peer": true
2046- },
20471985 "node_modules/diff-sequences": {
20481986 "version": "29.6.3",
20491987 "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
@@ -2065,20 +2003,6 @@
20652003 "node": ">=6.0.0"
20662004 }
20672005 },
2068- "node_modules/dunder-proto": {
2069- "version": "1.0.1",
2070- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
2071- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
2072- "license": "MIT",
2073- "dependencies": {
2074- "call-bind-apply-helpers": "^1.0.1",
2075- "es-errors": "^1.3.0",
2076- "gopd": "^1.2.0"
2077- },
2078- "engines": {
2079- "node": ">= 0.4"
2080- }
2081- },
20822006 "node_modules/electron-to-chromium": {
20832007 "version": "1.4.820",
20842008 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.820.tgz",
@@ -2130,51 +2054,6 @@
21302054 "is-arrayish": "^0.2.1"
21312055 }
21322056 },
2133- "node_modules/es-define-property": {
2134- "version": "1.0.1",
2135- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
2136- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
2137- "license": "MIT",
2138- "engines": {
2139- "node": ">= 0.4"
2140- }
2141- },
2142- "node_modules/es-errors": {
2143- "version": "1.3.0",
2144- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
2145- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
2146- "license": "MIT",
2147- "engines": {
2148- "node": ">= 0.4"
2149- }
2150- },
2151- "node_modules/es-object-atoms": {
2152- "version": "1.1.1",
2153- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
2154- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
2155- "license": "MIT",
2156- "dependencies": {
2157- "es-errors": "^1.3.0"
2158- },
2159- "engines": {
2160- "node": ">= 0.4"
2161- }
2162- },
2163- "node_modules/es-set-tostringtag": {
2164- "version": "2.1.0",
2165- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
2166- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
2167- "license": "MIT",
2168- "dependencies": {
2169- "es-errors": "^1.3.0",
2170- "get-intrinsic": "^1.2.6",
2171- "has-tostringtag": "^1.0.2",
2172- "hasown": "^2.0.2"
2173- },
2174- "engines": {
2175- "node": ">= 0.4"
2176- }
2177- },
21782057 "node_modules/escalade": {
21792058 "version": "3.1.2",
21802059 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
@@ -2504,18 +2383,6 @@
25042383 "node": ">= 0.8.0"
25052384 }
25062385 },
2507- "node_modules/expand-tilde": {
2508- "version": "1.2.2",
2509- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz",
2510- "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==",
2511- "license": "MIT",
2512- "dependencies": {
2513- "os-homedir": "^1.0.1"
2514- },
2515- "engines": {
2516- "node": ">=0.10.0"
2517- }
2518- },
25192386 "node_modules/expect": {
25202387 "version": "29.7.0",
25212388 "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
@@ -2650,45 +2517,6 @@
26502517 "node": ">=8"
26512518 }
26522519 },
2653- "node_modules/find-file-up": {
2654- "version": "0.1.3",
2655- "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz",
2656- "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==",
2657- "license": "MIT",
2658- "dependencies": {
2659- "fs-exists-sync": "^0.1.0",
2660- "resolve-dir": "^0.1.0"
2661- },
2662- "engines": {
2663- "node": ">=0.10.0"
2664- }
2665- },
2666- "node_modules/find-pkg": {
2667- "version": "0.1.2",
2668- "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz",
2669- "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==",
2670- "license": "MIT",
2671- "dependencies": {
2672- "find-file-up": "^0.1.2"
2673- },
2674- "engines": {
2675- "node": ">=0.10.0"
2676- }
2677- },
2678- "node_modules/find-process": {
2679- "version": "1.4.7",
2680- "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.7.tgz",
2681- "integrity": "sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==",
2682- "license": "MIT",
2683- "dependencies": {
2684- "chalk": "^4.0.0",
2685- "commander": "^5.1.0",
2686- "debug": "^4.1.1"
2687- },
2688- "bin": {
2689- "find-process": "bin/find-process.js"
2690- }
2691- },
26922520 "node_modules/find-up": {
26932521 "version": "4.1.0",
26942522 "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
@@ -2722,51 +2550,6 @@
27222550 "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
27232551 "license": "ISC"
27242552 },
2725- "node_modules/follow-redirects": {
2726- "version": "1.15.6",
2727- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
2728- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
2729- "funding": [
2730- {
2731- "type": "individual",
2732- "url": "https://github.com/sponsors/RubenVerborgh"
2733- }
2734- ],
2735- "license": "MIT",
2736- "engines": {
2737- "node": ">=4.0"
2738- },
2739- "peerDependenciesMeta": {
2740- "debug": {
2741- "optional": true
2742- }
2743- }
2744- },
2745- "node_modules/form-data": {
2746- "version": "4.0.4",
2747- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
2748- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
2749- "license": "MIT",
2750- "dependencies": {
2751- "asynckit": "^0.4.0",
2752- "combined-stream": "^1.0.8",
2753- "es-set-tostringtag": "^2.1.0",
2754- "hasown": "^2.0.2",
2755- "mime-types": "^2.1.12"
2756- },
2757- "engines": {
2758- "node": ">= 6"
2759- }
2760- },
2761- "node_modules/fs-exists-sync": {
2762- "version": "0.1.0",
2763- "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
2764- "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==",
2765- "license": "MIT",
2766- "engines": {
2767- "node": ">=0.10.0"
2768- }
2769- },
27702553 "node_modules/fs.realpath": {
27712554 "version": "1.0.0",
27722555 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -2814,30 +2597,6 @@
28142597 "node": "6.* || 8.* || >= 10.*"
28152598 }
28162599 },
2817- "node_modules/get-intrinsic": {
2818- "version": "1.3.0",
2819- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
2820- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
2821- "license": "MIT",
2822- "dependencies": {
2823- "call-bind-apply-helpers": "^1.0.2",
2824- "es-define-property": "^1.0.1",
2825- "es-errors": "^1.3.0",
2826- "es-object-atoms": "^1.1.1",
2827- "function-bind": "^1.1.2",
2828- "get-proto": "^1.0.1",
2829- "gopd": "^1.2.0",
2830- "has-symbols": "^1.1.0",
2831- "hasown": "^2.0.2",
2832- "math-intrinsics": "^1.1.0"
2833- },
2834- "engines": {
2835- "node": ">= 0.4"
2836- },
2837- "funding": {
2838- "url": "https://github.com/sponsors/ljharb"
2839- }
2840- },
28412600 "node_modules/get-package-type": {
28422601 "version": "0.1.0",
28432602 "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -2847,19 +2606,6 @@
28472606 "node": ">=8.0.0"
28482607 }
28492608 },
2850- "node_modules/get-proto": {
2851- "version": "1.0.1",
2852- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
2853- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
2854- "license": "MIT",
2855- "dependencies": {
2856- "dunder-proto": "^1.0.1",
2857- "es-object-atoms": "^1.0.0"
2858- },
2859- "engines": {
2860- "node": ">= 0.4"
2861- }
2862- },
28632609 "node_modules/get-stream": {
28642610 "version": "6.0.1",
28652611 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
@@ -2919,46 +2665,6 @@
29192665 "node": ">=10.13.0"
29202666 }
29212667 },
2922- "node_modules/global-modules": {
2923- "version": "0.2.3",
2924- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
2925- "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==",
2926- "license": "MIT",
2927- "dependencies": {
2928- "global-prefix": "^0.1.4",
2929- "is-windows": "^0.2.0"
2930- },
2931- "engines": {
2932- "node": ">=0.10.0"
2933- }
2934- },
2935- "node_modules/global-prefix": {
2936- "version": "0.1.5",
2937- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz",
2938- "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==",
2939- "license": "MIT",
2940- "dependencies": {
2941- "homedir-polyfill": "^1.0.0",
2942- "ini": "^1.3.4",
2943- "is-windows": "^0.2.0",
2944- "which": "^1.2.12"
2945- },
2946- "engines": {
2947- "node": ">=0.10.0"
2948- }
2949- },
2950- "node_modules/global-prefix/node_modules/which": {
2951- "version": "1.3.1",
2952- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
2953- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
2954- "license": "ISC",
2955- "dependencies": {
2956- "isexe": "^2.0.0"
2957- },
2958- "bin": {
2959- "which": "bin/which"
2960- }
2961- },
29622668 "node_modules/globals": {
29632669 "version": "11.12.0",
29642670 "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -2968,18 +2674,6 @@
29682674 "node": ">=4"
29692675 }
29702676 },
2971- "node_modules/gopd": {
2972- "version": "1.2.0",
2973- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
2974- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
2975- "license": "MIT",
2976- "engines": {
2977- "node": ">= 0.4"
2978- },
2979- "funding": {
2980- "url": "https://github.com/sponsors/ljharb"
2981- }
2982- },
29832677 "node_modules/graceful-fs": {
29842678 "version": "4.2.11",
29852679 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -3001,33 +2695,6 @@
30012695 "node": ">=8"
30022696 }
30032697 },
3004- "node_modules/has-symbols": {
3005- "version": "1.1.0",
3006- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
3007- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
3008- "license": "MIT",
3009- "engines": {
3010- "node": ">= 0.4"
3011- },
3012- "funding": {
3013- "url": "https://github.com/sponsors/ljharb"
3014- }
3015- },
3016- "node_modules/has-tostringtag": {
3017- "version": "1.0.2",
3018- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
3019- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
3020- "license": "MIT",
3021- "dependencies": {
3022- "has-symbols": "^1.0.3"
3023- },
3024- "engines": {
3025- "node": ">= 0.4"
3026- },
3027- "funding": {
3028- "url": "https://github.com/sponsors/ljharb"
3029- }
3030- },
30312698 "node_modules/hasown": {
30322699 "version": "2.0.2",
30332700 "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -3040,18 +2707,6 @@
30402707 "node": ">= 0.4"
30412708 }
30422709 },
3043- "node_modules/homedir-polyfill": {
3044- "version": "1.0.3",
3045- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
3046- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
3047- "license": "MIT",
3048- "dependencies": {
3049- "parse-passwd": "^1.0.0"
3050- },
3051- "engines": {
3052- "node": ">=0.10.0"
3053- }
3054- },
30552710 "node_modules/html-escaper": {
30562711 "version": "2.0.2",
30572712 "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -3287,15 +2942,6 @@
32872942 "url": "https://github.com/sponsors/sindresorhus"
32882943 }
32892944 },
3290- "node_modules/is-windows": {
3291- "version": "0.2.0",
3292- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
3293- "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==",
3294- "license": "MIT",
3295- "engines": {
3296- "node": ">=0.10.0"
3297- }
3298- },
32992945 "node_modules/isexe": {
33002946 "version": "2.0.0",
33012947 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -3529,23 +3175,6 @@
35293175 }
35303176 }
35313177 },
3532- "node_modules/jest-dev-server": {
3533- "version": "10.0.0",
3534- "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-10.0.0.tgz",
3535- "integrity": "sha512-FtyBBDxrAIfTX3hyKSOwj5KU6Z7fFLew5pQYOFpwyf+qpPpULL8aYxtsFkbkAwcs+Mb7qhcNbVLeiWsLOd7CKw==",
3536- "dependencies": {
3537- "chalk": "^4.1.2",
3538- "cwd": "^0.10.0",
3539- "find-process": "^1.4.7",
3540- "prompts": "^2.4.2",
3541- "spawnd": "^10.0.0",
3542- "tree-kill": "^1.2.2",
3543- "wait-on": "^7.2.0"
3544- },
3545- "engines": {
3546- "node": ">=16"
3547- }
3548- },
35493178 "node_modules/jest-diff": {
35503179 "version": "29.7.0",
35513180 "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
@@ -3606,21 +3235,6 @@
36063235 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
36073236 }
36083237 },
3609- "node_modules/jest-environment-puppeteer": {
3610- "version": "10.0.1",
3611- "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-10.0.1.tgz",
3612- "integrity": "sha512-FxMzVRyqieQqSy5CPWiwdK5t9dkRHid5eoRTVa8RtYeXLlpW6lU0dAmxEfPkdnDVCiPUhC2APeKOXq0J72bgag==",
3613- "dependencies": {
3614- "chalk": "^4.1.2",
3615- "cosmiconfig": "^8.3.6",
3616- "deepmerge": "^4.3.1",
3617- "jest-dev-server": "^10.0.0",
3618- "jest-environment-node": "^29.7.0"
3619- },
3620- "engines": {
3621- "node": ">=16"
3622- }
3623- },
36243238 "node_modules/jest-get-type": {
36253239 "version": "29.6.3",
36263240 "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
@@ -3734,21 +3348,6 @@
37343348 }
37353349 }
37363350 },
3737- "node_modules/jest-puppeteer": {
3738- "version": "10.0.1",
3739- "resolved": "https://registry.npmjs.org/jest-puppeteer/-/jest-puppeteer-10.0.1.tgz",
3740- "integrity": "sha512-FzC35XbqeuQEt1smXh1EOqhJaRkWqJkyWDMfGkcZ8C59QHXeJ7F/iOmiNqYi6l/OsycUuOPCk+IkjfGfS9YbrQ==",
3741- "dependencies": {
3742- "expect-puppeteer": "^10.0.0",
3743- "jest-environment-puppeteer": "^10.0.1"
3744- },
3745- "engines": {
3746- "node": ">=16"
3747- },
3748- "peerDependencies": {
3749- "puppeteer": ">=19"
3750- }
3751- },
37523351 "node_modules/jest-regex-util": {
37533352 "version": "29.6.3",
37543353 "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
@@ -3994,19 +3593,6 @@
39943593 "url": "https://github.com/chalk/supports-color?sponsor=1"
39953594 }
39963595 },
3997- "node_modules/joi": {
3998- "version": "17.13.3",
3999- "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz",
4000- "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",
4001- "license": "BSD-3-Clause",
4002- "dependencies": {
4003- "@hapi/hoek": "^9.3.0",
4004- "@hapi/topo": "^5.1.0",
4005- "@sideway/address": "^4.1.5",
4006- "@sideway/formula": "^3.0.1",
4007- "@sideway/pinpoint": "^2.0.0"
4008- }
4009- },
40103596 "node_modules/js-tokens": {
40113597 "version": "4.0.0",
40123598 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -4138,12 +3724,6 @@
41383724 "node": ">=8"
41393725 }
41403726 },
4141- "node_modules/lodash": {
4142- "version": "4.17.21",
4143- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
4144- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
4145- "license": "MIT"
4146- },
41473727 "node_modules/lodash.merge": {
41483728 "version": "4.6.2",
41493729 "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -4195,15 +3775,6 @@
41953775 "tmpl": "1.0.5"
41963776 }
41973777 },
4198- "node_modules/math-intrinsics": {
4199- "version": "1.1.0",
4200- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
4201- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
4202- "license": "MIT",
4203- "engines": {
4204- "node": ">= 0.4"
4205- }
4206- },
42073778 "node_modules/merge-stream": {
42083779 "version": "2.0.0",
42093780 "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -4222,27 +3793,6 @@
42223793 "node": ">=8.6"
42233794 }
42243795 },
4225- "node_modules/mime-db": {
4226- "version": "1.52.0",
4227- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
4228- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
4229- "license": "MIT",
4230- "engines": {
4231- "node": ">= 0.6"
4232- }
4233- },
4234- "node_modules/mime-types": {
4235- "version": "2.1.35",
4236- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
4237- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
4238- "license": "MIT",
4239- "dependencies": {
4240- "mime-db": "1.52.0"
4241- },
4242- "engines": {
4243- "node": ">= 0.6"
4244- }
4245- },
42463796 "node_modules/mimic-fn": {
42473797 "version": "2.1.0",
42483798 "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
@@ -4374,15 +3924,6 @@
43743924 "node": ">= 0.8.0"
43753925 }
43763926 },
4377- "node_modules/os-homedir": {
4378- "version": "1.0.2",
4379- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
4380- "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==",
4381- "license": "MIT",
4382- "engines": {
4383- "node": ">=0.10.0"
4384- }
4385- },
43863927 "node_modules/p-limit": {
43873928 "version": "3.1.0",
43883929 "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -4496,15 +4037,6 @@
44964037 "url": "https://github.com/sponsors/sindresorhus"
44974038 }
44984039 },
4499- "node_modules/parse-passwd": {
4500- "version": "1.0.0",
4501- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
4502- "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
4503- "license": "MIT",
4504- "engines": {
4505- "node": ">=0.10.0"
4506- }
4507- },
45084040 "node_modules/path-exists": {
45094041 "version": "4.0.0",
45104042 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -4592,6 +4124,50 @@
45924124 "node": ">=8"
45934125 }
45944126 },
4127+ "node_modules/playwright": {
4128+ "version": "1.56.1",
4129+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz",
4130+ "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==",
4131+ "license": "Apache-2.0",
4132+ "dependencies": {
4133+ "playwright-core": "1.56.1"
4134+ },
4135+ "bin": {
4136+ "playwright": "cli.js"
4137+ },
4138+ "engines": {
4139+ "node": ">=18"
4140+ },
4141+ "optionalDependencies": {
4142+ "fsevents": "2.3.2"
4143+ }
4144+ },
4145+ "node_modules/playwright-core": {
4146+ "version": "1.56.1",
4147+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz",
4148+ "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==",
4149+ "license": "Apache-2.0",
4150+ "bin": {
4151+ "playwright-core": "cli.js"
4152+ },
4153+ "engines": {
4154+ "node": ">=18"
4155+ }
4156+ },
4157+ "node_modules/playwright/node_modules/fsevents": {
4158+ "version": "2.3.2",
4159+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
4160+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
4161+ "hasInstallScript": true,
4162+ "license": "MIT",
4163+ "optional": true,
4164+ "os": [
4165+ "darwin"
4166+ ],
4167+ "engines": {
4168+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
4169+ }
4170+ },
45954171 "node_modules/prelude-ls": {
45964172 "version": "1.2.1",
45974173 "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -4864,19 +4440,6 @@
48644440 "node": ">=8"
48654441 }
48664442 },
4867- "node_modules/resolve-dir": {
4868- "version": "0.1.1",
4869- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz",
4870- "integrity": "sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==",
4871- "license": "MIT",
4872- "dependencies": {
4873- "expand-tilde": "^1.2.2",
4874- "global-modules": "^0.2.3"
4875- },
4876- "engines": {
4877- "node": ">=0.10.0"
4878- }
4879- },
48804443 "node_modules/resolve-from": {
48814444 "version": "5.0.0",
48824445 "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
@@ -4944,15 +4507,6 @@
49444507 "queue-microtask": "^1.2.2"
49454508 }
49464509 },
4947- "node_modules/rxjs": {
4948- "version": "7.8.1",
4949- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
4950- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
4951- "license": "Apache-2.0",
4952- "dependencies": {
4953- "tslib": "^2.1.0"
4954- }
4955- },
49564510 "node_modules/semver": {
49574511 "version": "6.3.1",
49584512 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -5061,30 +4615,6 @@
50614615 "source-map": "^0.6.0"
50624616 }
50634617 },
5064- "node_modules/spawnd": {
5065- "version": "10.0.0",
5066- "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-10.0.0.tgz",
5067- "integrity": "sha512-6GKcakMTryb5b1SWCvdubCDHEsR2k+5VZUD5G19umZRarkvj1RyCGyizcqhjewI7cqZo8fTVD8HpnDZbVOLMtg==",
5068- "dependencies": {
5069- "signal-exit": "^4.1.0",
5070- "tree-kill": "^1.2.2"
5071- },
5072- "engines": {
5073- "node": ">=16"
5074- }
5075- },
5076- "node_modules/spawnd/node_modules/signal-exit": {
5077- "version": "4.1.0",
5078- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
5079- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
5080- "license": "ISC",
5081- "engines": {
5082- "node": ">=14"
5083- },
5084- "funding": {
5085- "url": "https://github.com/sponsors/isaacs"
5086- }
5087- },
50884618 "node_modules/sprintf-js": {
50894619 "version": "1.0.3",
50904620 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -5281,21 +4811,6 @@
52814811 "node": ">=8.0"
52824812 }
52834813 },
5284- "node_modules/tree-kill": {
5285- "version": "1.2.2",
5286- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
5287- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
5288- "license": "MIT",
5289- "bin": {
5290- "tree-kill": "cli.js"
5291- }
5292- },
5293- "node_modules/tslib": {
5294- "version": "2.6.3",
5295- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
5296- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
5297- "license": "0BSD"
5298- },
52994814 "node_modules/type-check": {
53004815 "version": "0.4.0",
53014816 "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -5394,25 +4909,6 @@
53944909 "node": ">=10.12.0"
53954910 }
53964911 },
5397- "node_modules/wait-on": {
5398- "version": "7.2.0",
5399- "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz",
5400- "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==",
5401- "license": "MIT",
5402- "dependencies": {
5403- "axios": "^1.6.1",
5404- "joi": "^17.11.0",
5405- "lodash": "^4.17.21",
5406- "minimist": "^1.2.8",
5407- "rxjs": "^7.8.1"
5408- },
5409- "bin": {
5410- "wait-on": "bin/wait-on"
5411- },
5412- "engines": {
5413- "node": ">=12.0.0"
5414- }
5415- },
54164912 "node_modules/walker": {
54174913 "version": "1.0.8",
54184914 "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
tests/package.json+5 -3
@@ -5,12 +5,14 @@
55 "scripts": {
66 "test": "npm run test:unit && npm run test:e2e",
77 "test:unit": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest.config.json",
8- "test:e2e": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest-e2e.config.json"
8+ "test:e2e": "playwright test",
9+ "lint": "eslint \"**/*.js\" ./*.js",
10+ "lint:fix": "eslint \"**/*.js\" ./*.js --fix"
911 },
1012 "dependencies": {
13+ "@playwright/test": "^1.56.1",
1114 "@types/jest": "^29.5.12",
1215 "eslint": "^8.57.0",
1316 "jest": "^29.7.0",
14- "jest-puppeteer": "^10.0.1"
1517 }
1618}
tests/playwright.config.js+12 -0
@@ -0,0 +1,12 @@
1+import { defineConfig } from '@playwright/test';
2+
3+export default defineConfig({
4+ testMatch: '*.e2e.js',
5+ use: {
6+ baseURL: 'http://127.0.0.1:8000',
7+ video: 'only-on-failure',
8+ screenshot: 'only-on-failure',
9+ },
10+ workers: 4,
11+ fullyParallel: true,
12+});
tests/sample.e2e.js+7 -5
@@ -1,10 +1,12 @@
1-describe('sample', () => {
1+import { test, expect } from '@playwright/test';
2- beforeAll(async () => {
2+
3- await page.goto(global.ST_URL);
3+test.describe('sample', () => {
4+ test.beforeEach(async({ page }) => {
5+ await page.goto('/');
46 await page.waitForFunction('document.getElementById("preloader") === null', { timeout: 0 });
57 });
68
79 ittest('should be titled "SillyTavern"', async ({ page }) => {
810 await expect(page.title()).resolves.toMatchtoHaveTitle('SillyTavern');
911 });
1012});
tests/util.test.js+5 -5
@@ -1,14 +1,14 @@
11import { describe, ittest, expect } from '@jest/globals';
22import { CHAT_COMPLETION_SOURCES } from '../src/constants';
33import { flattenSchema } from '../src/util';
44
55describe('flattenSchema', () => {
66 ittest('should return the schema if it is not an object', () => {
77 const schema = 'it is not an object';
88 expect(flattenSchema(schema, CHAT_COMPLETION_SOURCES.MAKERSUITE)).toBe(schema);
99 });
1010
1111 ittest('should handle schema with $defs and $ref', () => {
1212 const schema = {
1313 $schema: 'http://json-schema.org/draft-07/schema#',
1414 $defs: {
@@ -37,7 +37,7 @@ describe('flattenSchema', () => {
3737 expect(flattenSchema(schema, CHAT_COMPLETION_SOURCES.MAKERSUITE)).toEqual(expected);
3838 });
3939
4040 ittest('should filter unsupported properties for Google API schema', () => {
4141 const schema = {
4242 $defs: {
4343 a: {
@@ -68,7 +68,7 @@ describe('flattenSchema', () => {
6868 expect(flattenSchema(schema, CHAT_COMPLETION_SOURCES.MAKERSUITE)).toEqual(expected);
6969 });
7070
7171 ittest('should not filter properties for non-Google API schema', () => {
7272 const schema = {
7373 $defs: {
7474 a: {