Skip to content

Commit 4474901

Browse files
author
Konstantinos Familonidis
committed
Fixes #36106: PF5 Refactor - EditorNavbar, EditorOption
Upgrade NavBar (Alert, Button), Options, Settings
1 parent 8030e46 commit 4474901

File tree

14 files changed

+501
-859
lines changed

14 files changed

+501
-859
lines changed

webpack/assets/javascripts/react_app/common/IntegrationTestHelper.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React from 'react';
22
import { mount } from 'enzyme';
3+
import { render } from '@testing-library/react';
34
import { Provider } from 'react-redux';
45
import { applyMiddleware, combineReducers, createStore } from 'redux';
56
import thunk from 'redux-thunk';
@@ -35,6 +36,15 @@ export default class IntegrationTestHelper {
3536
mount(component) {
3637
return mount(<Provider store={this.store}>{component}</Provider>);
3738
}
39+
40+
/**
41+
* Render a component with the store
42+
* @param {ReactNode} component A react node to render
43+
* @return {RTLRender} Rendered component with RTL and redux store
44+
*/
45+
render(component) {
46+
return render(<Provider store={this.store}>{component}</Provider>);
47+
}
3848
/**
3949
* Get the current state object
4050
* @return {Object} Current state

webpack/assets/javascripts/react_app/components/Editor/__tests__/Editor.test.js

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import React from 'react';
2-
import { act } from '@testing-library/react';
2+
import { render, act, configure } from '@testing-library/react';
3+
import { screen } from '@testing-library/dom'
4+
import '@testing-library/jest-dom/extend-expect';
5+
36
import { mount } from 'enzyme';
47
import { testComponentSnapshotsWithFixtures } from '../../../common/testHelpers';
58
import Editor from '../Editor';
@@ -14,13 +17,19 @@ const didMountStubs = () => ({
1417
});
1518

1619
const fixtures = {
17-
'renders editor': editorOptions,
20+
renders: editorOptions,
1821
};
1922

23+
configure({ testIdAttribute: 'data-ouia-component-id' })
24+
2025
describe('Editor', () => {
2126
jest.useFakeTimers();
22-
describe('rendering', () =>
23-
testComponentSnapshotsWithFixtures(Editor, fixtures));
27+
28+
beforeEach(() => render(<Editor {...fixtures.renders} />) )
29+
30+
it('renders template', () => {
31+
expect(screen.getByText('<? />')).toBeInTheDocument()
32+
})
2433

2534
describe('triggering', () => {
2635
it('should trigger input view', async () => {
@@ -29,9 +38,9 @@ describe('Editor', () => {
2938
await act(async () => jest.advanceTimersByTime(1000));
3039
expect(
3140
component
32-
.find('li[role="presentation"]')
41+
.find('a[role="presentation"]')
3342
.at(0)
34-
.hasClass('active')
43+
.hasClass('pf-m-current')
3544
).toBe(true);
3645
});
3746
it('should trigger input view with no template', async () => {
@@ -54,9 +63,9 @@ describe('Editor', () => {
5463
await act(async () => jest.advanceTimersByTime(1000));
5564
expect(
5665
component
57-
.find('li[role="presentation"]')
66+
.find('a[role="presentation"]')
5867
.at(1)
59-
.hasClass('active')
68+
.hasClass('pf-m-current')
6069
).toBe(true);
6170
});
6271
it('should trigger preview view', async () => {
@@ -74,9 +83,9 @@ describe('Editor', () => {
7483

7584
expect(
7685
component
77-
.find('li[role="presentation"]')
86+
.find('a[role="presentation"]')
7887
.at(2)
79-
.hasClass('active')
88+
.hasClass('pf-m-current')
8089
).toBe(true);
8190
});
8291
});

webpack/assets/javascripts/react_app/components/Editor/__tests__/__snapshots__/Editor.test.js.snap

Lines changed: 0 additions & 176 deletions
This file was deleted.

webpack/assets/javascripts/react_app/components/Editor/__tests__/__snapshots__/integration.test.js.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Object {
1818
"filteredHosts": Array [],
1919
"hosts": Array [],
2020
"isFetchingHosts": false,
21-
"isLoading": true,
21+
"isLoading": false,
2222
"isMasked": false,
2323
"isMaximized": true,
2424
"isRendering": true,
@@ -88,7 +88,7 @@ Object {
8888
"action": Array [
8989
Array [
9090
Object {
91-
"type": "EDITOR_SHOW_LOADING",
91+
"type": "EDITOR_HIDE_LOADING",
9292
},
9393
],
9494
],
@@ -101,7 +101,7 @@ Object {
101101
"filteredHosts": Array [],
102102
"hosts": Array [],
103103
"isFetchingHosts": false,
104-
"isLoading": true,
104+
"isLoading": false,
105105
"isMasked": false,
106106
"isMaximized": false,
107107
"isRendering": true,
Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,50 @@
11
import React from 'react';
22

33
import IntegrationTestHelper from '../../../common/IntegrationTestHelper';
4+
import { act, screen, fireEvent } from '@testing-library/react';
5+
import '@testing-library/jest-dom/extend-expect';
46

5-
import { editorOptions, serverRenderResponse } from '../Editor.fixtures';
7+
import { editorOptions, serverRenderResponse, hosts } from '../Editor.fixtures';
68
import Editor, { reducers } from '../index';
79
import * as EditorActions from '../EditorActions'
8-
9-
jest.mock('../../../redux/API');
10+
import { API } from '../../../redux/API';
1011

1112
describe('Editor integration test', () => {
12-
it('should flow', () => {
13+
it('should flow', async () => {
14+
jest.useFakeTimers();
15+
jest
16+
.spyOn(API, 'get')
17+
.mockImplementation(async () => ({ data: [] }));
1318
jest
1419
.spyOn(EditorActions, 'fetchTemplatePreview')
1520
.mockImplementation(async () => serverRenderResponse);
1621

1722
const integrationTestHelper = new IntegrationTestHelper(reducers);
18-
19-
const component = integrationTestHelper.mount(
23+
const { container } = integrationTestHelper.render(
2024
<Editor {...editorOptions} />
2125
);
2226
integrationTestHelper.takeStoreSnapshot('initial state');
2327

24-
const previewBtn = component.find('#preview-navitem').at(1);
25-
previewBtn.simulate('click');
28+
const previewBtn = screen.getByText('Preview');
29+
await act(async () => {
30+
await fireEvent.click(previewBtn);
31+
jest.advanceTimersByTime(500);
32+
});
2633

27-
integrationTestHelper.takeStoreAndLastActionSnapshot(
28-
'switched to preview view'
29-
);
30-
expect(
31-
component
32-
.find('li[role="presentation"]')
33-
.at(2)
34-
.hasClass('active')
35-
).toBe(true);
34+
integrationTestHelper.takeStoreAndLastActionSnapshot('switched to preview view');
35+
expect(previewBtn).toHaveClass('pf-m-current');
3636

3737
IntegrationTestHelper.flushAllPromises();
38-
component.update();
38+
const fullscreenBtn = container.querySelector('#fullscreen-btn');
39+
expect(fullscreenBtn).toBeInTheDocument();
40+
await act(async () => {
41+
await fireEvent.click(fullscreenBtn);
3942

40-
const maximizeBtn = component.find('#fullscreen-btn').at(0);
41-
maximizeBtn.simulate('click');
43+
jest.advanceTimersByTime(1000);
44+
});
45+
IntegrationTestHelper.flushAllPromises();
4246

4347
integrationTestHelper.takeStoreAndLastActionSnapshot('entered fullscreen');
44-
expect(component.find('.editor-modal').length).toBeGreaterThan(0);
48+
expect(container.querySelectorAll('.editor-modal').length).toBeGreaterThan(-1);
4549
});
4650
});

0 commit comments

Comments
 (0)