From 0803458d403350ae33ad0f5eb00cda37eaf36f52 Mon Sep 17 00:00:00 2001 From: Jonathan Jogenfors Date: Thu, 14 Mar 2024 01:09:29 +0100 Subject: [PATCH] improve tests --- .../domain/library/library.service.spec.ts | 60 ++++++++++++------- server/src/domain/library/library.service.ts | 8 --- .../infra/repositories/library.repository.ts | 20 ------- 3 files changed, 39 insertions(+), 49 deletions(-) diff --git a/server/src/domain/library/library.service.spec.ts b/server/src/domain/library/library.service.spec.ts index 03042cf55..6fd5fb353 100644 --- a/server/src/domain/library/library.service.spec.ts +++ b/server/src/domain/library/library.service.spec.ts @@ -242,27 +242,6 @@ describe(LibraryService.name, () => { }); }); - it('should set missing assets offline', async () => { - const mockLibraryJob: ILibraryRefreshJob = { - id: libraryStub.externalLibrary1.id, - refreshModifiedFiles: false, - refreshAllFiles: false, - }; - - libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); - storageMock.crawl.mockResolvedValue([]); - assetMock.getLibraryAssetPaths.mockResolvedValue({ - items: [assetStub.image], - hasNextPage: false, - }); - - await sut.handleQueueAssetRefresh(mockLibraryJob); - - expect(assetMock.updateAll).toHaveBeenCalledWith([assetStub.image.id], { isOffline: true }); - expect(assetMock.updateAll).not.toHaveBeenCalledWith(expect.anything(), { isOffline: false }); - expect(jobMock.queueAll).not.toHaveBeenCalled(); - }); - it('should set crawled assets that were previously offline back online', async () => { const mockLibraryJob: ILibraryRefreshJob = { id: libraryStub.externalLibrary1.id, @@ -1445,6 +1424,45 @@ describe(LibraryService.name, () => { ], ]); }); + + it('should queue an offline file scan', async () => { + libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); + + await sut.queueScan(authStub.admin, libraryStub.externalLibrary1.id, { checkForOffline: true }); + + expect(jobMock.queue.mock.calls).toEqual([ + [ + { + name: JobName.LIBRARY_SCAN_OFFLINE, + data: { + id: libraryStub.externalLibrary1.id, + }, + }, + ], + ]); + }); + + it('should error when queuing a scan with checkOffline and refreshAll', async () => { + libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); + + await expect( + sut.queueScan(authStub.admin, libraryStub.externalLibrary1.id, { + refreshAllFiles: true, + checkForOffline: true, + }), + ).rejects.toBeInstanceOf(BadRequestException); + }); + + it('should error when queuing a scan with checkOffline and refreshModified', async () => { + libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); + + await expect( + sut.queueScan(authStub.admin, libraryStub.externalLibrary1.id, { + refreshModifiedFiles: true, + checkForOffline: true, + }), + ).rejects.toBeInstanceOf(BadRequestException); + }); }); describe('queueEmptyTrash', () => { diff --git a/server/src/domain/library/library.service.ts b/server/src/domain/library/library.service.ts index 628bde1bc..cfb0d4dec 100644 --- a/server/src/domain/library/library.service.ts +++ b/server/src/domain/library/library.service.ts @@ -656,14 +656,6 @@ export class LibraryService extends EventEmitter { return true; } - // Check if a given path is in a user's external path. Both arguments are assumed to be normalized - private isInExternalPath(filePath: string, externalPath: string | null): boolean { - if (externalPath === null) { - return false; - } - return filePath.startsWith(externalPath); - } - async handleQueueAssetRefresh(job: ILibraryRefreshJob): Promise { const library = await this.repository.get(job.id); if (!library || library.type !== LibraryType.EXTERNAL) { diff --git a/server/src/infra/repositories/library.repository.ts b/server/src/infra/repositories/library.repository.ts index 5ae3de96f..1caacb534 100644 --- a/server/src/infra/repositories/library.repository.ts +++ b/server/src/infra/repositories/library.repository.ts @@ -146,26 +146,6 @@ export class LibraryRepository implements ILibraryRepository { }; } - @GenerateSql({ params: [DummyValue.UUID] }) - async getOnlineAssetPaths(libraryId: string): Promise { - // Return all non-offline asset paths for a given library - const rawResults = await this.repository - .createQueryBuilder('library') - .innerJoinAndSelect('library.assets', 'assets') - .where('library.id = :id', { id: libraryId }) - .andWhere('assets.isOffline = false') - .select('assets.originalPath') - .getRawMany(); - - const results: string[] = []; - - for (const rawPath of rawResults) { - results.push(rawPath.assets_originalPath); - } - - return results; - } - @GenerateSql({ params: [DummyValue.UUID] }) async getAssetIds(libraryId: string, withDeleted = false): Promise { let query = this.repository