render-with-context.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. type Options = {
  10. projects?: Project[]
  11. }
  12. export function renderWithProjectListContext(
  13. component: React.ReactElement,
  14. options: Options = {}
  15. ) {
  16. let { projects } = options
  17. if (!projects) {
  18. projects = projectsData
  19. }
  20. fetchMock.post('express:/api/project', {
  21. status: 200,
  22. body: { projects, totalSize: projects.length },
  23. })
  24. fetchMock.get('express:/system/messages', {
  25. status: 200,
  26. body: [],
  27. })
  28. const ProjectListProviderWrapper = ({
  29. children,
  30. }: {
  31. children: React.ReactNode
  32. }) => (
  33. <ProjectListProvider>
  34. <SplitTestProvider>
  35. <ColorPickerProvider>{children}</ColorPickerProvider>
  36. </SplitTestProvider>
  37. </ProjectListProvider>
  38. )
  39. return render(component, {
  40. wrapper: ProjectListProviderWrapper,
  41. })
  42. }
  43. export function resetProjectListContextFetch() {
  44. fetchMock.reset()
  45. }