render-with-context.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { render } from '@testing-library/react'
  2. import fetchMock from 'fetch-mock'
  3. import React from 'react'
  4. import { ColorPickerProvider } from '../../../../../frontend/js/features/project-list/context/color-picker-context'
  5. import { ProjectListProvider } from '../../../../../frontend/js/features/project-list/context/project-list-context'
  6. import { Project } from '../../../../../types/project/dashboard/api'
  7. import { projectsData } from '../fixtures/projects-data'
  8. import { SplitTestProvider } from '@/shared/context/split-test-context'
  9. import { UserProvider } from '@/shared/context/user-context'
  10. type Options = {
  11. projects?: Project[]
  12. }
  13. export function renderWithProjectListContext(
  14. component: React.ReactElement,
  15. options: Options = {}
  16. ) {
  17. let { projects } = options
  18. if (!projects) {
  19. projects = projectsData
  20. }
  21. fetchMock.post('express:/api/project', {
  22. status: 200,
  23. body: { projects, totalSize: projects.length },
  24. })
  25. fetchMock.get('express:/system/messages', {
  26. status: 200,
  27. body: [],
  28. })
  29. window.metaAttributesCache.set('ol-user', {
  30. id: 'fake_user',
  31. first_name: 'fake_user_first_name',
  32. email: 'fake@example.com',
  33. })
  34. const ProjectListProviderWrapper = ({
  35. children,
  36. }: {
  37. children: React.ReactNode
  38. }) => (
  39. <UserProvider>
  40. <ProjectListProvider>
  41. <SplitTestProvider>
  42. <ColorPickerProvider>{children}</ColorPickerProvider>
  43. </SplitTestProvider>
  44. </ProjectListProvider>
  45. </UserProvider>
  46. )
  47. return render(component, {
  48. wrapper: ProjectListProviderWrapper,
  49. })
  50. }
  51. export function resetProjectListContextFetch() {
  52. fetchMock.removeRoutes().clearHistory()
  53. }