render-with-context.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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.project_id = projectId != null ? projectId : window.project_id
  15. window._ide = {
  16. $scope: {
  17. project: {
  18. owner: {
  19. _id: '124abd'
  20. }
  21. },
  22. ui: {
  23. chatOpen: true,
  24. pdfLayout: 'flat'
  25. },
  26. $watch: () => {}
  27. },
  28. socket: {
  29. on: sinon.stub(),
  30. removeListener: sinon.stub()
  31. }
  32. }
  33. return render(
  34. <ApplicationProvider>
  35. <EditorProvider ide={window._ide} settings={{}}>
  36. <LayoutProvider $scope={window._ide.$scope}>{children}</LayoutProvider>
  37. </EditorProvider>
  38. </ApplicationProvider>
  39. )
  40. }
  41. export function renderWithChatContext(children, { user, projectId } = {}) {
  42. return renderWithEditorContext(<ChatProvider>{children}</ChatProvider>, {
  43. user,
  44. projectId
  45. })
  46. }
  47. export function cleanUpContext() {
  48. delete window.user
  49. delete window.project_id
  50. delete window._ide
  51. }