@samitouri / QOS-React-2 / commits / 7c79dafb71

Convert ReactDOMServerIntegrationUntrustedURL-test.js to createRoot (#28105)

Matt Carroll committed Jan 26, 2024 at 12:18 UTC 7c79dafb71cab8808749e3284eab3c623e9c2360
1 file changed +34 -11
packages/react-dom/src/__tests__/ReactDOMServerIntegrationUntrustedURL-test.js
+34 -11
@@ -16,8 +16,10 @@ const ReactDOMServerIntegrationUtils = require('./utils/ReactDOMServerIntegratio
16
17 let React;
18 let ReactDOM;
19 +let ReactDOMClient;
20 let ReactDOMServer;
21 let ReactTestUtils;
22 +let act;
23
24 const EXPECTED_SAFE_URL =
25 "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')";
@@ -34,8 +36,10 @@ describe('ReactDOMServerIntegration - Untrusted URLs', () => {
36 jest.resetModules();
37 React = require('react');
38 ReactDOM = require('react-dom');
39 + ReactDOMClient = require('react-dom/client');
40 ReactDOMServer = require('react-dom/server');
41 ReactTestUtils = require('react-dom/test-utils');
42 + act = require('internal-test-utils').act;
43
44 // Make them available to the helpers.
45 return {
@@ -167,11 +171,16 @@ describe('ReactDOMServerIntegration - Untrusted URLs', () => {
171 },
172 );
173
170 - it('rejects a javascript protocol href if it is added during an update', () => {
174 + it('rejects a javascript protocol href if it is added during an update', async () => {
175 const container = document.createElement('div');
172 - ReactDOM.render(<a href="thisisfine">click me</a>, container);
173 - expect(() => {
174 - ReactDOM.render(<a href="javascript:notfine">click me</a>, container);
176 + const root = ReactDOMClient.createRoot(container);
177 + await act(async () => {
178 + root.render(<a href="thisisfine">click me</a>);
179 + });
180 + await expect(async () => {
181 + await act(() => {
182 + root.render(<a href="javascript:notfine">click me</a>);
183 + });
184 }).toErrorDev(
185 'Warning: A future version of React will block javascript: URLs as a security precaution. ' +
186 'Use event handlers instead if you can. If you need to generate unsafe HTML try using ' +
@@ -196,8 +205,10 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
205
206 React = require('react');
207 ReactDOM = require('react-dom');
208 + ReactDOMClient = require('react-dom/client');
209 ReactDOMServer = require('react-dom/server');
210 ReactTestUtils = require('react-dom/test-utils');
211 + act = require('internal-test-utils').act;
212
213 // Make them available to the helpers.
214 return {
@@ -325,11 +336,16 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
336 },
337 );
338
328 - it('rejects a javascript protocol href if it is added during an update', () => {
339 + it('rejects a javascript protocol href if it is added during an update', async () => {
340 const container = document.createElement('div');
330 - ReactDOM.render(<a href="http://thisisfine/">click me</a>, container);
341 + const root = ReactDOMClient.createRoot(container);
342 + await act(() => {
343 + root.render(<a href="http://thisisfine/">click me</a>);
344 + });
345 expect(container.firstChild.href).toBe('http://thisisfine/');
332 - ReactDOM.render(<a href="javascript:notfine">click me</a>, container);
346 + await act(() => {
347 + root.render(<a href="javascript:notfine">click me</a>);
348 + });
349 expect(container.firstChild.href).toBe(EXPECTED_SAFE_URL);
350 });
351
@@ -369,15 +385,22 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
385 expect(e.href).toBe('https://reactjs.org/');
386 });
387
372 - it('rejects a javascript protocol href if it is added during an update twice', () => {
388 + it('rejects a javascript protocol href if it is added during an update twice', async () => {
389 const container = document.createElement('div');
374 - ReactDOM.render(<a href="http://thisisfine/">click me</a>, container);
390 + const root = ReactDOMClient.createRoot(container);
391 + await act(async () => {
392 + root.render(<a href="http://thisisfine/">click me</a>);
393 + });
394 expect(container.firstChild.href).toBe('http://thisisfine/');
376 - ReactDOM.render(<a href="javascript:notfine">click me</a>, container);
395 + await act(async () => {
396 + root.render(<a href="javascript:notfine">click me</a>);
397 + });
398 expect(container.firstChild.href).toBe(EXPECTED_SAFE_URL);
399 // The second update ensures that a global flag hasn't been added to the regex
400 // which would fail to match the second time it is called.
380 - ReactDOM.render(<a href="javascript:notfine">click me</a>, container);
401 + await act(async () => {
402 + root.render(<a href="javascript:notfine">click me</a>);
403 + });
404 expect(container.firstChild.href).toBe(EXPECTED_SAFE_URL);
405 });
406 });