Skip to content

Commit 5e963dd

Browse files
authored
Block Editor: Improve MediaReplaceFlow tests (#45424)
* Block Editor: Use screen queries in MediaReplaceFlow tests * Block Editor: Explicitly render in each test * Block Editor: Use user-event instead of fireEvent * Block Editor: Remove boilerplate variables * Block Editor: Improve query specificity
1 parent 4815a5a commit 5e963dd

File tree

1 file changed

+69
-51
lines changed
  • packages/block-editor/src/components/media-replace-flow/test

1 file changed

+69
-51
lines changed
Lines changed: 69 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
/**
22
* External dependencies
33
*/
4-
import { render, fireEvent } from '@testing-library/react';
4+
import { render, screen } from '@testing-library/react';
5+
import userEvent from '@testing-library/user-event';
56

67
/**
78
* WordPress dependencies
@@ -31,80 +32,97 @@ function TestWrapper() {
3132
);
3233
}
3334

34-
function setUpMediaReplaceFlow() {
35-
const { container } = render( <TestWrapper /> );
36-
return container;
37-
}
38-
3935
describe( 'General media replace flow', () => {
4036
it( 'renders successfully', () => {
41-
const container = setUpMediaReplaceFlow();
42-
43-
const mediaReplaceButton = container.querySelector(
44-
'button[aria-expanded="false"]'
45-
);
46-
47-
expect( mediaReplaceButton ).not.toBeNull();
37+
render( <TestWrapper /> );
38+
39+
expect(
40+
screen.getByRole( 'button', {
41+
expanded: false,
42+
name: 'Replace',
43+
} )
44+
).toBeVisible();
4845
} );
4946

50-
it( 'renders replace menu', () => {
51-
const container = setUpMediaReplaceFlow();
47+
it( 'renders replace menu', async () => {
48+
const user = userEvent.setup( {
49+
advanceTimers: jest.advanceTimersByTime,
50+
} );
5251

53-
const mediaReplaceButton = container.querySelector(
54-
'button[aria-expanded="false"]'
55-
);
56-
mediaReplaceButton.click();
52+
render( <TestWrapper /> );
5753

58-
const uploadMenu = container.querySelector(
59-
'.block-editor-media-replace-flow__media-upload-menu'
54+
await user.click(
55+
screen.getByRole( 'button', {
56+
expanded: false,
57+
name: 'Replace',
58+
} )
6059
);
6160

62-
expect( uploadMenu ).not.toBeNull();
61+
const uploadMenu = screen.getByRole( 'menu' );
62+
63+
expect( uploadMenu ).toBeInTheDocument();
64+
expect( uploadMenu ).not.toBeVisible();
6365
} );
6466

65-
it( 'displays media URL', () => {
66-
const container = setUpMediaReplaceFlow();
67+
it( 'displays media URL', async () => {
68+
const user = userEvent.setup( {
69+
advanceTimers: jest.advanceTimersByTime,
70+
} );
6771

68-
const mediaReplaceButton = container.querySelector(
69-
'button[aria-expanded="false"]'
70-
);
71-
mediaReplaceButton.click();
72+
render( <TestWrapper /> );
7273

73-
const mediaURL = container.querySelector( '.components-external-link' );
74+
await user.click(
75+
screen.getByRole( 'button', {
76+
expanded: false,
77+
name: 'Replace',
78+
} )
79+
);
7480

75-
expect( mediaURL.href ).toEqual( 'https://example.media/' );
81+
expect(
82+
screen.getByRole( 'link', {
83+
name: 'example.media (opens in a new tab)',
84+
} )
85+
).toHaveAttribute( 'href', 'https://example.media' );
7686
} );
7787

78-
it( 'edits media URL', () => {
79-
const container = setUpMediaReplaceFlow();
88+
it( 'edits media URL', async () => {
89+
const user = userEvent.setup( {
90+
advanceTimers: jest.advanceTimersByTime,
91+
} );
8092

81-
const mediaReplaceButton = container.querySelector(
82-
'button[aria-expanded="false"]'
83-
);
84-
mediaReplaceButton.click();
93+
render( <TestWrapper /> );
8594

86-
const editMediaURL = container.querySelector(
87-
'.block-editor-link-control__search-item-action'
95+
await user.click(
96+
screen.getByRole( 'button', {
97+
expanded: false,
98+
name: 'Replace',
99+
} )
88100
);
89101

90-
editMediaURL.click();
91-
92-
const mediaURLInput = container.querySelector(
93-
'.block-editor-url-input__input'
102+
await user.click(
103+
screen.getByRole( 'button', {
104+
name: 'Edit',
105+
} )
94106
);
95107

96-
fireEvent.change( mediaURLInput, {
97-
target: { value: 'https://new.example.media' },
108+
const mediaURLInput = screen.getByRole( 'combobox', {
109+
name: 'URL',
110+
expanded: false,
98111
} );
99112

100-
const saveMediaURLButton = container.querySelector(
101-
'.block-editor-link-control__search-submit'
102-
);
103-
104-
saveMediaURLButton.click();
113+
await user.clear( mediaURLInput );
114+
await user.type( mediaURLInput, 'https://new.example.media' );
105115

106-
const mediaURL = container.querySelector( '.components-external-link' );
116+
await user.click(
117+
screen.getByRole( 'button', {
118+
name: 'Submit',
119+
} )
120+
);
107121

108-
expect( mediaURL.href ).toEqual( 'https://new.example.media/' );
122+
expect(
123+
screen.getByRole( 'link', {
124+
name: 'new.example.media (opens in a new tab)',
125+
} )
126+
).toHaveAttribute( 'href', 'https://new.example.media' );
109127
} );
110128
} );

0 commit comments

Comments
 (0)