render-with-context.tsx 1.2 KB

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