]> source.dussan.org Git - sonarqube.git/commitdiff
[NO-JIRA] Use runOnlyPendingTimers together with useRealTimers
authorWouter Admiraal <wouter.admiraal@sonarsource.com>
Tue, 27 Jun 2023 07:17:29 +0000 (09:17 +0200)
committersonartech <sonartech@sonarsource.com>
Thu, 29 Jun 2023 20:05:13 +0000 (20:05 +0000)
18 files changed:
server/sonar-web/design-system/src/components/__tests__/DateRangePicker-test.tsx
server/sonar-web/design-system/src/components/__tests__/DeferredSpinner-test.tsx
server/sonar-web/design-system/src/components/__tests__/MultiSelectMenu-test.tsx
server/sonar-web/design-system/src/helpers/testUtils.tsx
server/sonar-web/src/main/js/app/components/__tests__/PageTracker-test.tsx
server/sonar-web/src/main/js/apps/maintenance/components/__tests__/App-test.tsx
server/sonar-web/src/main/js/apps/projectBranches/__tests__/ProjectBranchesApp-it.tsx
server/sonar-web/src/main/js/apps/projectDump/__tests__/ProjectDumpApp-it.tsx
server/sonar-web/src/main/js/apps/projectsManagement/__tests__/ProjectManagementApp-it.tsx
server/sonar-web/src/main/js/apps/settings/components/authentication/__tests__/Authentication-it.tsx
server/sonar-web/src/main/js/apps/users/__tests__/UsersApp-it.tsx
server/sonar-web/src/main/js/components/controls/__tests__/Toggler-test.tsx
server/sonar-web/src/main/js/components/controls/__tests__/Tooltip-test.tsx
server/sonar-web/src/main/js/components/controls/__tests__/clipboard-test.tsx
server/sonar-web/src/main/js/components/ui/__tests__/DeferredSpinner-test.tsx
server/sonar-web/src/main/js/components/workspace/__tests__/WorkspaceRuleViewer-test.tsx
server/sonar-web/src/main/js/helpers/__tests__/error-test.ts
server/sonar-web/src/main/js/helpers/__tests__/request-test.ts

index 355dd21c24424ce20058fa55de2971824f2c2033..6710f23ce0aa3bd09069c3343e17916884af4682 100644 (file)
@@ -23,11 +23,12 @@ import { formatISO, parseISO } from 'date-fns';
 import { render } from '../../helpers/testUtils';
 import { DateRangePicker } from '../DateRangePicker';
 
-beforeAll(() => {
+beforeEach(() => {
   jest.useFakeTimers().setSystemTime(parseISO('2022-06-12'));
 });
 
-afterAll(() => {
+afterEach(() => {
+  jest.runOnlyPendingTimers();
   jest.useRealTimers();
 });
 
index f78c026d694c7ee1319dec5b5c7cd66079b73587..9e5b35753b23fec86a30b9b9b7192c5ee38bc6c2 100644 (file)
 import { render, screen } from '@testing-library/react';
 import { DeferredSpinner } from '../DeferredSpinner';
 
-beforeAll(() => {
+beforeEach(() => {
   jest.useFakeTimers();
 });
 
 afterEach(() => {
   jest.runOnlyPendingTimers();
-});
-
-afterAll(() => {
   jest.useRealTimers();
 });
 
index e2077ecf2a01f3d0dc4a59fec72e8cf8fed70ab5..a1c7b5800ea8727d571e974912a76c7d58d9933e 100644 (file)
@@ -23,11 +23,12 @@ import { MultiSelectMenu } from '../MultiSelectMenu';
 
 const elements = ['foo', 'bar', 'baz'];
 
-beforeAll(() => {
+beforeEach(() => {
   jest.useFakeTimers();
 });
 
-afterAll(() => {
+afterEach(() => {
+  jest.runOnlyPendingTimers();
   jest.useRealTimers();
 });
 
index 275881c194a91739ad342cd312cbbb7728afc69d..516c427ba51da09946479de3a1878b5947448946 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { render as rtlRender, RenderOptions } from '@testing-library/react';
+import { RenderOptions, render as rtlRender } from '@testing-library/react';
 import userEvent from '@testing-library/user-event';
 import { Options as UserEventsOptions } from '@testing-library/user-event/dist/types/options';
 import { InitialEntry } from 'history';
@@ -113,15 +113,3 @@ export const debounceTimer = jest
 
     return debounced;
   });
-
-export function flushPromises(usingFakeTime = false): Promise<void> {
-  return new Promise((resolve) => {
-    if (usingFakeTime) {
-      jest.useRealTimers();
-    }
-    setTimeout(resolve, 0);
-    if (usingFakeTime) {
-      jest.useFakeTimers();
-    }
-  });
-}
index a4a58383af389d0b33c4a064352a8123cbff1e56..10504a10e74c4cdad9fd7f54322760f08f3f637f 100644 (file)
@@ -32,20 +32,16 @@ jest.mock('../../../helpers/extensionsHandler', () => ({
   getWebAnalyticsPageHandlerFromCache: jest.fn().mockReturnValue(undefined),
 }));
 
-beforeAll(() => {
+beforeEach(() => {
+  jest.clearAllMocks();
   jest.useFakeTimers();
 });
 
-afterAll(() => {
+afterEach(() => {
   jest.runOnlyPendingTimers();
   jest.useRealTimers();
 });
 
-beforeEach(() => {
-  jest.clearAllTimers();
-  jest.clearAllMocks();
-});
-
 it('should not trigger if no analytics system is given', () => {
   const wrapper = shallowRender();
   expect(wrapper).toMatchSnapshot();
index dff9de6fb7918e43cbb1fe82b44f51d6825e9941..5b5ed01c8f1f20af885adb78bd6305c61d65a181 100644 (file)
@@ -40,8 +40,6 @@ const originalLocation = window.location;
 const replace = jest.fn();
 
 beforeAll(() => {
-  jest.useFakeTimers();
-
   const location = {
     ...window.location,
     replace,
@@ -53,16 +51,21 @@ beforeAll(() => {
 });
 
 afterAll(() => {
-  jest.runOnlyPendingTimers();
-  jest.useRealTimers();
-
   Object.defineProperty(window, 'location', {
     writable: true,
     value: originalLocation,
   });
 });
 
-beforeEach(jest.clearAllMocks);
+beforeEach(() => {
+  jest.clearAllMocks();
+  jest.useFakeTimers();
+});
+
+afterEach(() => {
+  jest.runOnlyPendingTimers();
+  jest.useRealTimers();
+});
 
 describe('Maintenance', () => {
   it.each([
index 9c8ebf99afe4004f2fc5a7e1aebcf308d1440146..5b3a1650df19a5f2991bf40b9d0fdfaab7d030be 100644 (file)
@@ -71,18 +71,20 @@ const ui = {
   getPullRequestRow: () => within(ui.pullRequestTabContent.get()).getAllByRole('row'),
 };
 
-beforeAll(() => {
+beforeEach(() => {
   jest.useFakeTimers({
     advanceTimers: true,
     now: new Date('2018-02-01T07:08:59Z'),
   });
-});
-
-beforeEach(() => {
   handler.reset();
   settingsHandler.reset();
 });
 
+afterEach(() => {
+  jest.runOnlyPendingTimers();
+  jest.useRealTimers();
+});
+
 it('should show all branches', async () => {
   renderProjectBranchesApp();
   expect(await ui.branchTabContent.find()).toBeInTheDocument();
index 61d838ee7773b4d01678a481d3320b18b6fd918f..3a49a306f7aa288cc4b6d8afeb2110a5364efbfd 100644 (file)
@@ -56,10 +56,6 @@ const ui = {
   noDumpImportMsg: byText('project_dump.no_file_to_import'),
 };
 
-afterAll(() => {
-  jest.useRealTimers();
-});
-
 beforeEach(() => {
   computeEngineHandler.reset();
   handler.reset();
@@ -69,6 +65,11 @@ beforeEach(() => {
   });
 });
 
+afterEach(() => {
+  jest.runOnlyPendingTimers();
+  jest.useRealTimers();
+});
+
 it('can export project, but can not import', async () => {
   renderProjectKeyApp([Feature.ProjectImport]);
   expect(await ui.exportBtn.find()).toBeInTheDocument();
index 1a8fac665f0993dc799986dda1b793077830db68..5a0ae3110960d0c8d6dff6f6f011d5e4e1c485a4 100644 (file)
@@ -146,7 +146,7 @@ const ui = {
   }),
 };
 
-beforeAll(() => {
+beforeEach(() => {
   jest.useFakeTimers({
     advanceTimers: true,
     now: new Date('2019-01-05T07:08:59Z'),
@@ -154,6 +154,9 @@ beforeAll(() => {
 });
 
 afterEach(() => {
+  jest.runOnlyPendingTimers();
+  jest.useRealTimers();
+
   permissionsHandler.reset();
   settingsHandler.reset();
   handler.reset();
index 445d35ded8ad7ac01027703418045cd97e961d83..4cd48c8492b062715054b61e5ad41febe5331990 100644 (file)
@@ -447,6 +447,7 @@ describe('Github tab', () => {
 
   describe('Github Provisioning', () => {
     let user: UserEvent;
+
     beforeEach(() => {
       jest.useFakeTimers({
         advanceTimers: true,
@@ -454,6 +455,12 @@ describe('Github tab', () => {
       });
       user = userEvent.setup();
     });
+
+    afterEach(() => {
+      jest.runOnlyPendingTimers();
+      jest.useRealTimers();
+    });
+
     it('should display a success status when the synchronisation is a success', async () => {
       handler.addProvisioningTask({
         status: TaskStatuses.Success,
index 3ca72375a7388d96d4daf1f15dd3b65df645a899..56e63dc6293d595577b4ded1b1dccb29e2dbd82a 100644 (file)
@@ -137,14 +137,15 @@ beforeEach(() => {
 });
 
 describe('different filters combinations', () => {
-  beforeAll(() => {
+  beforeEach(() => {
     jest.useFakeTimers({
       advanceTimers: true,
       now: new Date('2023-07-05T07:08:59Z'),
     });
   });
 
-  afterAll(() => {
+  afterEach(() => {
+    jest.runOnlyPendingTimers();
     jest.useRealTimers();
   });
 
index 827d0bb6de2a417b451438ea48a943271ce54931..f29b18a9c697b788db0d8232f9bb6473a8b16cab 100644 (file)
@@ -24,11 +24,12 @@ import * as React from 'react';
 import { byRole } from '../../../helpers/testSelector';
 import Toggler from '../Toggler';
 
-beforeAll(() => {
+beforeEach(() => {
   jest.useFakeTimers();
 });
 
-afterAll(() => {
+afterEach(() => {
+  jest.runOnlyPendingTimers();
   jest.useRealTimers();
 });
 const ui = {
index 6ac3175783169b91ac0159bd5c0f876bb5a31c0b..aef69447e0e63f1be3a6e8e30a561e6cf80db8a4 100644 (file)
@@ -21,11 +21,12 @@ import { shallow } from 'enzyme';
 import * as React from 'react';
 import Tooltip, { TooltipInner, TooltipProps } from '../Tooltip';
 
-beforeAll(() => {
+beforeEach(() => {
+  jest.clearAllMocks();
   jest.useFakeTimers();
 });
 
-afterAll(() => {
+afterEach(() => {
   jest.runOnlyPendingTimers();
   jest.useRealTimers();
 });
@@ -44,8 +45,6 @@ jest.mock('lodash', () => {
   });
 });
 
-beforeEach(jest.clearAllMocks);
-
 it('should render', () => {
   expect(shallowRenderTooltipInner()).toMatchSnapshot();
   expect(
index 9814b6baffc28361d395fb1877064c9e9a0d1c9e..b52d288fbc9af79b815c92716c7eba6bc14e0810 100644 (file)
@@ -28,11 +28,11 @@ import {
   ClipboardIconButtonProps,
 } from '../clipboard';
 
-beforeAll(() => {
+beforeEach(() => {
   jest.useFakeTimers();
 });
 
-afterAll(() => {
+afterEach(() => {
   jest.runOnlyPendingTimers();
   jest.useRealTimers();
 });
index 6c7909d2523f4f05a854e29cb86e6ad576992bdb..0237097d9aca6bfe266ba5f6f30f2a9e7e12ea44 100644 (file)
@@ -21,15 +21,12 @@ import { render, screen } from '@testing-library/react';
 import * as React from 'react';
 import DeferredSpinner from '../DeferredSpinner';
 
-beforeAll(() => {
+beforeEach(() => {
   jest.useFakeTimers();
 });
 
 afterEach(() => {
   jest.runOnlyPendingTimers();
-});
-
-afterAll(() => {
   jest.useRealTimers();
 });
 
index df9460ecaa58a13829758a9b464296b1b5a1bf38..986d11b0e55e122dd9f58fb089368ed681dee854 100644 (file)
@@ -21,11 +21,11 @@ import { shallow } from 'enzyme';
 import * as React from 'react';
 import WorkspaceRuleViewer, { Props } from '../WorkspaceRuleViewer';
 
-beforeAll(() => {
+beforeEach(() => {
   jest.useFakeTimers();
 });
 
-afterAll(() => {
+afterEach(() => {
   jest.runOnlyPendingTimers();
   jest.useRealTimers();
 });
index da7201189350cef5b242f8b516f611a47695d638..8a904ccc0a3273bf5475dddac93c3470db335b1b 100644 (file)
@@ -24,15 +24,12 @@ jest.mock('../../helpers/globalMessages', () => ({
   addGlobalErrorMessage: jest.fn(),
 }));
 
-beforeAll(() => {
-  jest.useFakeTimers();
-});
-
 beforeEach(() => {
+  jest.useFakeTimers();
   jest.clearAllMocks();
 });
 
-afterAll(() => {
+afterEach(() => {
   jest.runOnlyPendingTimers();
   jest.useRealTimers();
 });
index 246ba04a4d968b932c961cc2552bfb44c7efdbd9..ea446cb9d2200576b31a2edfeeeeb75392414617 100644 (file)
@@ -203,19 +203,16 @@ describe('post', () => {
 });
 
 describe('requestTryAndRepeatUntil', () => {
-  beforeAll(() => {
+  beforeEach(() => {
+    jest.clearAllTimers();
     jest.useFakeTimers();
   });
 
-  afterAll(() => {
+  afterEach(() => {
     jest.runOnlyPendingTimers();
     jest.useRealTimers();
   });
 
-  beforeEach(() => {
-    jest.clearAllTimers();
-  });
-
   it('should repeat call until stop condition is met', async () => {
     const apiCall = jest.fn().mockResolvedValue({ repeat: true });
     const stopRepeat = jest.fn().mockImplementation(({ repeat }) => !repeat);