From 303ccce7d2fa73aaf613aea4637b3e55ac06dd3a Mon Sep 17 00:00:00 2001 From: Henry Heino <46334387+personalizedrefrigerator@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:13:13 -0700 Subject: [PATCH] Chore: Silence expected warning while running tests in lib/ (#12450) --- packages/lib/models/Folder.test.ts | 8 +++++--- packages/lib/testing/test-utils.ts | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/lib/models/Folder.test.ts b/packages/lib/models/Folder.test.ts index eaa89e2888..e6e367b765 100644 --- a/packages/lib/models/Folder.test.ts +++ b/packages/lib/models/Folder.test.ts @@ -1,6 +1,6 @@ import { ErrorCode } from '../errors'; import { FolderEntity } from '../services/database/types'; -import { createNTestNotes, setupDatabaseAndSynchronizer, sleep, switchClient, checkThrowAsync, createFolderTree, simulateReadOnlyShareEnv, expectThrow } from '../testing/test-utils'; +import { createNTestNotes, setupDatabaseAndSynchronizer, sleep, switchClient, checkThrowAsync, createFolderTree, simulateReadOnlyShareEnv, expectThrow, withWarningSilenced } from '../testing/test-utils'; import Folder from './Folder'; import Note from './Note'; @@ -174,8 +174,10 @@ describe('models/Folder', () => { await Folder.save({ id: f1.id, parent_id: f3.id }); const folders = await Folder.all(); - // Should not loop indefinitely: - await Folder.addNoteCounts(folders); + // Should not loop indefinitely, okay to warn: + await withWarningSilenced(/has itself as a parent/, async () => { + await Folder.addNoteCounts(folders); + }); // Note count may be incorrect expect(folders.find(folder => folder.id === f1.id)).toHaveProperty('note_count'); }); diff --git a/packages/lib/testing/test-utils.ts b/packages/lib/testing/test-utils.ts index 949cbad36e..bc542cddd8 100644 --- a/packages/lib/testing/test-utils.ts +++ b/packages/lib/testing/test-utils.ts @@ -1190,4 +1190,22 @@ export const runWithFakeTimers = async (callback: ()=> Promise) => { } }; +export const withWarningSilenced = async (warningRegex: RegExp, task: ()=> Promise): Promise => { + // See https://jestjs.io/docs/jest-object#spied-methods-and-the-using-keyword, which + // shows how to use .spyOn to hide warnings + let warningMock; + try { + warningMock = jest.spyOn(console, 'warn'); + warningMock.mockImplementation((message, ...args) => { + const fullMessage = [message, ...args].join(' '); + if (!fullMessage.match(warningRegex)) { + console.error(`Unexpected warning: ${message}`, ...args); + } + }); + return await task(); + } finally { + warningMock.mockRestore(); + } +}; + export { supportDir, createNoteAndResource, createTempFile, createTestShareData, simulateReadOnlyShareEnv, waitForFolderCount, afterAllCleanUp, exportDir, synchronizerStart, afterEachCleanUp, syncTargetName, setSyncTargetName, syncDir, createTempDir, isNetworkSyncTarget, kvStore, expectThrow, logger, expectNotThrow, resourceService, resourceFetcher, tempFilePath, allSyncTargetItemsEncrypted, msleep, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, checkThrow, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, currentClientId, id, ids, sortedIds, at, createNTestNotes, createNTestFolders, createNTestTags, TestApp };