Skip to content

Commit 4bd60d9

Browse files
committed
Add test
1 parent a986552 commit 4bd60d9

1 file changed

Lines changed: 68 additions & 0 deletions

File tree

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<!doctype html>
2+
<html lang="en-US">
3+
<head>
4+
<link href="/assets/index.css" rel="stylesheet" type="text/css" />
5+
<script crossorigin="anonymous" src="https://unpkg.com/@babel/standalone@7.8.7/babel.min.js"></script>
6+
<script crossorigin="anonymous" src="https://unpkg.com/react@16.8.6/umd/react.development.js"></script>
7+
<script crossorigin="anonymous" src="https://unpkg.com/react-dom@16.8.6/umd/react-dom.development.js"></script>
8+
<script crossorigin="anonymous" src="/test-harness.js"></script>
9+
<script crossorigin="anonymous" src="/test-page-object.js"></script>
10+
<script crossorigin="anonymous" src="/__dist__/webchat-es5.js"></script>
11+
</head>
12+
<body>
13+
<main id="webchat"></main>
14+
<script type="text/babel" data-presets="env,stage-3,react">
15+
const {
16+
React: { Fragment },
17+
testHelpers: { createDirectLineEmulator },
18+
WebChat: {
19+
Components: { Composer, ThemeProvider }
20+
}
21+
} = window;
22+
23+
function createStyle(body) {
24+
const styleElement = document.createElement('style');
25+
26+
const { sheet } = styleElement;
27+
28+
styleElement.dataset['testid'] = 'style';
29+
styleElement.innerHTML = body;
30+
31+
return styleElement;
32+
}
33+
34+
run(async function () {
35+
const { directLine, store } = createDirectLineEmulator();
36+
37+
const RunFunction = ({ fn }) => {
38+
fn();
39+
40+
return false;
41+
};
42+
43+
const render = ({ stylesRoot }) =>
44+
new Promise(resolve =>
45+
ReactDOM.render(
46+
<Fragment>
47+
<Composer directLine={directLine} nonce="1" store={store} styleOptions={stylesRoot ? { stylesRoot } : {}} />
48+
<Composer directLine={directLine} nonce="2" store={store} styleOptions={stylesRoot ? { stylesRoot } : {}} />
49+
</Fragment>,
50+
document.getElementById('webchat'),
51+
resolve
52+
)
53+
);
54+
55+
await render({});
56+
await host.snapshot('local');
57+
58+
const allInjectedStyles = document.head.querySelectorAll('style[data-webchat-injected]');
59+
60+
// CSS with different nonces are actually different.
61+
const identifiers = new Set(Array.from(allInjectedStyles).map(element => `${element.getAttribute('nonce')}:${element.dataset.webchatInjected}`));
62+
63+
// THEN: All injected CSS should be unique and have no duplicates.
64+
expect(allInjectedStyles).toHaveLength(identifiers.size);
65+
});
66+
</script>
67+
</body>
68+
</html>

0 commit comments

Comments
 (0)