test_helpers.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import PropTypes from 'prop-types';
  2. import type { PropsWithChildren } from 'react';
  3. import { Component } from 'react';
  4. import { IntlProvider } from 'react-intl';
  5. import { MemoryRouter } from 'react-router';
  6. // eslint-disable-next-line import/no-extraneous-dependencies
  7. import { render as rtlRender } from '@testing-library/react';
  8. class FakeIdentityWrapper extends Component<
  9. PropsWithChildren<{ signedIn: boolean }>
  10. > {
  11. static childContextTypes = {
  12. identity: PropTypes.shape({
  13. signedIn: PropTypes.bool.isRequired,
  14. accountId: PropTypes.string,
  15. disabledAccountId: PropTypes.string,
  16. accessToken: PropTypes.string,
  17. }).isRequired,
  18. };
  19. getChildContext() {
  20. return {
  21. identity: {
  22. signedIn: this.props.signedIn,
  23. accountId: '123',
  24. accessToken: 'test-access-token',
  25. },
  26. };
  27. }
  28. render() {
  29. return this.props.children;
  30. }
  31. }
  32. function render(
  33. ui: React.ReactElement,
  34. { locale = 'en', signedIn = true, ...renderOptions } = {},
  35. ) {
  36. const Wrapper = (props: { children: React.ReactElement }) => {
  37. return (
  38. <MemoryRouter>
  39. <IntlProvider locale={locale}>
  40. <FakeIdentityWrapper signedIn={signedIn}>
  41. {props.children}
  42. </FakeIdentityWrapper>
  43. </IntlProvider>
  44. </MemoryRouter>
  45. );
  46. };
  47. return rtlRender(ui, { wrapper: Wrapper, ...renderOptions });
  48. }
  49. // re-export everything
  50. // eslint-disable-next-line import/no-extraneous-dependencies
  51. export * from '@testing-library/react';
  52. // override render method
  53. export { render };