chore(server): user e2e: wait for user delete event ()

* wait for user delete event

* fix update event names

* add test for hard deletion of user
This commit is contained in:
Daniel Dietzler 2024-03-10 00:10:24 +01:00 committed by GitHub
parent ec8fb0be83
commit 11e7533a4d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 67 additions and 33 deletions
e2e/src

View file

@ -36,8 +36,8 @@ import { makeRandomImage } from 'src/generators';
import request from 'supertest';
type CliResponse = { stdout: string; stderr: string; exitCode: number | null };
type EventType = 'upload' | 'delete';
type WaitOptions = { event: EventType; assetId: string; timeout?: number };
type EventType = 'assetUpload' | 'assetDelete' | 'userDelete';
type WaitOptions = { event: EventType; id: string; timeout?: number };
type AdminSetupOptions = { onboarding?: boolean };
type AssetData = { bytes?: Buffer; filename: string };
@ -78,20 +78,21 @@ export const immichCli = async (args: string[]) => {
let client: pg.Client | null = null;
const events: Record<EventType, Set<string>> = {
upload: new Set<string>(),
delete: new Set<string>(),
assetUpload: new Set<string>(),
assetDelete: new Set<string>(),
userDelete: new Set<string>(),
};
const callbacks: Record<string, () => void> = {};
const execPromise = promisify(exec);
const onEvent = ({ event, assetId }: { event: EventType; assetId: string }) => {
events[event].add(assetId);
const callback = callbacks[assetId];
const onEvent = ({ event, id }: { event: EventType; id: string }) => {
events[event].add(id);
const callback = callbacks[id];
if (callback) {
callback();
delete callbacks[assetId];
delete callbacks[id];
}
};
@ -166,8 +167,9 @@ export const utils = {
return new Promise<Socket>((resolve) => {
websocket
.on('connect', () => resolve(websocket))
.on('on_upload_success', (data: AssetResponseDto) => onEvent({ event: 'upload', assetId: data.id }))
.on('on_asset_delete', (assetId: string) => onEvent({ event: 'delete', assetId }))
.on('on_upload_success', (data: AssetResponseDto) => onEvent({ event: 'assetUpload', id: data.id }))
.on('on_asset_delete', (assetId: string) => onEvent({ event: 'assetDelete', id: assetId }))
.on('on_user_delete', (userId: string) => onEvent({ event: 'userDelete', id: userId }))
.connect();
});
},
@ -182,17 +184,17 @@ export const utils = {
}
},
waitForWebsocketEvent: async ({ event, assetId, timeout: ms }: WaitOptions): Promise<void> => {
console.log(`Waiting for ${event} [${assetId}]`);
waitForWebsocketEvent: async ({ event, id, timeout: ms }: WaitOptions): Promise<void> => {
console.log(`Waiting for ${event} [${id}]`);
const set = events[event];
if (set.has(assetId)) {
if (set.has(id)) {
return;
}
return new Promise<void>((resolve, reject) => {
const timeout = setTimeout(() => reject(new Error(`Timed out waiting for ${event} event`)), ms || 10_000);
callbacks[assetId] = () => {
callbacks[id] = () => {
clearTimeout(timeout);
resolve();
};