render-with-context.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React from 'react'
  2. import { render } from '@testing-library/react'
  3. import { ApplicationProvider } from '../../../frontend/js/shared/context/application-context'
  4. import { EditorProvider } from '../../../frontend/js/shared/context/editor-context'
  5. import sinon from 'sinon'
  6. import { ChatProvider } from '../../../frontend/js/features/chat/context/chat-context'
  7. import { LayoutProvider } from '../../../frontend/js/shared/context/layout-context'
  8. export function renderWithEditorContext(
  9. children,
  10. { user = { id: '123abd' }, projectId = 'project123' } = {}
  11. ) {
  12. window.user = user || window.user
  13. window.ExposedSettings.appName = 'test'
  14. window.gitBridgePublicBaseUrl = 'git.overleaf.test'
  15. window.project_id = projectId != null ? projectId : window.project_id
  16. window._ide = {
  17. $scope: {
  18. project: {
  19. owner: {
  20. _id: '124abd'
  21. }
  22. },
  23. ui: {
  24. chatOpen: true,
  25. pdfLayout: 'flat'
  26. },
  27. $watch: () => {}
  28. },
  29. socket: {
  30. on: sinon.stub(),
  31. removeListener: sinon.stub()
  32. }
  33. }
  34. return render(
  35. <ApplicationProvider>
  36. <EditorProvider ide={window._ide} settings={{}}>
  37. <LayoutProvider $scope={window._ide.$scope}>{children}</LayoutProvider>
  38. </EditorProvider>
  39. </ApplicationProvider>
  40. )
  41. }
  42. export function renderWithChatContext(children, { user, projectId } = {}) {
  43. return renderWithEditorContext(<ChatProvider>{children}</ChatProvider>, {
  44. user,
  45. projectId
  46. })
  47. }
  48. export function cleanUpContext() {
  49. delete window.user
  50. delete window.project_id
  51. delete window._ide
  52. }