mirror of
https://github.com/immich-app/immich.git
synced 2024-12-28 11:15:54 +02:00
4cb0f37918
* move watcher init to micro
* document watcher recovery
* chore: fix lint
* add try lock
* use global library watch lock
* fix: ensure lock stays on
* fix: mocks
* unit test for library watch lock
* move statement to correct test
* fix: correct return type of try lock
* fix: tests
* add library teardown
* add chokidar error handler
* make event strings an enum
* wait for event refactor
* refactor event type mocks
* expect correct error
* don't release lock in teardown
* chore: lint
* use enum
* fix mock
* fix lint
* fix watcher await
* remove await
* simplify typing
* remove async
* Revert "remove async"
This reverts commit 84ab5abac4
.
* can now change watch settings at runtime
* fix lint
* only watch libraries if enabled
---------
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
import { IStorageRepository, StorageCore, StorageEventType, WatchEvents } from '@app/domain';
|
|
import { WatchOptions } from 'chokidar';
|
|
|
|
interface MockWatcherOptions {
|
|
items?: Array<{ event: 'change' | 'add' | 'unlink' | 'error'; value: string }>;
|
|
close?: () => Promise<void>;
|
|
}
|
|
|
|
export const makeMockWatcher =
|
|
({ items, close }: MockWatcherOptions) =>
|
|
(paths: string[], options: WatchOptions, events: Partial<WatchEvents>) => {
|
|
events.onReady?.();
|
|
for (const item of items || []) {
|
|
switch (item.event) {
|
|
case StorageEventType.ADD: {
|
|
events.onAdd?.(item.value);
|
|
break;
|
|
}
|
|
case StorageEventType.CHANGE: {
|
|
events.onChange?.(item.value);
|
|
break;
|
|
}
|
|
case StorageEventType.UNLINK: {
|
|
events.onUnlink?.(item.value);
|
|
break;
|
|
}
|
|
case StorageEventType.ERROR: {
|
|
events.onError?.(new Error(item.value));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (close) {
|
|
return () => close();
|
|
}
|
|
|
|
return () => Promise.resolve();
|
|
};
|
|
|
|
export const newStorageRepositoryMock = (reset = true): jest.Mocked<IStorageRepository> => {
|
|
if (reset) {
|
|
StorageCore.reset();
|
|
}
|
|
|
|
return {
|
|
createZipStream: jest.fn(),
|
|
createReadStream: jest.fn(),
|
|
readFile: jest.fn(),
|
|
writeFile: jest.fn(),
|
|
unlink: jest.fn(),
|
|
unlinkDir: jest.fn().mockResolvedValue(true),
|
|
removeEmptyDirs: jest.fn(),
|
|
checkFileExists: jest.fn(),
|
|
mkdirSync: jest.fn(),
|
|
checkDiskUsage: jest.fn(),
|
|
readdir: jest.fn(),
|
|
stat: jest.fn(),
|
|
crawl: jest.fn(),
|
|
rename: jest.fn(),
|
|
copyFile: jest.fn(),
|
|
utimes: jest.fn(),
|
|
watch: jest.fn().mockImplementation(makeMockWatcher({})),
|
|
};
|
|
};
|