|
1 | 1 | /**
|
2 | 2 | * External dependencies
|
3 | 3 | */
|
4 |
| -import { render, fireEvent } from '@testing-library/react'; |
| 4 | +import { render, screen } from '@testing-library/react'; |
| 5 | +import userEvent from '@testing-library/user-event'; |
5 | 6 |
|
6 | 7 | /**
|
7 | 8 | * WordPress dependencies
|
@@ -31,80 +32,97 @@ function TestWrapper() {
|
31 | 32 | );
|
32 | 33 | }
|
33 | 34 |
|
34 |
| -function setUpMediaReplaceFlow() { |
35 |
| - const { container } = render( <TestWrapper /> ); |
36 |
| - return container; |
37 |
| -} |
38 |
| - |
39 | 35 | describe( 'General media replace flow', () => {
|
40 | 36 | 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(); |
48 | 45 | } );
|
49 | 46 |
|
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 | + } ); |
52 | 51 |
|
53 |
| - const mediaReplaceButton = container.querySelector( |
54 |
| - 'button[aria-expanded="false"]' |
55 |
| - ); |
56 |
| - mediaReplaceButton.click(); |
| 52 | + render( <TestWrapper /> ); |
57 | 53 |
|
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 | + } ) |
60 | 59 | );
|
61 | 60 |
|
62 |
| - expect( uploadMenu ).not.toBeNull(); |
| 61 | + const uploadMenu = screen.getByRole( 'menu' ); |
| 62 | + |
| 63 | + expect( uploadMenu ).toBeInTheDocument(); |
| 64 | + expect( uploadMenu ).not.toBeVisible(); |
63 | 65 | } );
|
64 | 66 |
|
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 | + } ); |
67 | 71 |
|
68 |
| - const mediaReplaceButton = container.querySelector( |
69 |
| - 'button[aria-expanded="false"]' |
70 |
| - ); |
71 |
| - mediaReplaceButton.click(); |
| 72 | + render( <TestWrapper /> ); |
72 | 73 |
|
73 |
| - const mediaURL = container.querySelector( '.components-external-link' ); |
| 74 | + await user.click( |
| 75 | + screen.getByRole( 'button', { |
| 76 | + expanded: false, |
| 77 | + name: 'Replace', |
| 78 | + } ) |
| 79 | + ); |
74 | 80 |
|
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' ); |
76 | 86 | } );
|
77 | 87 |
|
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 | + } ); |
80 | 92 |
|
81 |
| - const mediaReplaceButton = container.querySelector( |
82 |
| - 'button[aria-expanded="false"]' |
83 |
| - ); |
84 |
| - mediaReplaceButton.click(); |
| 93 | + render( <TestWrapper /> ); |
85 | 94 |
|
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 | + } ) |
88 | 100 | );
|
89 | 101 |
|
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 | + } ) |
94 | 106 | );
|
95 | 107 |
|
96 |
| - fireEvent.change( mediaURLInput, { |
97 |
| - target: { value: 'https://new.example.media' }, |
| 108 | + const mediaURLInput = screen.getByRole( 'combobox', { |
| 109 | + name: 'URL', |
| 110 | + expanded: false, |
98 | 111 | } );
|
99 | 112 |
|
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' ); |
105 | 115 |
|
106 |
| - const mediaURL = container.querySelector( '.components-external-link' ); |
| 116 | + await user.click( |
| 117 | + screen.getByRole( 'button', { |
| 118 | + name: 'Submit', |
| 119 | + } ) |
| 120 | + ); |
107 | 121 |
|
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' ); |
109 | 127 | } );
|
110 | 128 | } );
|
0 commit comments