Skip to content

Commit d24f6b4

Browse files
committed
Add unit tests for SiteScanSourcesList component
1 parent fd06053 commit d24f6b4

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
/**
2+
* External dependencies
3+
*/
4+
import { act } from 'react-dom/test-utils';
5+
6+
/**
7+
* WordPress dependencies
8+
*/
9+
import { render } from '@wordpress/element';
10+
11+
/**
12+
* Internal dependencies
13+
*/
14+
import { SiteScanSourcesList } from '../site-scan-sources-list';
15+
16+
let container;
17+
18+
describe( 'SiteScanSourcesList', () => {
19+
beforeEach( () => {
20+
container = document.createElement( 'div' );
21+
document.body.appendChild( container );
22+
} );
23+
24+
afterEach( () => {
25+
document.body.removeChild( container );
26+
container = null;
27+
} );
28+
29+
it( 'renders a loading spinner if no sources are provided', () => {
30+
act( () => {
31+
render(
32+
<SiteScanSourcesList sources={ [] } />,
33+
container,
34+
);
35+
} );
36+
37+
expect( container.querySelector( '.amp-spinner-container' ) ).not.toBeNull();
38+
} );
39+
40+
it( 'renders the correct number of sources', () => {
41+
act( () => {
42+
render(
43+
<SiteScanSourcesList
44+
sources={ [
45+
{ slug: 'foo' },
46+
{ slug: 'bar' },
47+
] }
48+
/>,
49+
container,
50+
);
51+
} );
52+
53+
expect( container.querySelectorAll( 'li' ) ).toHaveLength( 2 );
54+
} );
55+
56+
it( 'renders active source properties', () => {
57+
act( () => {
58+
render(
59+
<SiteScanSourcesList
60+
sources={ [ {
61+
author: 'John Doe',
62+
name: 'Source name',
63+
slug: 'Source slug',
64+
status: 'active',
65+
version: '1.0.0',
66+
} ] }
67+
/>,
68+
container,
69+
);
70+
} );
71+
72+
expect( container.querySelector( '.site-scan-results__source-name' ).textContent ).toBe( 'Source name' );
73+
expect( container.querySelector( '.site-scan-results__source-author' ).textContent ).toBe( 'by John Doe' );
74+
expect( container.querySelector( '.site-scan-results__source-version' ).textContent ).toBe( 'Version 1.0.0' );
75+
} );
76+
77+
it( 'renders inactive source properties', () => {
78+
act( () => {
79+
render(
80+
<SiteScanSourcesList
81+
inactiveSourceNotice="Source is inactive"
82+
sources={ [ {
83+
author: 'John Doe',
84+
name: 'Source name',
85+
slug: 'Source slug',
86+
status: 'inactive',
87+
version: '1.0.0',
88+
} ] }
89+
/>,
90+
container,
91+
);
92+
} );
93+
94+
expect( container.querySelector( '.site-scan-results__source-name' ).textContent ).toBe( 'Source name' );
95+
expect( container.querySelector( '.site-scan-results__source-notice' ).textContent ).toBe( 'Source is inactive' );
96+
expect( container.querySelector( '.site-scan-results__source-author' ) ).toBeNull();
97+
expect( container.querySelector( '.site-scan-results__source-version' ) ).toBeNull();
98+
} );
99+
100+
it( 'renders uninstalled source properties', () => {
101+
act( () => {
102+
render(
103+
<SiteScanSourcesList
104+
uninstalledSourceNotice="Source is uninstalled"
105+
sources={ [ {
106+
slug: 'Source slug',
107+
status: 'uninstalled',
108+
} ] }
109+
/>,
110+
container,
111+
);
112+
} );
113+
114+
expect( container.querySelector( '.site-scan-results__source-slug' ).textContent ).toBe( 'Source slug' );
115+
expect( container.querySelector( '.site-scan-results__source-notice' ).textContent ).toBe( 'Source is uninstalled' );
116+
expect( container.querySelector( '.site-scan-results__source-name' ) ).toBeNull();
117+
expect( container.querySelector( '.site-scan-results__source-author' ) ).toBeNull();
118+
expect( container.querySelector( '.site-scan-results__source-version' ) ).toBeNull();
119+
} );
120+
} );

0 commit comments

Comments
 (0)