forked from Cutlery/immich
		
	improve tests
This commit is contained in:
		
							parent
							
								
									247429c3e4
								
							
						
					
					
						commit
						0803458d40
					
				@ -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', () => {
 | 
				
			||||||
 | 
				
			|||||||
@ -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) {
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user