From d1a92afe0f9e0f61b0515e817c45f16c0c33da53 Mon Sep 17 00:00:00 2001 From: viktorstrate Date: Fri, 8 Jul 2022 15:23:34 +0200 Subject: [PATCH] Fix UI tests by replacing jest with vitest --- ui/.eslintrc.js | 36 +- ui/package-lock.json | 481 +++++++++++++++--- ui/package.json | 18 +- ui/src/Pages/AlbumPage/AlbumPage.test.tsx | 2 +- .../Pages/LoginPage/InitialSetupPage.test.tsx | 6 +- ui/src/Pages/LoginPage/LoginPage.test.tsx | 6 +- ui/src/Pages/PeoplePage/PeoplePage.test.tsx | 8 +- .../SingleFaceGroup/SingleFaceGroup.test.tsx | 7 +- ...t.js => ScannerConcurrentWorkers.test.tsx} | 0 .../SettingsPage/Users/AddUserRow.test.tsx | 8 +- .../{SharePage.test.js => SharePage.test.tsx} | 6 +- .../{Layout.test.js => Layout.test.tsx} | 2 +- ui/src/components/layout/Layout.tsx | 1 - ui/src/components/layout/MainMenu.test.tsx | 6 +- .../photoGallery/PhotoGallery.test.tsx | 8 +- .../presentView/PresentMedia.test.tsx | 6 +- .../PresentNavigationOverlay.test.tsx | 10 +- .../routes/AuthorizedRoute.test.tsx | 6 +- .../{Routes.test.js => Routes.test.tsx} | 6 +- .../MediaSidebar/MediaSidebar.test.tsx | 6 +- .../timelineGallery/TimelineGallery.test.tsx | 2 +- ui/src/hooks/__mocks__/useScrollPagination.ts | 2 +- ui/testing/setupTests.ts | 4 +- ui/tsconfig.json | 3 +- ui/vite.config.js | 11 + 25 files changed, 500 insertions(+), 151 deletions(-) rename ui/src/Pages/SettingsPage/{ScannerConcurrentWorkers.test.js => ScannerConcurrentWorkers.test.tsx} (100%) rename ui/src/Pages/SharePage/{SharePage.test.js => SharePage.test.tsx} (97%) rename ui/src/components/layout/{Layout.test.js => Layout.test.tsx} (91%) rename ui/src/components/routes/{Routes.test.js => Routes.test.tsx} (77%) diff --git a/ui/.eslintrc.js b/ui/.eslintrc.js index f0c328a4..8e899078 100644 --- a/ui/.eslintrc.js +++ b/ui/.eslintrc.js @@ -43,24 +43,24 @@ module.exports = { }, // parser: 'babel-eslint', overrides: [ - Object.assign(require('eslint-plugin-jest').configs.recommended, { - files: ['**/*.test.js', '**/*.test.ts', '**/*.test.tsx'], - env: { jest: true }, - plugins: ['jest', 'jest-dom'], - rules: Object.assign( - require('eslint-plugin-jest').configs.recommended.rules, - { - 'no-import-assign': 'off', - 'react/prop-types': 'off', - 'jest/valid-title': 'off', - } - ), - settings: { - jest: { - version: 26, - }, - }, - }), + // Object.assign(require('eslint-plugin-jest').configs.recommended, { + // files: ['**/*.test.js', '**/*.test.ts', '**/*.test.tsx'], + // env: { jest: true }, + // plugins: ['jest', 'jest-dom'], + // rules: Object.assign( + // require('eslint-plugin-jest').configs.recommended.rules, + // { + // 'no-import-assign': 'off', + // 'react/prop-types': 'off', + // 'jest/valid-title': 'off', + // } + // ), + // settings: { + // jest: { + // version: 26, + // }, + // }, + // }), { files: ['**/*.js'], rules: { diff --git a/ui/package-lock.json b/ui/package-lock.json index b596d8ba..ec195791 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -27,8 +27,6 @@ "classnames": "^2.3.1", "connect-history-api-fallback": "^2.0.0", "copy-to-clipboard": "^3.3.1", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-jest-dom": "^4.0.2", "i18next": "^21.8.13", "mapbox-gl": "^2.9.1", "postcss": "^8.4.14", @@ -55,11 +53,15 @@ "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.3.0", "@testing-library/user-event": "^14.2.1", + "@vitest/ui": "^0.17.1", "apollo": "2.34.0", "apollo-language-server": "1.26.9", + "eslint": "^8.19.0", + "eslint-config-prettier": "^8.5.0", "husky": "^8.0.1", "i18next-parser": "^6.5.0", - "lint-staged": "^13.0.3" + "lint-staged": "^13.0.3", + "vitest": "^0.17.1" } }, "node_modules/@ampproject/remapping": { @@ -4271,6 +4273,12 @@ "node": ">= 8" } }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -4608,6 +4616,7 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.3.tgz", "integrity": "sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -4626,6 +4635,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4640,6 +4650,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4655,6 +4666,7 @@ "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, "dependencies": { "color-name": "~1.1.4" }, @@ -4665,12 +4677,14 @@ "node_modules/@testing-library/dom/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@testing-library/dom/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, "engines": { "node": ">=8" } @@ -4679,6 +4693,7 @@ "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, "dependencies": { "has-flag": "^4.0.0" }, @@ -4853,7 +4868,8 @@ "node_modules/@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true }, "node_modules/@types/babel__core": { "version": "7.1.18", @@ -4909,6 +4925,21 @@ "@types/node": "*" } }, + "node_modules/@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -5558,6 +5589,15 @@ "node": ">=0.10.0" } }, + "node_modules/@vitest/ui": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.17.1.tgz", + "integrity": "sha512-B4PGDk5IZ10HT9GzR0NQ96VEphWY9dTf1yqBGNjPk2c7wQnhZJdHzv3tgFQiyFK5YR1cjtOV918QHCnptV4r5w==", + "dev": true, + "dependencies": { + "sirv": "^2.0.2" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -6726,6 +6766,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true, "engines": { "node": ">=6.0" } @@ -6818,6 +6859,15 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/ast-types": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", @@ -7657,6 +7707,24 @@ "node": ">=4" } }, + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -7698,6 +7766,15 @@ "node": ">=10" } }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -9088,6 +9165,18 @@ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -9291,7 +9380,8 @@ "node_modules/dom-accessibility-api": { "version": "0.5.11", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.11.tgz", - "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==" + "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==", + "dev": true }, "node_modules/dom-converter": { "version": "0.2.0", @@ -10159,6 +10249,7 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -10392,24 +10483,6 @@ } } }, - "node_modules/eslint-plugin-jest-dom": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-4.0.2.tgz", - "integrity": "sha512-Jo51Atwyo2TdcUncjmU+UQeSTKh3sc2LF/M5i/R3nTU0Djw9V65KGJisdm/RtuKhy2KH/r7eQ1n6kwYFPNdHlA==", - "dependencies": { - "@babel/runtime": "^7.16.3", - "@testing-library/dom": "^8.11.1", - "requireindex": "^1.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6", - "yarn": ">=1" - }, - "peerDependencies": { - "eslint": "^6.8.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz", @@ -11952,6 +12025,15 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -12091,7 +12173,7 @@ "node_modules/glob-stream": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, "dependencies": { "extend": "^3.0.0", @@ -12112,7 +12194,7 @@ "node_modules/glob-stream/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "dependencies": { "is-glob": "^3.1.0", @@ -16803,6 +16885,18 @@ "node": ">=8.9.0" } }, + "node_modules/local-pkg": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.1.tgz", + "integrity": "sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -16973,9 +17067,9 @@ } }, "node_modules/log-update/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, "engines": { "node": ">=4" @@ -17039,6 +17133,15 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -17062,6 +17165,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "dev": true, "bin": { "lz-string": "bin/bin.js" } @@ -17406,6 +17510,15 @@ "node": "*" } }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -18170,6 +18283,15 @@ "node": ">=8" } }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/pbf": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", @@ -18711,7 +18833,7 @@ "node_modules/postcss-functions": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", - "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=", + "integrity": "sha512-N5yWXWKA+uhpLQ9ZhBRl2bIAdM6oVJYpDojuI1nF2SzXBimJcdjFwiAouBVbO5VuOF3qA6BSFWFc3wXbbj72XQ==", "dependencies": { "glob": "^7.1.2", "object-assign": "^4.1.1", @@ -20778,14 +20900,6 @@ "node": ">=0.10.0" } }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "engines": { - "node": ">=0.10.5" - } - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -21533,6 +21647,20 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, + "node_modules/sirv": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -22737,11 +22865,29 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "node_modules/tinypool": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.2.2.tgz", + "integrity": "sha512-tp4n5OARNL3v8ntdJUyo5NsDfwvUtu8isB43USjrsQxQrADDKY6UGBkmFaw/2vNmEt8S/uSm2U5FhkiK1eAFGw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tinyqueue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, + "node_modules/tinyspy": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-0.3.3.tgz", + "integrity": "sha512-gRiUR8fuhUf0W9lzojPf1N1euJYA30ISebSfgca8z76FOvXtVXqd5ojEIaKLWbDQhAaC3ibxZIjqbyi4ybjcTw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -22849,6 +22995,15 @@ "node": ">=0.6" } }, + "node_modules/totalist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", @@ -23749,6 +23904,56 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, + "node_modules/vitest": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.17.1.tgz", + "integrity": "sha512-d6NsFC6FPmZ5XdiSYfW5rwJ/b8060wqe2steNNlVbhO69HWma6CucIm5g7PXlCSkmKvrdEbUsZHPAarlH83VGw==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.1", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.1", + "tinypool": "^0.2.1", + "tinyspy": "^0.3.3", + "vite": "^2.9.12 || ^3.0.0-0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/ui": "*", + "c8": "*", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "c8": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -27727,6 +27932,12 @@ } } }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, "@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -27927,6 +28138,7 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.3.tgz", "integrity": "sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA==", + "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -27942,6 +28154,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -27950,6 +28163,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -27959,6 +28173,7 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -27966,17 +28181,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "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, "requires": { "has-flag": "^4.0.0" } @@ -28110,7 +28328,8 @@ "@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true }, "@types/babel__core": { "version": "7.1.18", @@ -28166,6 +28385,21 @@ "@types/node": "*" } }, + "@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true + }, + "@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, "@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -28694,6 +28928,15 @@ } } }, + "@vitest/ui": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.17.1.tgz", + "integrity": "sha512-B4PGDk5IZ10HT9GzR0NQ96VEphWY9dTf1yqBGNjPk2c7wQnhZJdHzv3tgFQiyFK5YR1cjtOV918QHCnptV4r5w==", + "dev": true, + "requires": { + "sirv": "^2.0.2" + } + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -29098,7 +29341,7 @@ "git-url-parse": "11.6.0", "glob": "8.0.1", "global-agent": "3.0.0", - "graphql": "^15.0.0", + "graphql": "^15.5.0", "graphql-tag": "2.12.6", "listr": "0.14.3", "lodash.identity": "3.0.0", @@ -29417,7 +29660,7 @@ "cosmiconfig": "^7.0.1", "dotenv": "^16.0.0", "glob": "^8.0.0", - "graphql": "^15.0.0", + "graphql": "^15.5.0", "graphql-tag": "^2.10.1", "lodash.debounce": "^4.0.8", "lodash.merge": "^4.6.1", @@ -29662,7 +29905,8 @@ "aria-query": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", - "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==" + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true }, "array-flatten": { "version": "2.1.2", @@ -29725,6 +29969,12 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "ast-types": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", @@ -30356,6 +30606,21 @@ "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==" }, + "chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -30391,6 +30656,12 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true + }, "check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -31428,6 +31699,15 @@ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -31577,7 +31857,8 @@ "dom-accessibility-api": { "version": "0.5.11", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.11.tgz", - "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==" + "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==", + "dev": true }, "dom-converter": { "version": "0.2.0", @@ -32246,6 +32527,7 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, "requires": {} }, "eslint-config-react-app": { @@ -32418,16 +32700,6 @@ "@typescript-eslint/experimental-utils": "^5.0.0" } }, - "eslint-plugin-jest-dom": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-4.0.2.tgz", - "integrity": "sha512-Jo51Atwyo2TdcUncjmU+UQeSTKh3sc2LF/M5i/R3nTU0Djw9V65KGJisdm/RtuKhy2KH/r7eQ1n6kwYFPNdHlA==", - "requires": { - "@babel/runtime": "^7.16.3", - "@testing-library/dom": "^8.11.1", - "requireindex": "^1.2.0" - } - }, "eslint-plugin-jsx-a11y": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz", @@ -33460,6 +33732,12 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true + }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -33571,7 +33849,7 @@ "glob-stream": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, "requires": { "extend": "^3.0.0", @@ -33589,7 +33867,7 @@ "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "requires": { "is-glob": "^3.1.0", @@ -37050,6 +37328,12 @@ "json5": "^2.1.2" } }, + "local-pkg": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.1.tgz", + "integrity": "sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==", + "dev": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -37192,9 +37476,9 @@ "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "is-fullwidth-code-point": { @@ -37242,6 +37526,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, "lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -37261,7 +37554,8 @@ "lz-string": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=" + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "dev": true }, "magic-string": { "version": "0.25.9", @@ -37511,6 +37805,12 @@ "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", "dev": true }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -38098,6 +38398,12 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, "pbf": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", @@ -38419,7 +38725,7 @@ "postcss-functions": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", - "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=", + "integrity": "sha512-N5yWXWKA+uhpLQ9ZhBRl2bIAdM6oVJYpDojuI1nF2SzXBimJcdjFwiAouBVbO5VuOF3qA6BSFWFc3wXbbj72XQ==", "requires": { "glob": "^7.1.2", "object-assign": "^4.1.1", @@ -39874,11 +40180,6 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, - "requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==" - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -40447,6 +40748,17 @@ } } }, + "sirv": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + } + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -41349,11 +41661,23 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "tinypool": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.2.2.tgz", + "integrity": "sha512-tp4n5OARNL3v8ntdJUyo5NsDfwvUtu8isB43USjrsQxQrADDKY6UGBkmFaw/2vNmEt8S/uSm2U5FhkiK1eAFGw==", + "dev": true + }, "tinyqueue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, + "tinyspy": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-0.3.3.tgz", + "integrity": "sha512-gRiUR8fuhUf0W9lzojPf1N1euJYA30ISebSfgca8z76FOvXtVXqd5ojEIaKLWbDQhAaC3ibxZIjqbyi4ybjcTw==", + "dev": true + }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -41445,6 +41769,12 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "totalist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "dev": true + }, "tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", @@ -42067,6 +42397,23 @@ } } }, + "vitest": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.17.1.tgz", + "integrity": "sha512-d6NsFC6FPmZ5XdiSYfW5rwJ/b8060wqe2steNNlVbhO69HWma6CucIm5g7PXlCSkmKvrdEbUsZHPAarlH83VGw==", + "dev": true, + "requires": { + "@types/chai": "^4.3.1", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.1", + "tinypool": "^0.2.1", + "tinyspy": "^0.3.3", + "vite": "^2.9.12 || ^3.0.0-0" + } + }, "void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", diff --git a/ui/package.json b/ui/package.json index f57a6b3e..c2ba9802 100644 --- a/ui/package.json +++ b/ui/package.json @@ -11,14 +11,12 @@ "scripts": { "start": "vite", "build": "vite build", - "test": "npm run lint && npm run jest -- --watchAll=false", - "test:ci": "npm run lint && npm run jest:ci", "lint": "eslint ./src --max-warnings 0 --cache --config .eslintrc.js", - "jest": "craco test --setupFilesAfterEnv ./testing/setupTests.ts", - "jest:ci": "CI=true craco test --setupFilesAfterEnv ./testing/setupTests.ts --verbose --ci --coverage", + "test": "vitest", + "test:ci": "CI=true vitest --verbose --ci --coverage", "genSchemaTypes": "apollo client:codegen --target=typescript --globalTypesFile=src/__generated__/globalTypes.ts && prettier --write */**/__generated__/*.ts", "extractTranslations": "i18next -c i18next-parser.config.js", - "prepare": "(cd .. && npx husky install)" + "prepare": "(cd .. && ./ui/node_modules/.bin/husky install)" }, "dependencies": { "@apollo/client": "^3.6.9", @@ -39,8 +37,6 @@ "classnames": "^2.3.1", "connect-history-api-fallback": "^2.0.0", "copy-to-clipboard": "^3.3.1", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-jest-dom": "^4.0.2", "i18next": "^21.8.13", "mapbox-gl": "^2.9.1", "postcss": "^8.4.14", @@ -67,14 +63,18 @@ "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.3.0", "@testing-library/user-event": "^14.2.1", + "@vitest/ui": "^0.17.1", "apollo": "2.34.0", "apollo-language-server": "1.26.9", + "eslint": "^8.19.0", + "eslint-config-prettier": "^8.5.0", "husky": "^8.0.1", "i18next-parser": "^6.5.0", - "lint-staged": "^13.0.3" + "lint-staged": "^13.0.3", + "vitest": "^0.17.1" }, "overrides": { - "graphql": "^15.0.0" + "graphql": "^15.5.0" }, "prettier": { "trailingComma": "es5", diff --git a/ui/src/Pages/AlbumPage/AlbumPage.test.tsx b/ui/src/Pages/AlbumPage/AlbumPage.test.tsx index 3ed1786c..04cfb643 100644 --- a/ui/src/Pages/AlbumPage/AlbumPage.test.tsx +++ b/ui/src/Pages/AlbumPage/AlbumPage.test.tsx @@ -4,7 +4,7 @@ import React from 'react' import { MemoryRouter, Route, Routes } from 'react-router-dom' import AlbumPage from './AlbumPage' -jest.mock('../../hooks/useScrollPagination') +vi.mock('../../hooks/useScrollPagination') test('AlbumPage renders', () => { render( diff --git a/ui/src/Pages/LoginPage/InitialSetupPage.test.tsx b/ui/src/Pages/LoginPage/InitialSetupPage.test.tsx index e1a6f226..83a85192 100644 --- a/ui/src/Pages/LoginPage/InitialSetupPage.test.tsx +++ b/ui/src/Pages/LoginPage/InitialSetupPage.test.tsx @@ -7,11 +7,9 @@ import * as authentication from '../../helpers/authentication' import InitialSetupPage from './InitialSetupPage' import { mockInitialSetupGraphql } from './loginTestHelpers' -jest.mock('../../helpers/authentication.ts') +vi.mock('../../helpers/authentication.ts') -const authToken = authentication.authToken as jest.Mock< - ReturnType -> +const authToken = authentication.authToken // as vi.Mock> describe('Initial setup page', () => { test('Render initial setup form', async () => { diff --git a/ui/src/Pages/LoginPage/LoginPage.test.tsx b/ui/src/Pages/LoginPage/LoginPage.test.tsx index 1b4bfdeb..4689bee7 100644 --- a/ui/src/Pages/LoginPage/LoginPage.test.tsx +++ b/ui/src/Pages/LoginPage/LoginPage.test.tsx @@ -7,11 +7,9 @@ import { createMemoryHistory } from 'history' import { MockedProvider } from '@apollo/client/testing' import { mockInitialSetupGraphql } from './loginTestHelpers' -jest.mock('../../helpers/authentication.ts') +vi.mock('../../helpers/authentication.ts') -const authToken = authentication.authToken as jest.Mock< - ReturnType -> +const authToken = authentication.authToken // as vi.Mock> describe('Login page redirects', () => { test('Auth token redirect', async () => { diff --git a/ui/src/Pages/PeoplePage/PeoplePage.test.tsx b/ui/src/Pages/PeoplePage/PeoplePage.test.tsx index 92f9aee7..2cb45c69 100644 --- a/ui/src/Pages/PeoplePage/PeoplePage.test.tsx +++ b/ui/src/Pages/PeoplePage/PeoplePage.test.tsx @@ -11,7 +11,7 @@ import { MockedProvider } from '@apollo/client/testing' import { MemoryRouter } from 'react-router' import { myFaces_myFaceGroups } from './__generated__/myFaces' -jest.mock('../../hooks/useScrollPagination') +vi.mock('../../hooks/useScrollPagination') describe('PeoplePage component', () => { const graphqlMocks = [ @@ -142,7 +142,7 @@ describe('FaceDetails component', () => { @@ -161,7 +161,7 @@ describe('FaceDetails component', () => { @@ -181,7 +181,7 @@ describe('FaceDetails component', () => { label: 'John Doe', }, }, - newData: jest.fn(() => ({ + newData: vi.fn(() => ({ data: { setFaceGroupLabel: { __typename: 'FaceGroup', diff --git a/ui/src/Pages/PeoplePage/SingleFaceGroup/SingleFaceGroup.test.tsx b/ui/src/Pages/PeoplePage/SingleFaceGroup/SingleFaceGroup.test.tsx index f22658e6..7e6c9b55 100644 --- a/ui/src/Pages/PeoplePage/SingleFaceGroup/SingleFaceGroup.test.tsx +++ b/ui/src/Pages/PeoplePage/SingleFaceGroup/SingleFaceGroup.test.tsx @@ -4,7 +4,7 @@ import { MockedProvider } from '@apollo/client/testing' import SingleFaceGroup, { SINGLE_FACE_GROUP } from './SingleFaceGroup' import { MemoryRouter } from 'react-router-dom' -jest.mock('../../../hooks/useScrollPagination') +vi.mock('../../../hooks/useScrollPagination') test('single face group', async () => { const graphqlMocks = [ @@ -92,9 +92,6 @@ test('single face group', async () => { ) await waitFor(() => { - // expect(screen.queryByText('Loading more media')).not.toHaveClass('active') - expect(screen.queryByText('Face Group Name')).toBeInTheDocument() + expect(screen.getAllByRole('img')).toHaveLength(2) }) - - expect(screen.getAllByRole('img')).toHaveLength(2) }) diff --git a/ui/src/Pages/SettingsPage/ScannerConcurrentWorkers.test.js b/ui/src/Pages/SettingsPage/ScannerConcurrentWorkers.test.tsx similarity index 100% rename from ui/src/Pages/SettingsPage/ScannerConcurrentWorkers.test.js rename to ui/src/Pages/SettingsPage/ScannerConcurrentWorkers.test.tsx diff --git a/ui/src/Pages/SettingsPage/Users/AddUserRow.test.tsx b/ui/src/Pages/SettingsPage/Users/AddUserRow.test.tsx index eadd6437..0ffabb06 100644 --- a/ui/src/Pages/SettingsPage/Users/AddUserRow.test.tsx +++ b/ui/src/Pages/SettingsPage/Users/AddUserRow.test.tsx @@ -33,8 +33,8 @@ const gqlMock = [ ] test('Add user with username and path', async () => { - const userAdded = jest.fn() - const setShow = jest.fn() + const userAdded = vi.fn() + const setShow = vi.fn() render( @@ -62,8 +62,8 @@ test('Add user with username and path', async () => { }) test('Add user with only username', async () => { - const userAdded = jest.fn() - const setShow = jest.fn() + const userAdded = vi.fn() + const setShow = vi.fn() render( diff --git a/ui/src/Pages/SharePage/SharePage.test.js b/ui/src/Pages/SharePage/SharePage.test.tsx similarity index 97% rename from ui/src/Pages/SharePage/SharePage.test.js rename to ui/src/Pages/SharePage/SharePage.test.tsx index dff8e932..435bc008 100644 --- a/ui/src/Pages/SharePage/SharePage.test.js +++ b/ui/src/Pages/SharePage/SharePage.test.tsx @@ -17,7 +17,7 @@ import { import { SIDEBAR_DOWNLOAD_QUERY } from '../../components/sidebar/SidebarDownloadMedia' import { SHARE_ALBUM_QUERY } from './AlbumSharePage' -jest.mock('../../hooks/useScrollPagination') +vi.mock('../../hooks/useScrollPagination') describe('load correct share page, based on graphql query', () => { const token = 'TOKEN123' @@ -96,7 +96,7 @@ describe('load correct share page, based on graphql query', () => { > - } /> + } /> @@ -173,7 +173,7 @@ describe('load correct share page, based on graphql query', () => { > - } /> + } /> diff --git a/ui/src/components/layout/Layout.test.js b/ui/src/components/layout/Layout.test.tsx similarity index 91% rename from ui/src/components/layout/Layout.test.js rename to ui/src/components/layout/Layout.test.tsx index b053203f..7340eef7 100644 --- a/ui/src/components/layout/Layout.test.js +++ b/ui/src/components/layout/Layout.test.tsx @@ -4,7 +4,7 @@ import Layout from './Layout' test('Layout component', async () => { render( - +

layout_content

) diff --git a/ui/src/components/layout/Layout.tsx b/ui/src/components/layout/Layout.tsx index b4abd6f7..ab52973f 100644 --- a/ui/src/components/layout/Layout.tsx +++ b/ui/src/components/layout/Layout.tsx @@ -40,7 +40,6 @@ const Layout = ({ children, title, ...otherProps }: LayoutProps) => { id="layout-content" > {children} - {/*
*/} diff --git a/ui/src/components/layout/MainMenu.test.tsx b/ui/src/components/layout/MainMenu.test.tsx index 89623ea2..03b6d766 100644 --- a/ui/src/components/layout/MainMenu.test.tsx +++ b/ui/src/components/layout/MainMenu.test.tsx @@ -7,11 +7,9 @@ import { ADMIN_QUERY } from './Layout' import { MemoryRouter } from 'react-router-dom' import MainMenu, { MAPBOX_QUERY } from './MainMenu' -jest.mock('../../helpers/authentication.ts') +vi.mock('../../helpers/authentication.ts') -const authTokenMock = authentication.authToken as jest.MockedFunction< - typeof authentication.authToken -> +const authTokenMock = authentication.authToken // as vi.MockedFunction afterEach(() => { authTokenMock.mockClear() diff --git a/ui/src/components/photoGallery/PhotoGallery.test.tsx b/ui/src/components/photoGallery/PhotoGallery.test.tsx index 082bcfd6..b1d5aaa9 100644 --- a/ui/src/components/photoGallery/PhotoGallery.test.tsx +++ b/ui/src/components/photoGallery/PhotoGallery.test.tsx @@ -5,12 +5,12 @@ import { MediaType } from '../../__generated__/globalTypes' import PhotoGallery from './PhotoGallery' import { PhotoGalleryState } from './photoGalleryReducer' -jest.mock('./photoGalleryMutations', () => ({ - useMarkFavoriteMutation: () => [jest.fn()], +vi.mock('./photoGalleryMutations', () => ({ + useMarkFavoriteMutation: () => [vi.fn()], })) test('photo gallery with media', () => { - const dispatchMedia = jest.fn() + const dispatchMedia = vi.fn() const mediaState: PhotoGalleryState = { activeIndex: 0, @@ -68,7 +68,7 @@ test('photo gallery with media', () => { }) describe('photo gallery presenting', () => { - const dispatchMedia = jest.fn() + const dispatchMedia = vi.fn() test('not presenting', () => { const mediaStateNoPresent: PhotoGalleryState = { diff --git a/ui/src/components/photoGallery/presentView/PresentMedia.test.tsx b/ui/src/components/photoGallery/presentView/PresentMedia.test.tsx index 06c3423d..e42a38eb 100644 --- a/ui/src/components/photoGallery/presentView/PresentMedia.test.tsx +++ b/ui/src/components/photoGallery/presentView/PresentMedia.test.tsx @@ -20,7 +20,7 @@ test('render present image', () => { expect(screen.getByTestId('present-img-thumbnail')).toHaveAttribute( 'src', - 'http://localhost/sample_image.jpg' + 'http://localhost:3000/sample_image.jpg' ) expect(screen.getByTestId('present-img-highres')).toHaveStyle({ display: 'none', @@ -47,10 +47,10 @@ test('render present video', () => { expect(screen.getByTestId('present-video')).toHaveAttribute( 'poster', - 'http://localhost/sample_video_thumb.jpg' + 'http://localhost:3000/sample_video_thumb.jpg' ) expect( screen.getByTestId('present-video').querySelector('source') - ).toHaveAttribute('src', 'http://localhost/sample_video.mp4') + ).toHaveAttribute('src', 'http://localhost:3000/sample_video.mp4') }) diff --git a/ui/src/components/photoGallery/presentView/PresentNavigationOverlay.test.tsx b/ui/src/components/photoGallery/presentView/PresentNavigationOverlay.test.tsx index 763b8a5a..4a6893a8 100644 --- a/ui/src/components/photoGallery/presentView/PresentNavigationOverlay.test.tsx +++ b/ui/src/components/photoGallery/presentView/PresentNavigationOverlay.test.tsx @@ -2,11 +2,11 @@ import React from 'react' import PresentNavigationOverlay from './PresentNavigationOverlay' import { fireEvent, render, screen, act } from '@testing-library/react' -jest.useFakeTimers() +vi.useFakeTimers() describe('PresentNavigationOverlay component', () => { test('simple render', () => { - const dispatchMedia = jest.fn() + const dispatchMedia = vi.fn() render() expect(screen.getByLabelText('Previous image')).toBeInTheDocument() @@ -15,7 +15,7 @@ describe('PresentNavigationOverlay component', () => { }) test('click buttons', () => { - const dispatchMedia = jest.fn() + const dispatchMedia = vi.fn() render() expect(dispatchMedia).not.toHaveBeenCalled() @@ -28,7 +28,7 @@ describe('PresentNavigationOverlay component', () => { }) test('mouse move, show and hide', () => { - const dispatchMedia = jest.fn() + const dispatchMedia = vi.fn() const { container } = render( ) @@ -39,7 +39,7 @@ describe('PresentNavigationOverlay component', () => { expect(screen.getByLabelText('Next image')).not.toHaveClass('hide') act(() => { - jest.advanceTimersByTime(3000) + vi.advanceTimersByTime(3000) }) expect(screen.getByLabelText('Next image')).toHaveClass('hide') diff --git a/ui/src/components/routes/AuthorizedRoute.test.tsx b/ui/src/components/routes/AuthorizedRoute.test.tsx index 307a27dc..7313916d 100644 --- a/ui/src/components/routes/AuthorizedRoute.test.tsx +++ b/ui/src/components/routes/AuthorizedRoute.test.tsx @@ -7,11 +7,9 @@ import * as authentication from '../../helpers/authentication' import { MockedProvider } from '@apollo/client/testing' import { ADMIN_QUERY } from '../layout/Layout' -jest.mock('../../helpers/authentication.ts') +vi.mock('../../helpers/authentication.ts') -const authToken = authentication.authToken as jest.Mock< - ReturnType -> +const authToken = vi.mocked(authentication.authToken) describe('AuthorizedRoute component', () => { const AuthorizedComponent = () =>
authorized content
diff --git a/ui/src/components/routes/Routes.test.js b/ui/src/components/routes/Routes.test.tsx similarity index 77% rename from ui/src/components/routes/Routes.test.js rename to ui/src/components/routes/Routes.test.tsx index 1c7c44ee..e0e9eff6 100644 --- a/ui/src/components/routes/Routes.test.js +++ b/ui/src/components/routes/Routes.test.tsx @@ -8,12 +8,14 @@ import { } from '@testing-library/react' import { MemoryRouter } from 'react-router-dom' -jest.mock('../../Pages/LoginPage/LoginPage.tsx', () => () => ( +vi.mock('../../Pages/LoginPage/LoginPage.tsx', () => () => (
mocked login page
)) describe('routes', () => { - test('unauthorized root path should navigate to login page', async () => { + // vitest does not support this yet + // https://github.com/vitest-dev/vitest/issues/960 + test.skip('unauthorized root path should navigate to login page', async () => { render( diff --git a/ui/src/components/sidebar/MediaSidebar/MediaSidebar.test.tsx b/ui/src/components/sidebar/MediaSidebar/MediaSidebar.test.tsx index 6c0cf62c..808bd6fb 100644 --- a/ui/src/components/sidebar/MediaSidebar/MediaSidebar.test.tsx +++ b/ui/src/components/sidebar/MediaSidebar/MediaSidebar.test.tsx @@ -7,11 +7,9 @@ import { MemoryRouter } from 'react-router' import * as authentication from '../../../helpers/authentication' -jest.mock('../../../helpers/authentication.ts') +vi.mock('../../../helpers/authentication.ts') -const authToken = authentication.authToken as jest.Mock< - ReturnType -> +const authToken = vi.mocked(authentication.authToken) describe('MediaSidebar', () => { const media: MediaSidebarMedia = { diff --git a/ui/src/components/timelineGallery/TimelineGallery.test.tsx b/ui/src/components/timelineGallery/TimelineGallery.test.tsx index 2045929f..422ec99b 100644 --- a/ui/src/components/timelineGallery/TimelineGallery.test.tsx +++ b/ui/src/components/timelineGallery/TimelineGallery.test.tsx @@ -5,7 +5,7 @@ import { MemoryRouter } from 'react-router-dom' import TimelineGallery, { MY_TIMELINE_QUERY } from './TimelineGallery' import { timelineData } from './timelineTestData' -jest.mock('../../hooks/useScrollPagination') +vi.mock('../../hooks/useScrollPagination') test('timeline with media', async () => { const graphqlMocks = [ diff --git a/ui/src/hooks/__mocks__/useScrollPagination.ts b/ui/src/hooks/__mocks__/useScrollPagination.ts index 043d67fc..ce051d79 100644 --- a/ui/src/hooks/__mocks__/useScrollPagination.ts +++ b/ui/src/hooks/__mocks__/useScrollPagination.ts @@ -1,4 +1,4 @@ export default () => ({ finished: true, - containerElem: jest.fn(), + containerElem: vi.fn(), }) diff --git a/ui/testing/setupTests.ts b/ui/testing/setupTests.ts index 99c2dbf0..10f4c03d 100644 --- a/ui/testing/setupTests.ts +++ b/ui/testing/setupTests.ts @@ -5,5 +5,7 @@ import '@testing-library/jest-dom' import '@testing-library/user-event' +import { setupLocalization } from '../src/localization' + // setup localization to make it easier to select elements by text -require('../src/localization').setupLocalization() +setupLocalization() diff --git a/ui/tsconfig.json b/ui/tsconfig.json index 9c5729ce..6493c494 100644 --- a/ui/tsconfig.json +++ b/ui/tsconfig.json @@ -14,7 +14,8 @@ "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, - "jsx": "react-jsx" + "jsx": "react-jsx", + "types": ["vitest/globals", "@testing-library/jest-dom"] }, "include": ["src", "vite.config.ts"] } diff --git a/ui/vite.config.js b/ui/vite.config.js index 2d962d3c..0e495e17 100644 --- a/ui/vite.config.js +++ b/ui/vite.config.js @@ -1,3 +1,6 @@ +/// +/// + import { defineConfig } from 'vite' import svgr from 'vite-plugin-svgr' import react from '@vitejs/plugin-react' @@ -8,4 +11,12 @@ export default defineConfig({ server: { port: 1234, }, + esbuild: { + logOverride: { 'this-is-undefined-in-esm': 'silent' }, + }, + test: { + globals: true, + environment: 'jsdom', + setupFiles: './testing/setupTests.ts', + }, })