Files
workavia-calendar-front/__test__/utils/Renderwithproviders.tsx
T
lethemanh cadfa70e60 #708 apply strictier linting rules (#717)
* #708 apply strictier linting rules and fix simple eslint bugs

* #708 fix eslint errors relate to promise

* #708 fix eslint import/no-extraneous-dependencies

* #708 fix eslint errors of react-hook

* #708 enable eslint check for typescript

---------

Co-authored-by: lethemanh <lethemanh@lethemanhs-MacBook-Pro.local>
2026-04-01 17:15:10 +02:00

57 lines
1.7 KiB
TypeScript

import type { AppStore, RootState } from '@/app/store'
import { setupStore } from '@/app/store'
import { TwakeMuiThemeProvider } from '@linagora/twake-mui'
import type { RenderOptions } from '@testing-library/react'
import { render } from '@testing-library/react'
import React, { PropsWithChildren } from 'react'
import { Provider } from 'react-redux'
import { MemoryRouter } from 'react-router-dom'
import { I18nContext } from 'twake-i18n'
interface ExtendedRenderOptions extends Omit<RenderOptions, 'queries'> {
preloadedState?: Partial<RootState>
store?: AppStore
}
export function renderWithProviders(
ui: React.ReactElement,
preloadedState = {},
extendedRenderOptions: ExtendedRenderOptions = {}
) {
const { store = setupStore(preloadedState), ...renderOptions } =
extendedRenderOptions
const Wrapper = ({ children }: PropsWithChildren) => {
return (
<TwakeMuiThemeProvider>
<I18nContext.Provider
value={{
t: (key: string, vars?: Record<string, string>) => {
if (key === 'locale') {
return 'en'
}
if (vars) {
const params = Object.entries(vars)
.map(([k, v]) => `${k}=${v}`)
.join(',')
return `${key}(${params})`
}
return key
},
f: (date: Date, formatStr: string) => date.toString(),
lang: 'en'
}}
>
<MemoryRouter initialEntries={['/']}>
<Provider store={store}>{children}</Provider>
</MemoryRouter>
</I18nContext.Provider>
</TwakeMuiThemeProvider>
)
}
return {
store,
...render(ui, { wrapper: Wrapper, ...renderOptions })
}
}