diff --git a/webpack/assets/javascripts/react_app/components/ConfigReports/DiffModal/__tests__/DiffModal.test.js b/webpack/assets/javascripts/react_app/components/ConfigReports/DiffModal/__tests__/DiffModal.test.js index 1aae849a671..b7f867a1240 100644 --- a/webpack/assets/javascripts/react_app/components/ConfigReports/DiffModal/__tests__/DiffModal.test.js +++ b/webpack/assets/javascripts/react_app/components/ConfigReports/DiffModal/__tests__/DiffModal.test.js @@ -15,7 +15,7 @@ const fixtures = { changeViewType: changeState, }, }; -configure({ testIdAttribute: 'data-ouia-component-id'}) +configure({ testIdAttribute: 'data-ouia-component-id' }); describe('DiffModal', () => { describe('rendering', () => { diff --git a/webpack/assets/javascripts/react_app/components/DiffView/Diff.fixtures.js b/webpack/assets/javascripts/react_app/components/DiffView/Diff.fixtures.js index f93ffe96478..fe2f00f96d5 100644 --- a/webpack/assets/javascripts/react_app/components/DiffView/Diff.fixtures.js +++ b/webpack/assets/javascripts/react_app/components/DiffView/Diff.fixtures.js @@ -30,8 +30,8 @@ export const patchMock = { }; export const fixtures = { - 'render DiffView w/oldText & newText': diffMock, - 'render DiffView w/Patch': patchMock, + diffMock, + patchMock, }; export const PF_SELECTED = 'pf-m-selected'; diff --git a/webpack/assets/javascripts/react_app/components/DiffView/DiffView.test.js b/webpack/assets/javascripts/react_app/components/DiffView/DiffView.test.js index bd01f933647..a2507bf4d59 100644 --- a/webpack/assets/javascripts/react_app/components/DiffView/DiffView.test.js +++ b/webpack/assets/javascripts/react_app/components/DiffView/DiffView.test.js @@ -1,9 +1,26 @@ +import React from 'react'; import { fixtures } from './Diff.fixtures'; -import { testComponentSnapshotsWithFixtures } from '../../common/testHelpers'; +import { render, screen } from '@testing-library/react'; +import '@testing-library/jest-dom/extend-expect'; import DiffView from './DiffView'; describe('DiffView', () => { - describe('rendering', () => - testComponentSnapshotsWithFixtures(DiffView, fixtures)); + describe('rendering', () => { + it('render DiffView w/oldText & newText', () => { + render() + const table = screen.getByRole('table') + + expect(table).toHaveClass("diff-split") + expect(screen.getByText('hello there friend')).toBeInTheDocument() + }) + + it('render DiffView w/Patch', () => { + render() + const table = screen.getByRole('table') + + expect(table).toHaveClass("diff-unified") + expect(screen.getByText('fooo')).toBeInTheDocument() + }) + }) }); diff --git a/webpack/assets/javascripts/react_app/components/DiffView/__snapshots__/DiffView.test.js.snap b/webpack/assets/javascripts/react_app/components/DiffView/__snapshots__/DiffView.test.js.snap deleted file mode 100644 index 84dc24525dc..00000000000 --- a/webpack/assets/javascripts/react_app/components/DiffView/__snapshots__/DiffView.test.js.snap +++ /dev/null @@ -1,90 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`DiffView rendering render DiffView w/Patch 1`] = ` -
- -
-`; - -exports[`DiffView rendering render DiffView w/oldText & newText 1`] = ` - -`; diff --git a/webpack/assets/javascripts/react_app/components/DiffView/diffview.scss b/webpack/assets/javascripts/react_app/components/DiffView/diffview.scss index e12c314ae9f..9609ce3bcaa 100644 --- a/webpack/assets/javascripts/react_app/components/DiffView/diffview.scss +++ b/webpack/assets/javascripts/react_app/components/DiffView/diffview.scss @@ -1,6 +1,4 @@ #diff-toggle-buttons { - margin-bottom: 5px; - .diff-button { text-transform: capitalize; } diff --git a/webpack/assets/javascripts/react_app/components/Editor/Editor.js b/webpack/assets/javascripts/react_app/components/Editor/Editor.js index cca90d77ab4..31f648ef7c4 100644 --- a/webpack/assets/javascripts/react_app/components/Editor/Editor.js +++ b/webpack/assets/javascripts/react_app/components/Editor/Editor.js @@ -1,7 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Alert, AlertActionCloseButton } from '@patternfly/react-core'; - import { noop } from '../../common/helpers'; import DiffView from '../DiffView/DiffView'; import EditorView from './components/EditorView'; @@ -11,6 +10,7 @@ import { EDITOR_THEMES, EDITOR_KEYBINDINGS, EDITOR_MODES, + EDITOR_TAB_NAMES, } from './EditorConstants'; import './editor.scss'; @@ -185,19 +185,19 @@ class Editor extends React.Component { {...editorViewProps} key="editorPreview" name={editorNameTab.preview} - isSelected={selectedView === 'preview'} + isSelected={selectedView === EDITOR_TAB_NAMES.preview} className="ace_editor_form ace_preview" />
({ }); const fixtures = { - 'renders editor': editorOptions, + renders: editorOptions, }; +const renderEditor = (props = fixtures.renders) => render(); + describe('Editor', () => { - jest.useFakeTimers(); - describe('rendering', () => - testComponentSnapshotsWithFixtures(Editor, fixtures)); + describe('rendering', () => { + const getAceEditors = () => screen.getAllByRole('textbox', { name: 'Cursor at row 1' }) + + it('renders', () => { + renderEditor(); + + expect(screen.getByText('')).toBeInTheDocument(); + expect(getAceEditors().length).toBe(2); + }); + it('re-renders', () => { + const { rerender } = renderEditor(); + const props = { ...editorOptions, ...didMountStubs() }; + rerender(); + expect(getAceEditors().length).toBe(2); + }); + }); describe('triggering', () => { + const getTabById = id => + screen.getAllByRole('presentation', { current: "page" }) + .find(tab => (tab.getAttribute('id') || '').match(id)); + it('should trigger input view', async () => { const props = { ...editorOptions, ...didMountStubs() }; - const component = mount(); - await act(async () => jest.advanceTimersByTime(1000)); - expect( - component - .find('li[role="presentation"]') - .at(0) - .hasClass('active') - ).toBe(true); + renderEditor(props); + const inputTab = getTabById('input-navitem'); + + expect(inputTab).toBeInTheDocument(); + expect(inputTab.parentElement).toHaveClass('pf-m-current'); + expect(inputTab).toHaveTextContent('Editor'); }); it('should trigger input view with no template', async () => { const props = { @@ -40,9 +57,11 @@ describe('Editor', () => { ...didMountStubs(), data: { ...editorOptions.data, template: null }, }; - const component = mount(); - await act(async () => jest.advanceTimersByTime(1000)); - expect(component.props().template).toBe(''); + renderEditor(props); + const aceEditors = document.querySelectorAll('.ace_editor_form'); + const hasTemplateText = Array.from(aceEditors).some(container => container.textContent.includes('')); + + expect(hasTemplateText).toBe(false); }); it('should trigger diff view', async () => { const props = { @@ -50,14 +69,12 @@ describe('Editor', () => { ...didMountStubs(), selectedView: 'diff', }; - const component = mount(); - await act(async () => jest.advanceTimersByTime(1000)); - expect( - component - .find('li[role="presentation"]') - .at(1) - .hasClass('active') - ).toBe(true); + renderEditor(props); + const diffTab = getTabById('diff-navitem'); + + expect(diffTab).toBeInTheDocument(); + expect(diffTab.parentElement).toHaveClass('pf-m-current'); + expect(diffTab).toHaveTextContent('Changes'); }); it('should trigger preview view', async () => { const props = { @@ -66,18 +83,14 @@ describe('Editor', () => { selectedView: 'preview', isRendering: true, }; - const wrapper = mount(); - wrapper.find('button.close').simulate('click'); - await act(async () => jest.advanceTimersByTime(1000)); - const component = mount(); - await act(async () => jest.advanceTimersByTime(1000)); - - expect( - component - .find('li[role="presentation"]') - .at(2) - .hasClass('active') - ).toBe(true); + renderEditor(props); + const closeButton = screen.queryByLabelText(/close danger alert/i); + + if (closeButton) await act(async () => await fireEvent.click(closeButton)); + const previewTab = getTabById('preview-navitem'); + + expect(previewTab).toBeInTheDocument(); + expect(previewTab.parentElement).toHaveClass('pf-m-current'); }); }); it('should trigger hidden value editor', async () => { @@ -88,20 +101,29 @@ describe('Editor', () => { isRendering: true, isMasked: true, }; - const wrapper = mount(); - await act(async () => jest.advanceTimersByTime(1000)); - expect(wrapper.find('.mask-editor').exists()).toBe(true); + renderEditor(props); + const maskedEditor = document.querySelector('.mask-editor'); + + expect(maskedEditor).toBeInTheDocument(); }); it('textarea disappears if readOnly', async () => { + const getTextAreasHidden = () => document.querySelectorAll('textarea.hidden') const props = { ...editorOptions, ...didMountStubs(), selectedView: 'input', + readOnly: false, }; - const wrapper = mount(); - await act(async () => jest.advanceTimersByTime(1000)); - expect(wrapper.find('textarea.hidden').exists()).toBe(true); - wrapper.setProps({ readOnly: true }); - expect(wrapper.find('textarea.hidden').exists()).toBe(false); + const { rerender } = renderEditor(props); + + expect(getTextAreasHidden().length).toBe(1); + + const newProps = { + ...props, + readOnly: true, + }; + rerender(); + + expect(getTextAreasHidden().length).toBe(0); }); }); diff --git a/webpack/assets/javascripts/react_app/components/Editor/__tests__/__snapshots__/Editor.test.js.snap b/webpack/assets/javascripts/react_app/components/Editor/__tests__/__snapshots__/Editor.test.js.snap deleted file mode 100644 index 0aeefe79f77..00000000000 --- a/webpack/assets/javascripts/react_app/components/Editor/__tests__/__snapshots__/Editor.test.js.snap +++ /dev/null @@ -1,176 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Editor rendering renders editor 1`] = ` -
- - } - className="" - id="preview_error_toast" - ouiaId="preview_error_toast" - title="" - variant="danger" - /> - - - -
- -
- -