New.spec.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import React from 'react';
  2. import { create, act as rendererAct } from 'react-test-renderer';
  3. import { mount, ReactWrapper } from 'enzyme';
  4. import { act } from 'react-dom/test-utils';
  5. import { containerRendersView, TestRouterWrapper } from 'lib/testHelpers';
  6. import {
  7. clusterConnectConnectorPath,
  8. clusterConnectorNewPath,
  9. } from 'lib/paths';
  10. import NewContainer from 'components/Connect/New/NewContainer';
  11. import New, { NewProps } from 'components/Connect/New/New';
  12. import { connects, connector } from 'redux/reducers/connect/__test__/fixtures';
  13. jest.mock('components/common/PageLoader/PageLoader', () => 'mock-PageLoader');
  14. jest.mock('components/common/JSONEditor/JSONEditor', () => 'mock-JSONEditor');
  15. const mockHistoryPush = jest.fn();
  16. jest.mock('react-router-dom', () => ({
  17. ...jest.requireActual('react-router-dom'),
  18. useHistory: () => ({
  19. push: mockHistoryPush,
  20. }),
  21. }));
  22. describe('New', () => {
  23. containerRendersView(<NewContainer />, New);
  24. describe('view', () => {
  25. const pathname = clusterConnectorNewPath(':clusterName');
  26. const clusterName = 'my-cluster';
  27. const simulateFormSubmit = (wrapper: ReactWrapper) =>
  28. act(async () => {
  29. wrapper.find('input[name="name"]').simulate('change', {
  30. target: { name: 'name', value: 'my-connector' },
  31. });
  32. wrapper
  33. .find('mock-JSONEditor')
  34. .simulate('change', { target: { value: '{"class":"MyClass"}' } });
  35. wrapper.find('input[type="submit"]').simulate('submit');
  36. });
  37. const setupWrapper = (props: Partial<NewProps> = {}) => (
  38. <TestRouterWrapper pathname={pathname} urlParams={{ clusterName }}>
  39. <New
  40. fetchConnects={jest.fn()}
  41. areConnectsFetching={false}
  42. connects={connects}
  43. createConnector={jest.fn()}
  44. {...props}
  45. />
  46. </TestRouterWrapper>
  47. );
  48. it('matches snapshot', async () => {
  49. let wrapper = create(<div />);
  50. await rendererAct(async () => {
  51. wrapper = create(setupWrapper());
  52. });
  53. expect(wrapper.toJSON()).toMatchSnapshot();
  54. });
  55. it('matches snapshot when fetching connects', async () => {
  56. let wrapper = create(<div />);
  57. await rendererAct(async () => {
  58. wrapper = create(setupWrapper({ areConnectsFetching: true }));
  59. });
  60. expect(wrapper.toJSON()).toMatchSnapshot();
  61. });
  62. it('fetches connects on mount', async () => {
  63. const fetchConnects = jest.fn();
  64. await act(async () => {
  65. mount(setupWrapper({ fetchConnects }));
  66. });
  67. expect(fetchConnects).toHaveBeenCalledTimes(1);
  68. expect(fetchConnects).toHaveBeenCalledWith(clusterName);
  69. });
  70. it('calls createConnector on form submit', async () => {
  71. const createConnector = jest.fn();
  72. const wrapper = mount(setupWrapper({ createConnector }));
  73. await simulateFormSubmit(wrapper);
  74. expect(createConnector).toHaveBeenCalledTimes(1);
  75. expect(createConnector).toHaveBeenCalledWith(
  76. clusterName,
  77. connects[0].name,
  78. {
  79. name: 'my-connector',
  80. config: { class: 'MyClass' },
  81. }
  82. );
  83. });
  84. it('redirects to connector details view on successful submit', async () => {
  85. const createConnector = jest.fn().mockResolvedValue(connector);
  86. const wrapper = mount(setupWrapper({ createConnector }));
  87. await simulateFormSubmit(wrapper);
  88. expect(mockHistoryPush).toHaveBeenCalledTimes(1);
  89. expect(mockHistoryPush).toHaveBeenCalledWith(
  90. clusterConnectConnectorPath(
  91. clusterName,
  92. connects[0].name,
  93. connector.name
  94. )
  95. );
  96. });
  97. it('does not redirect to connector details view on unsuccessful submit', async () => {
  98. const createConnector = jest.fn().mockResolvedValueOnce(undefined);
  99. const wrapper = mount(setupWrapper({ createConnector }));
  100. await simulateFormSubmit(wrapper);
  101. expect(mockHistoryPush).not.toHaveBeenCalled();
  102. });
  103. });
  104. });