From c1aba277c570e7976444d2fe44513e83c9894738 Mon Sep 17 00:00:00 2001 From: stanislavh Date: Thu, 29 Jun 2023 10:02:52 +0200 Subject: [PATCH] [NO-JIRA] Migrate Extension test to RTL --- .../app/components/extensions/Extension.tsx | 2 +- .../extensions/__tests__/Extension-test.tsx | 82 +- .../__snapshots__/Extension-test.tsx.snap | 5087 ----------------- 3 files changed, 23 insertions(+), 5148 deletions(-) delete mode 100644 server/sonar-web/src/main/js/app/components/extensions/__tests__/__snapshots__/Extension-test.tsx.snap diff --git a/server/sonar-web/src/main/js/app/components/extensions/Extension.tsx b/server/sonar-web/src/main/js/app/components/extensions/Extension.tsx index 8f628ee6ebe..8f40bc13306 100644 --- a/server/sonar-web/src/main/js/app/components/extensions/Extension.tsx +++ b/server/sonar-web/src/main/js/app/components/extensions/Extension.tsx @@ -51,7 +51,7 @@ interface State { extensionElement?: React.ReactElement; } -export class Extension extends React.PureComponent { +class Extension extends React.PureComponent { container?: HTMLElement | null; stop?: Function; state: State = {}; diff --git a/server/sonar-web/src/main/js/app/components/extensions/__tests__/Extension-test.tsx b/server/sonar-web/src/main/js/app/components/extensions/__tests__/Extension-test.tsx index 6ba5fe25715..3c9d4d6abd5 100644 --- a/server/sonar-web/src/main/js/app/components/extensions/__tests__/Extension-test.tsx +++ b/server/sonar-web/src/main/js/app/components/extensions/__tests__/Extension-test.tsx @@ -17,90 +17,52 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +import { screen } from '@testing-library/react'; import { lightTheme } from 'design-system'; -import { mount } from 'enzyme'; import * as React from 'react'; -import { IntlShape } from 'react-intl'; import { getExtensionStart } from '../../../../helpers/extensions'; -import { - mockAppState, - mockCurrentUser, - mockLocation, - mockRouter, -} from '../../../../helpers/testMocks'; -import { waitAndUpdate } from '../../../../helpers/testUtils'; -import { Extension } from '../Extension'; +import { renderComponent } from '../../../../helpers/testReactTestingUtils'; +import Extension from '../Extension'; jest.mock('../../../../helpers/extensions', () => ({ getExtensionStart: jest.fn().mockResolvedValue({}), })); -jest.mock('react-helmet-async', () => ({ - Helmet: () => null, -})); - beforeEach(() => { jest.clearAllMocks(); }); +const extensionView = ; + it('should render React extensions correctly', async () => { - const start = jest.fn().mockReturnValue(
); - (getExtensionStart as jest.Mock).mockResolvedValue(start); + const start = jest.fn().mockReturnValue(extensionView); + jest.mocked(getExtensionStart).mockResolvedValue(start); - const wrapper = shallowRender(); - expect(wrapper).toMatchSnapshot(); - expect(getExtensionStart).toHaveBeenCalledWith('foo'); - await waitAndUpdate(wrapper); + const { rerender } = renderExtension(); + expect(await screen.findByRole('button', { name: 'Extension' })).toBeInTheDocument(); expect(start).toHaveBeenCalled(); - expect(wrapper).toMatchSnapshot(); + + rerender(); + expect(screen.queryByRole('button', { name: 'Extension' })).not.toBeInTheDocument(); + expect(await screen.findByRole('button', { name: 'Extension' })).toBeInTheDocument(); }); it('should handle Function extensions correctly', async () => { const stop = jest.fn(); - const start = jest.fn(() => { - return stop; - }); - (getExtensionStart as jest.Mock).mockResolvedValue(start); + const start = jest.fn(() => stop); + jest.mocked(getExtensionStart).mockResolvedValue(start); - const wrapper = shallowRender(); - await waitAndUpdate(wrapper); + const { rerender } = renderExtension(); + await new Promise(setImmediate); expect(start).toHaveBeenCalled(); - wrapper.setProps({ extension: { key: 'bar', name: 'Bar' } }); - await waitAndUpdate(wrapper); - expect(stop).toHaveBeenCalled(); -}); + rerender(); -it('should unmount an extension before starting a new one', async () => { - const reactExtension = jest.fn().mockReturnValue(
); - (getExtensionStart as jest.Mock).mockResolvedValue(reactExtension); - - const wrapper = shallowRender(); - await waitAndUpdate(wrapper); - expect(wrapper.state('extensionElement')).not.toBeUndefined(); - - const start = jest.fn(); - (getExtensionStart as jest.Mock).mockResolvedValue(start); - - wrapper.setProps({ extension: { key: 'bar', name: 'Bar' } }); - await waitAndUpdate(wrapper); - expect(wrapper.state('extensionElement')).toBeUndefined(); - expect(start).toHaveBeenCalled(); + expect(stop).toHaveBeenCalled(); }); -function shallowRender(props: Partial = {}) { - // We need to mount, as we rely on refs. - return mount( - +function renderExtension(props: Partial = {}) { + return renderComponent( + ); } diff --git a/server/sonar-web/src/main/js/app/components/extensions/__tests__/__snapshots__/Extension-test.tsx.snap b/server/sonar-web/src/main/js/app/components/extensions/__tests__/__snapshots__/Extension-test.tsx.snap deleted file mode 100644 index 9c24a786e89..00000000000 --- a/server/sonar-web/src/main/js/app/components/extensions/__tests__/__snapshots__/Extension-test.tsx.snap +++ /dev/null @@ -1,5087 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`should render React extensions correctly 1`] = ` - -
- -
-
- -`; - -exports[`should render React extensions correctly 2`] = ` - -
- -
-
- -`; -- 2.39.5