From 0f331a3b501a700fb06ba0e0fa610cb0232e67df Mon Sep 17 00:00:00 2001 From: Jonathan Jogenfors Date: Thu, 29 Feb 2024 23:04:56 +0100 Subject: [PATCH] wait for event refactor --- .../jobs/specs/library-watcher.e2e-spec.ts | 9 ++--- server/src/test-utils/utils.ts | 33 +++++++++++-------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/server/e2e/jobs/specs/library-watcher.e2e-spec.ts b/server/e2e/jobs/specs/library-watcher.e2e-spec.ts index 8ee83442f4..0199933723 100644 --- a/server/e2e/jobs/specs/library-watcher.e2e-spec.ts +++ b/server/e2e/jobs/specs/library-watcher.e2e-spec.ts @@ -84,10 +84,7 @@ describe(`Library watcher (e2e)`, () => { `${IMMICH_TEST_ASSET_TEMP_PATH}/file5.jPg`, ); - await waitForEvent(libraryService, StorageEvent.ADD); - await waitForEvent(libraryService, StorageEvent.ADD); - await waitForEvent(libraryService, StorageEvent.ADD); - await waitForEvent(libraryService, StorageEvent.ADD); + await waitForEvent(libraryService, StorageEvent.ADD, 4); const afterAssets = await api.assetApi.getAllAssets(server, admin.accessToken); expect(afterAssets.length).toEqual(4); @@ -161,9 +158,7 @@ describe(`Library watcher (e2e)`, () => { `${IMMICH_TEST_ASSET_TEMP_PATH}/dir3/file4.jpg`, ); - await waitForEvent(libraryService, StorageEvent.ADD); - await waitForEvent(libraryService, StorageEvent.ADD); - await waitForEvent(libraryService, StorageEvent.ADD); + await waitForEvent(libraryService, StorageEvent.ADD, 3); const assets = await api.assetApi.getAllAssets(server, admin.accessToken); expect(assets.length).toEqual(3); diff --git a/server/src/test-utils/utils.ts b/server/src/test-utils/utils.ts index 5f8a6dcfbc..1517448ef0 100644 --- a/server/src/test-utils/utils.ts +++ b/server/src/test-utils/utils.ts @@ -138,19 +138,26 @@ export const testApp = { }, }; -export function waitForEvent(emitter: EventEmitter, event: string): Promise { - return new Promise((resolve, reject) => { - const success = (value: T) => { - emitter.off(StorageEvent.ERROR, fail); - resolve(value); - }; - const fail = (error: Error) => { - emitter.off(event, success); - reject(error); - }; - emitter.once(event, success); - emitter.once(StorageEvent.ERROR, fail); - }); +export function waitForEvent(emitter: EventEmitter, event: string, times = 1): Promise { + const promises: Promise[] = []; + + for (let i = 1; i <= times; i++) { + promises.push( + new Promise((resolve, reject) => { + const success = (value: any) => { + emitter.off(StorageEvent.ERROR, fail); + resolve(value); + }; + const fail = (error: Error) => { + emitter.off(event, success); + reject(error); + }; + emitter.once(event, success); + emitter.once(StorageEvent.ERROR, fail); + }), + ); + } + return Promise.all(promises); } const directoryExists = async (dirPath: string) =>