1
0
forked from Cutlery/immich

improve tests

This commit is contained in:
Jonathan Jogenfors 2024-03-14 01:09:29 +01:00
parent 247429c3e4
commit 0803458d40
3 changed files with 39 additions and 49 deletions

View File

@ -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 () => { it('should set crawled assets that were previously offline back online', async () => {
const mockLibraryJob: ILibraryRefreshJob = { const mockLibraryJob: ILibraryRefreshJob = {
id: libraryStub.externalLibrary1.id, 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', () => { describe('queueEmptyTrash', () => {

View File

@ -656,14 +656,6 @@ export class LibraryService extends EventEmitter {
return true; 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<boolean> { async handleQueueAssetRefresh(job: ILibraryRefreshJob): Promise<boolean> {
const library = await this.repository.get(job.id); const library = await this.repository.get(job.id);
if (!library || library.type !== LibraryType.EXTERNAL) { if (!library || library.type !== LibraryType.EXTERNAL) {

View File

@ -146,26 +146,6 @@ export class LibraryRepository implements ILibraryRepository {
}; };
} }
@GenerateSql({ params: [DummyValue.UUID] })
async getOnlineAssetPaths(libraryId: string): Promise<string[]> {
// 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] }) @GenerateSql({ params: [DummyValue.UUID] })
async getAssetIds(libraryId: string, withDeleted = false): Promise<string[]> { async getAssetIds(libraryId: string, withDeleted = false): Promise<string[]> {
let query = this.repository let query = this.repository