test: configure testing-library/react and add first test

pull/2901/head
Johan Girod 2024-02-16 15:38:02 +01:00
parent 632290c1c9
commit 2b11c25e9b
11 changed files with 416 additions and 143 deletions

View File

@ -115,17 +115,20 @@ module.exports = {
prev: ['export', 'cjs-export'],
next: ['export', 'cjs-export'],
},
],
"no-restricted-imports": ["error", {
"paths": [{
"name": "styled-components",
"importNames": ["default"],
"message": 'Please use named import : `import { styled } from "styled-component"` instead.'
}]
}]
'no-restricted-imports': [
'error',
{
paths: [
{
name: 'styled-components',
importNames: ['default'],
message:
'Please use named import : `import { styled } from "styled-component"` instead.',
},
],
},
],
},
},
// Cypress rules
@ -148,17 +151,14 @@ module.exports = {
},
// Jest rules (for Vitest)
{
files: ['site/test/**/*.{js,ts}'],
settings: { jest: { version: 28 } },
extends: ['eslint:recommended', 'plugin:jest/recommended', 'prettier'],
plugins: ['@typescript-eslint', 'jest'],
rules: {
'jest/valid-expect': 'off',
'jest/no-standalone-expect': [
'error',
{ additionalTestBlockFunctions: ['it', 'it.skip'] },
],
},
files: ['site/**/*.test.{js,ts,tsx,jsx}'],
extends: [
'eslint:recommended',
'plugin:vitest/recommended',
'plugin:testing-library/react',
'prettier',
],
plugins: ['@typescript-eslint', 'vitest', 'testing-library'],
},
// Accessibility rules on /site
{

View File

@ -50,6 +50,7 @@
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-vitest": "^0.3.22",
"prettier": "^3.0.3",
"publicodes": "1.0.1",
"rimraf": "^5.0.1"

View File

@ -113,6 +113,8 @@
"@storybook/react": "^7.4.2",
"@storybook/react-vite": "^7.4.2",
"@storybook/testing-library": "^0.1.0",
"@testing-library/jest-dom": "^6.4.2",
"@testing-library/react": "^14.2.1",
"@types/history": "^5.0.0",
"@types/react": "^18.2.22",
"@types/react-dom": "^18.2.7",
@ -127,6 +129,8 @@
"cypress-plugin-tab": "^1.0.5",
"cypress-wait-until": "^1.7.2",
"dotenv": "^16.3.1",
"eslint-plugin-testing-library": "^6.2.0",
"happy-dom": "^13.3.8",
"i18next-parser": "^8.7.0",
"netlify-cli": "^17.10.1",
"serve-static": "^1.15.0",

View File

@ -0,0 +1,45 @@
import { render, screen } from '@testing-library/react'
import { DottedName } from 'modele-social'
import Engine from 'publicodes'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { WhenApplicable } from '@/components/EngineValue/WhenApplicable'
describe('WhenApplicable', () => {
const mockEngine = {
evaluate: vi.fn(),
}
const engine = mockEngine as typeof mockEngine & Engine<DottedName>
beforeEach(() => {
vi.clearAllMocks()
})
it('should render children when the condition is applicable', () => {
mockEngine.evaluate.mockReturnValueOnce({ nodeValue: true })
render(
<WhenApplicable dottedName="SMIC" engine={engine}>
<div>Rendered when applicable</div>
</WhenApplicable>
)
expect(screen.getByText('Rendered when applicable')).toBeInTheDocument()
expect(mockEngine.evaluate).toHaveBeenCalledWith({
'est applicable': 'SMIC',
})
})
it('should not render children when the condition is undefined (because of missing variables)', () => {
mockEngine.evaluate.mockReturnValueOnce({ nodeValue: undefined })
const { container } = render(
<WhenApplicable dottedName="SMIC" engine={engine}>
<div>Children</div>
</WhenApplicable>
)
expect(container).toBeEmptyDOMElement()
})
})

View File

@ -1,56 +1,45 @@
// import { render } from '@testing-library/react'
// import { vi } from 'vitest'
import { render, screen } from '@testing-library/react'
import { DottedName } from 'modele-social'
import Engine from 'publicodes'
import { beforeEach, describe, expect, it, vi } from 'vitest'
// import { WhenNotApplicable } from '@/components/EngineValue/WhenNotApplicable'
import { WhenNotApplicable } from '@/components/EngineValue/WhenNotApplicable'
// describe('WhenNotApplicable', () => {
// const mockEngine = {
// evaluate: vi.fn(),
// }
// beforeEach(() => {
// vi.clearAllMocks()
// })
describe('WhenNotApplicable', () => {
const mockEngine = {
evaluate: vi.fn(),
}
const engine = mockEngine as typeof mockEngine & Engine<DottedName>
// it('should render children when the condition is true', () => {
// mockEngine.evaluate.mockReturnValueOnce({ nodeValue: true })
beforeEach(() => {
vi.clearAllMocks()
})
// const { getByText } = render(
// <WhenNotApplicable dottedName="example" engine={mockEngine as }>
// <div>Rendered when not applicable</div>
// </WhenNotApplicable>
// )
it('should render children when the condition not applicable', () => {
mockEngine.evaluate.mockReturnValueOnce({ nodeValue: true })
// expect(getByText('Rendered when not applicable')).
// expect(mockEngine.evaluate).toHaveBeenCalledWith({
// 'est non applicable': 'example',
// })
// })
render(
<WhenNotApplicable dottedName="SMIC" engine={engine}>
<div>Rendered when not applicable</div>
</WhenNotApplicable>
)
// it('should not render children when the condition is false', () => {
// mockEngine.evaluate.mockReturnValueOnce({ nodeValue: false })
expect(screen.getByText('Rendered when not applicable')).toBeInTheDocument()
// const { queryByText } = render(
// <WhenNotApplicable dottedName="example" engine={mockEngine}>
// <div>Rendered when not applicable</div>
// </WhenNotApplicable>
// )
expect(mockEngine.evaluate).toHaveBeenCalledWith({
'est non applicable': 'SMIC',
})
})
// expect(queryByText('Rendered when not applicable')).toBeNull()
// expect(mockEngine.evaluate).toHaveBeenCalledWith({
// 'est non applicable': 'example',
// })
// })
it('should not render children when the condition is undefined (because of missing variables)', () => {
mockEngine.evaluate.mockReturnValueOnce({ nodeValue: undefined })
// it('should use the default engine when no engine is provided', () => {
// const { getByText } = render(
// <WhenNotApplicable dottedName="example">
// <div>Rendered when not applicable</div>
// </WhenNotApplicable>
// )
const { container } = render(
<WhenNotApplicable dottedName="SMIC" engine={engine}>
<div>Children</div>
</WhenNotApplicable>
)
// expect(getByText('Rendered when not applicable')).toBeInTheDocument()
// expect(mockEngine.evaluate).toHaveBeenCalledWith({
// 'est non applicable': 'example',
// })
// })
// })
expect(container).toBeEmptyDOMElement()
})
})

View File

@ -1,45 +0,0 @@
import rules from 'modele-social'
import { utils } from 'publicodes'
import { describe, expect, it } from 'vitest'
// We skip static cycle test, as it does not separates applicability dependencies from value dependencies.
// The previous version was not handling cycle from applicability at all
// We may need a better algorithm for static cycle detection. But it's not a priority as there is a now a
// functionning cycle detection at runtime
describe.skip('DottedNames graph', () => {
it("shouldn't have cycles", () => {
const [cyclesDependencies, dotGraphs] = utils.cyclicDependencies(rules)
const dotGraphsToLog = dotGraphs
.map(
(dotGraph) =>
`🌀🌀🌀🌀🌀🌀🌀🌀🌀🌀🌀\n A cycle graph to stare at with Graphviz:\n${dotGraph}\n\n`
)
.join('\n\n')
expect(
cyclesDependencies,
`${dotGraphsToLog}\nAT LEAST the following cycles have been found in the rules dependencies graph.\nSee below for a representation of each cycle.\n⬇️ is a node of the cycle.\n\t- ${cyclesDependencies
.map(
(cycleDependencies, idx) =>
'#' + idx + ':\n\t\t⬇ ' + cycleDependencies.join('\n\t\t⬇ ')
)
.join('\n\t- ')}\n\n`
).to.deep.equal([
[
'dirigeant . rémunération . net . imposable',
'dirigeant . auto-entrepreneur . impôt . revenu imposable',
"entreprise . chiffre d'affaires",
'dirigeant . rémunération . net . après impôt',
'dirigeant . rémunération . net',
'dirigeant . rémunération . totale',
'impôt . montant',
'impôt . revenu imposable',
],
])
console.warn(
"[ WARNING ] A cycle still exists around `entreprise . chiffre d'affaires` see issue #1524 for a definitive fix."
)
})
})

View File

@ -54,7 +54,6 @@ export const runSimulations = (
// Display result in a single line in the snapshot,
// which reduce the number of lines of this snapshot
// and improve its readability.
// eslint-disable-next-line jest/no-standalone-expect
expect(res + snapshotedDisplayedNotifications).toMatchSnapshot(name)
})
)

View File

@ -38,6 +38,7 @@
"vite-iframe-script.config.ts",
"build/vite-build-simulation-data.config.ts",
"build/prerender.ts",
"vite-pwa-options.ts"
"vite-pwa-options.ts",
"vitest-setup.ts"
]
}

View File

@ -160,6 +160,13 @@ export default defineConfig(({ command, mode }) => ({
*/
noExternal: [/tslib/],
},
test: {
environmentMatchGlobs: [
// all tests in source with tsx will run in happy-dom (component tests)
['source/**/*.test.tsx', 'happy-dom'],
],
setupFiles: ['./vitest-setup.ts'],
},
}))
/**

1
site/vitest-setup.ts Normal file
View File

@ -0,0 +1 @@
import '@testing-library/jest-dom/vitest'

329
yarn.lock
View File

@ -43,6 +43,13 @@ __metadata:
languageName: node
linkType: hard
"@adobe/css-tools@npm:^4.3.2":
version: 4.3.3
resolution: "@adobe/css-tools@npm:4.3.3"
checksum: d21f3786b84911fee59c995a146644a85c98692979097b26484ffa9e442fb1a92ccd68ce984e3e7cf8d5933c3560fbc0ad3e3cd1de50b9a723d1c012e793bbcb
languageName: node
linkType: hard
"@algolia/cache-browser-local-storage@npm:4.14.3":
version: 4.14.3
resolution: "@algolia/cache-browser-local-storage@npm:4.14.3"
@ -11855,6 +11862,69 @@ __metadata:
languageName: node
linkType: hard
"@testing-library/dom@npm:^9.0.0":
version: 9.3.4
resolution: "@testing-library/dom@npm:9.3.4"
dependencies:
"@babel/code-frame": ^7.10.4
"@babel/runtime": ^7.12.5
"@types/aria-query": ^5.0.1
aria-query: 5.1.3
chalk: ^4.1.0
dom-accessibility-api: ^0.5.9
lz-string: ^1.5.0
pretty-format: ^27.0.2
checksum: dfd6fb0d6c7b4dd716ba3c47309bc9541b4a55772cb61758b4f396b3785efe2dbc75dc63423545c039078c7ffcc5e4b8c67c2db1b6af4799580466036f70026f
languageName: node
linkType: hard
"@testing-library/jest-dom@npm:^6.4.2":
version: 6.4.2
resolution: "@testing-library/jest-dom@npm:6.4.2"
dependencies:
"@adobe/css-tools": ^4.3.2
"@babel/runtime": ^7.9.2
aria-query: ^5.0.0
chalk: ^3.0.0
css.escape: ^1.5.1
dom-accessibility-api: ^0.6.3
lodash: ^4.17.15
redent: ^3.0.0
peerDependencies:
"@jest/globals": ">= 28"
"@types/bun": "*"
"@types/jest": ">= 28"
jest: ">= 28"
vitest: ">= 0.32"
peerDependenciesMeta:
"@jest/globals":
optional: true
"@types/bun":
optional: true
"@types/jest":
optional: true
jest:
optional: true
vitest:
optional: true
checksum: 631aeadbf4e738080ae095242cf1a29a0b4ee2f09c8bdd0d3f00a923707da64c1617e088ba9a961d098481afabdc1d19149fb7ef98edf15132348eb222f345ae
languageName: node
linkType: hard
"@testing-library/react@npm:^14.2.1":
version: 14.2.1
resolution: "@testing-library/react@npm:14.2.1"
dependencies:
"@babel/runtime": ^7.12.5
"@testing-library/dom": ^9.0.0
"@types/react-dom": ^18.0.0
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
checksum: 7054ae69a0e06c0777da8105fa08fac7e8dac570476a065285d7b993947acda5c948598764a203ebaac759c161c562d6712f19f5bd08be3f09a07e23baee5426
languageName: node
linkType: hard
"@testing-library/user-event@npm:^13.2.1":
version: 13.5.0
resolution: "@testing-library/user-event@npm:13.5.0"
@ -11931,6 +12001,13 @@ __metadata:
languageName: node
linkType: hard
"@types/aria-query@npm:^5.0.1":
version: 5.0.4
resolution: "@types/aria-query@npm:5.0.4"
checksum: ad8b87e4ad64255db5f0a73bc2b4da9b146c38a3a8ab4d9306154334e0fc67ae64e76bfa298eebd1e71830591fb15987e5de7111bdb36a2221bdc379e3415fb0
languageName: node
linkType: hard
"@types/babel__core@npm:^7.0.0":
version: 7.20.0
resolution: "@types/babel__core@npm:7.20.0"
@ -12638,6 +12715,15 @@ __metadata:
languageName: node
linkType: hard
"@types/react-dom@npm:^18.0.0":
version: 18.2.19
resolution: "@types/react-dom@npm:18.2.19"
dependencies:
"@types/react": "*"
checksum: 087a19d8e4c1c0900ec4ac5ddb749a811a38274b25683d233c11755d2895cc6e475e8bf9bea3dee36519769298e078d4c2feab9ab4bd13b26bc2a6170716437e
languageName: node
linkType: hard
"@types/react-dom@npm:^18.2.7":
version: 18.2.7
resolution: "@types/react-dom@npm:18.2.7"
@ -12959,6 +13045,26 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:5.62.0":
version: 5.62.0
resolution: "@typescript-eslint/scope-manager@npm:5.62.0"
dependencies:
"@typescript-eslint/types": 5.62.0
"@typescript-eslint/visitor-keys": 5.62.0
checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:6.21.0":
version: 6.21.0
resolution: "@typescript-eslint/scope-manager@npm:6.21.0"
dependencies:
"@typescript-eslint/types": 6.21.0
"@typescript-eslint/visitor-keys": 6.21.0
checksum: 71028b757da9694528c4c3294a96cc80bc7d396e383a405eab3bc224cda7341b88e0fc292120b35d3f31f47beac69f7083196c70616434072fbcd3d3e62d3376
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:6.7.2":
version: 6.7.2
resolution: "@typescript-eslint/scope-manager@npm:6.7.2"
@ -13000,6 +13106,13 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/types@npm:6.21.0":
version: 6.21.0
resolution: "@typescript-eslint/types@npm:6.21.0"
checksum: 9501b47d7403417af95fc1fb72b2038c5ac46feac0e1598a46bcb43e56a606c387e9dcd8a2a0abe174c91b509f2d2a8078b093786219eb9a01ab2fbf9ee7b684
languageName: node
linkType: hard
"@typescript-eslint/types@npm:6.7.2":
version: 6.7.2
resolution: "@typescript-eslint/types@npm:6.7.2"
@ -13025,6 +13138,43 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:5.62.0, @typescript-eslint/typescript-estree@npm:^5.59.5":
version: 5.62.0
resolution: "@typescript-eslint/typescript-estree@npm:5.62.0"
dependencies:
"@typescript-eslint/types": 5.62.0
"@typescript-eslint/visitor-keys": 5.62.0
debug: ^4.3.4
globby: ^11.1.0
is-glob: ^4.0.3
semver: ^7.3.7
tsutils: ^3.21.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:6.21.0":
version: 6.21.0
resolution: "@typescript-eslint/typescript-estree@npm:6.21.0"
dependencies:
"@typescript-eslint/types": 6.21.0
"@typescript-eslint/visitor-keys": 6.21.0
debug: ^4.3.4
globby: ^11.1.0
is-glob: ^4.0.3
minimatch: 9.0.3
semver: ^7.5.4
ts-api-utils: ^1.0.1
peerDependenciesMeta:
typescript:
optional: true
checksum: dec02dc107c4a541e14fb0c96148f3764b92117c3b635db3a577b5a56fc48df7a556fa853fb82b07c0663b4bf2c484c9f245c28ba3e17e5cb0918ea4cab2ea21
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:6.7.2":
version: 6.7.2
resolution: "@typescript-eslint/typescript-estree@npm:6.7.2"
@ -13043,24 +13193,6 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:^5.59.5":
version: 5.62.0
resolution: "@typescript-eslint/typescript-estree@npm:5.62.0"
dependencies:
"@typescript-eslint/types": 5.62.0
"@typescript-eslint/visitor-keys": 5.62.0
debug: ^4.3.4
globby: ^11.1.0
is-glob: ^4.0.3
semver: ^7.3.7
tsutils: ^3.21.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:6.7.2":
version: 6.7.2
resolution: "@typescript-eslint/utils@npm:6.7.2"
@ -13096,6 +13228,41 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:^5.58.0":
version: 5.62.0
resolution: "@typescript-eslint/utils@npm:5.62.0"
dependencies:
"@eslint-community/eslint-utils": ^4.2.0
"@types/json-schema": ^7.0.9
"@types/semver": ^7.3.12
"@typescript-eslint/scope-manager": 5.62.0
"@typescript-eslint/types": 5.62.0
"@typescript-eslint/typescript-estree": 5.62.0
eslint-scope: ^5.1.1
semver: ^7.3.7
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
checksum: ee9398c8c5db6d1da09463ca7bf36ed134361e20131ea354b2da16a5fdb6df9ba70c62a388d19f6eebb421af1786dbbd79ba95ddd6ab287324fc171c3e28d931
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:^6.21.0":
version: 6.21.0
resolution: "@typescript-eslint/utils@npm:6.21.0"
dependencies:
"@eslint-community/eslint-utils": ^4.4.0
"@types/json-schema": ^7.0.12
"@types/semver": ^7.5.0
"@typescript-eslint/scope-manager": 6.21.0
"@typescript-eslint/types": 6.21.0
"@typescript-eslint/typescript-estree": 6.21.0
semver: ^7.5.4
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
checksum: b129b3a4aebec8468259f4589985cb59ea808afbfdb9c54f02fad11e17d185e2bf72bb332f7c36ec3c09b31f18fc41368678b076323e6e019d06f74ee93f7bf2
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:5.43.0":
version: 5.43.0
resolution: "@typescript-eslint/visitor-keys@npm:5.43.0"
@ -13116,6 +13283,16 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:6.21.0":
version: 6.21.0
resolution: "@typescript-eslint/visitor-keys@npm:6.21.0"
dependencies:
"@typescript-eslint/types": 6.21.0
eslint-visitor-keys: ^3.4.1
checksum: 67c7e6003d5af042d8703d11538fca9d76899f0119130b373402819ae43f0bc90d18656aa7add25a24427ccf1a0efd0804157ba83b0d4e145f06107d7d1b7433
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:6.7.2":
version: 6.7.2
resolution: "@typescript-eslint/visitor-keys@npm:6.7.2"
@ -13986,7 +14163,7 @@ __metadata:
languageName: node
linkType: hard
"aria-query@npm:^5.0.0, aria-query@npm:^5.1.3":
"aria-query@npm:5.1.3, aria-query@npm:^5.0.0, aria-query@npm:^5.1.3":
version: 5.1.3
resolution: "aria-query@npm:5.1.3"
dependencies:
@ -15282,6 +15459,16 @@ __metadata:
languageName: node
linkType: hard
"chalk@npm:^3.0.0":
version: 3.0.0
resolution: "chalk@npm:3.0.0"
dependencies:
ansi-styles: ^4.1.0
supports-color: ^7.1.0
checksum: 8e3ddf3981c4da405ddbd7d9c8d91944ddf6e33d6837756979f7840a29272a69a5189ecae0ff84006750d6d1e92368d413335eab4db5476db6e6703a1d1e0505
languageName: node
linkType: hard
"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2":
version: 4.1.2
resolution: "chalk@npm:4.1.2"
@ -16391,7 +16578,7 @@ __metadata:
languageName: node
linkType: hard
"css.escape@npm:^1.5.0":
"css.escape@npm:^1.5.0, css.escape@npm:^1.5.1":
version: 1.5.1
resolution: "css.escape@npm:1.5.1"
checksum: f6d38088d870a961794a2580b2b2af1027731bb43261cfdce14f19238a88664b351cc8978abc20f06cc6bbde725699dec8deb6fe9816b139fc3f2af28719e774
@ -17251,6 +17438,13 @@ __metadata:
languageName: node
linkType: hard
"dom-accessibility-api@npm:^0.6.3":
version: 0.6.3
resolution: "dom-accessibility-api@npm:0.6.3"
checksum: c325b5144bb406df23f4affecffc117dbaec9af03daad9ee6b510c5be647b14d28ef0a4ea5ca06d696d8ab40bb777e5fed98b985976fdef9d8790178fa1d573f
languageName: node
linkType: hard
"dom-helpers@npm:^3.4.0":
version: 3.4.0
resolution: "dom-helpers@npm:3.4.0"
@ -17525,6 +17719,13 @@ __metadata:
languageName: node
linkType: hard
"entities@npm:^4.5.0":
version: 4.5.0
resolution: "entities@npm:4.5.0"
checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7
languageName: node
linkType: hard
"env-paths@npm:3.0.0, env-paths@npm:^3.0.0":
version: 3.0.0
resolution: "env-paths@npm:3.0.0"
@ -18575,6 +18776,34 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-testing-library@npm:^6.2.0":
version: 6.2.0
resolution: "eslint-plugin-testing-library@npm:6.2.0"
dependencies:
"@typescript-eslint/utils": ^5.58.0
peerDependencies:
eslint: ^7.5.0 || ^8.0.0
checksum: 7af7e0a1eee44c6ba65ce2ae99f8e46ce709a319f4cce778bb0af2dda5828d78f3a81e8989c7b691a8b9b9fef102b56136209aac700038b9e64794600b0d12db
languageName: node
linkType: hard
"eslint-plugin-vitest@npm:^0.3.22":
version: 0.3.22
resolution: "eslint-plugin-vitest@npm:0.3.22"
dependencies:
"@typescript-eslint/utils": ^6.21.0
peerDependencies:
eslint: ">=8.0.0"
vitest: "*"
peerDependenciesMeta:
"@typescript-eslint/eslint-plugin":
optional: true
vitest:
optional: true
checksum: 7930bf874250752f2d2e2cd95229ff8bcd85fc7387886562f2f691bb743db085fd10e73260f3f0f3080ab73d64e152381ecf7135643329d720b96bd5360e3aae
languageName: node
linkType: hard
"eslint-scope@npm:^5.1.1":
version: 5.1.1
resolution: "eslint-scope@npm:5.1.1"
@ -20704,6 +20933,17 @@ __metadata:
languageName: node
linkType: hard
"happy-dom@npm:^13.3.8":
version: 13.3.8
resolution: "happy-dom@npm:13.3.8"
dependencies:
entities: ^4.5.0
webidl-conversions: ^7.0.0
whatwg-mimetype: ^3.0.0
checksum: cfdb9f80f19b0d1839c96c3b7d52f0890ab4d13fbda30081f5cdf748328c5ea1e14da10bf0531e7607c97f2196757ac0a61bf26334497285c8e29d2a6ec13a7a
languageName: node
linkType: hard
"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2":
version: 1.0.2
resolution: "has-bigints@npm:1.0.2"
@ -23685,6 +23925,15 @@ __metadata:
languageName: node
linkType: hard
"lz-string@npm:^1.5.0":
version: 1.5.0
resolution: "lz-string@npm:1.5.0"
bin:
lz-string: bin/bin.js
checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d
languageName: node
linkType: hard
"macos-release@npm:^3.1.0":
version: 3.1.0
resolution: "macos-release@npm:3.1.0"
@ -24141,6 +24390,15 @@ __metadata:
languageName: node
linkType: hard
"minimatch@npm:9.0.3, minimatch@npm:^9.0.0":
version: 9.0.3
resolution: "minimatch@npm:9.0.3"
dependencies:
brace-expansion: ^2.0.1
checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5
languageName: node
linkType: hard
"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2":
version: 3.1.2
resolution: "minimatch@npm:3.1.2"
@ -24168,15 +24426,6 @@ __metadata:
languageName: node
linkType: hard
"minimatch@npm:^9.0.0":
version: 9.0.3
resolution: "minimatch@npm:9.0.3"
dependencies:
brace-expansion: ^2.0.1
checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5
languageName: node
linkType: hard
"minimatch@npm:^9.0.1":
version: 9.0.1
resolution: "minimatch@npm:9.0.1"
@ -27652,6 +27901,16 @@ __metadata:
languageName: node
linkType: hard
"redent@npm:^3.0.0":
version: 3.0.0
resolution: "redent@npm:3.0.0"
dependencies:
indent-string: ^4.0.0
strip-indent: ^3.0.0
checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b
languageName: node
linkType: hard
"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0":
version: 1.2.0
resolution: "redis-errors@npm:1.2.0"
@ -28355,6 +28614,7 @@ __metadata:
eslint-plugin-promise: ^6.1.1
eslint-plugin-react: ^7.33.2
eslint-plugin-react-hooks: ^4.6.0
eslint-plugin-vitest: ^0.3.22
prettier: ^3.0.3
publicodes: 1.0.1
rimraf: ^5.0.1
@ -28953,6 +29213,8 @@ __metadata:
"@storybook/react": ^7.4.2
"@storybook/react-vite": ^7.4.2
"@storybook/testing-library": ^0.1.0
"@testing-library/jest-dom": ^6.4.2
"@testing-library/react": ^14.2.1
"@types/history": ^5.0.0
"@types/react": ^18.2.22
"@types/react-dom": ^18.2.7
@ -28969,9 +29231,11 @@ __metadata:
cypress-wait-until: ^1.7.2
date-fns: ^2.30.0
dotenv: ^16.3.1
eslint-plugin-testing-library: ^6.2.0
exoneration-covid: "workspace:^"
focus-trap-react: ^10.2.1
fuse.js: ^6.6.2
happy-dom: ^13.3.8
i18next-parser: ^8.7.0
iframe-resizer: ^4.3.7
isbot: ^3.7.0
@ -32033,6 +32297,13 @@ __metadata:
languageName: node
linkType: hard
"whatwg-mimetype@npm:^3.0.0":
version: 3.0.0
resolution: "whatwg-mimetype@npm:3.0.0"
checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824
languageName: node
linkType: hard
"whatwg-url@npm:^11.0.0":
version: 11.0.0
resolution: "whatwg-url@npm:11.0.0"