|
|
|
|
@@ -344,10 +344,11 @@ describe(MediaService.name, () => {
|
|
|
|
|
mocks.media.decodeImage.mockImplementation((input) =>
|
|
|
|
|
Promise.resolve(
|
|
|
|
|
typeof input === 'string'
|
|
|
|
|
? { data: rawBuffer, info: rawInfo as OutputInfo, hasAlpha: false } // string implies original file
|
|
|
|
|
: { data: fullsizeBuffer, info: rawInfo as OutputInfo, hasAlpha: false }, // buffer implies embedded image extracted
|
|
|
|
|
? { data: rawBuffer, info: rawInfo as OutputInfo } // string implies original file
|
|
|
|
|
: { data: fullsizeBuffer, info: rawInfo as OutputInfo }, // buffer implies embedded image extracted
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 100, height: 100, isTransparent: false });
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should skip thumbnail generation if asset not found', async () => {
|
|
|
|
|
@@ -417,7 +418,6 @@ describe(MediaService.name, () => {
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(asset.originalPath, {
|
|
|
|
|
checkAlpha: false,
|
|
|
|
|
colorspace: Colorspace.P3,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
size: 1440,
|
|
|
|
|
@@ -656,7 +656,6 @@ describe(MediaService.name, () => {
|
|
|
|
|
expect(mocks.storage.mkdirSync).toHaveBeenCalledWith(expect.any(String));
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(asset.originalPath, {
|
|
|
|
|
checkAlpha: false,
|
|
|
|
|
colorspace: Colorspace.Srgb,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
size: 1440,
|
|
|
|
|
@@ -707,7 +706,6 @@ describe(MediaService.name, () => {
|
|
|
|
|
expect(mocks.storage.mkdirSync).toHaveBeenCalledWith(expect.any(String));
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(asset.originalPath, {
|
|
|
|
|
checkAlpha: false,
|
|
|
|
|
colorspace: Colorspace.Srgb,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
size: 1440,
|
|
|
|
|
@@ -860,7 +858,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
.exif({ fileSizeInByte: 5000, profileDescription: 'Adobe RGB', bitsPerSample: 14, orientation: undefined })
|
|
|
|
|
.build();
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue({ width: 3840, height: 2160 });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 3840, height: 2160, isTransparent: false });
|
|
|
|
|
mocks.systemMetadata.get.mockResolvedValue({ image: { extractEmbedded: true } });
|
|
|
|
|
mocks.assetJob.getForGenerateThumbnailJob.mockResolvedValue(asset);
|
|
|
|
|
|
|
|
|
|
@@ -868,26 +866,51 @@ describe(MediaService.name, () => {
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(extractedBuffer, {
|
|
|
|
|
checkAlpha: false,
|
|
|
|
|
colorspace: Colorspace.P3,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
size: 1440,
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should not check transparency metadata for raw files without extracted images', async () => {
|
|
|
|
|
const asset = AssetFactory.from({ originalFileName: 'file.dng' })
|
|
|
|
|
.exif({ fileSizeInByte: 5000, profileDescription: 'Adobe RGB', bitsPerSample: 14, orientation: undefined })
|
|
|
|
|
.build();
|
|
|
|
|
mocks.systemMetadata.get.mockResolvedValue({ image: { extractEmbedded: false } });
|
|
|
|
|
mocks.assetJob.getForGenerateThumbnailJob.mockResolvedValue(asset);
|
|
|
|
|
|
|
|
|
|
await sut.handleGenerateThumbnails({ id: asset.id });
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.getImageMetadata).not.toHaveBeenCalled();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should not check transparency metadata for raw files with extracted images', async () => {
|
|
|
|
|
const asset = AssetFactory.from({ originalFileName: 'file.dng' })
|
|
|
|
|
.exif({ fileSizeInByte: 5000, profileDescription: 'Adobe RGB', bitsPerSample: 14, orientation: undefined })
|
|
|
|
|
.build();
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 3840, height: 2160, isTransparent: false });
|
|
|
|
|
mocks.systemMetadata.get.mockResolvedValue({ image: { extractEmbedded: true } });
|
|
|
|
|
mocks.assetJob.getForGenerateThumbnailJob.mockResolvedValue(asset);
|
|
|
|
|
|
|
|
|
|
await sut.handleGenerateThumbnails({ id: asset.id });
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.getImageMetadata).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.getImageMetadata).toHaveBeenCalledWith(extractedBuffer);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should resize original image if embedded image is too small', async () => {
|
|
|
|
|
const asset = AssetFactory.from({ originalFileName: 'file.dng' })
|
|
|
|
|
.exif({ fileSizeInByte: 5000, profileDescription: 'Adobe RGB', bitsPerSample: 14, orientation: undefined })
|
|
|
|
|
.build();
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue({ width: 1000, height: 1000 });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 1000, height: 1000, isTransparent: false });
|
|
|
|
|
mocks.systemMetadata.get.mockResolvedValue({ image: { extractEmbedded: true } });
|
|
|
|
|
mocks.assetJob.getForGenerateThumbnailJob.mockResolvedValue(asset);
|
|
|
|
|
|
|
|
|
|
await sut.handleGenerateThumbnails({ id: asset.id });
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(asset.originalPath, {
|
|
|
|
|
checkAlpha: false,
|
|
|
|
|
colorspace: Colorspace.P3,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
size: 1440,
|
|
|
|
|
@@ -905,7 +928,6 @@ describe(MediaService.name, () => {
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(asset.originalPath, {
|
|
|
|
|
checkAlpha: false,
|
|
|
|
|
colorspace: Colorspace.P3,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
size: 1440,
|
|
|
|
|
@@ -924,7 +946,6 @@ describe(MediaService.name, () => {
|
|
|
|
|
expect(mocks.media.extract).not.toHaveBeenCalled();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(asset.originalPath, {
|
|
|
|
|
checkAlpha: false,
|
|
|
|
|
colorspace: Colorspace.P3,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
size: 1440,
|
|
|
|
|
@@ -977,14 +998,13 @@ describe(MediaService.name, () => {
|
|
|
|
|
image: { fullsize: { enabled: true, format: ImageFormat.Webp }, extractEmbedded: true },
|
|
|
|
|
});
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue({ width: 3840, height: 2160 });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 3840, height: 2160, isTransparent: false });
|
|
|
|
|
mocks.assetJob.getForGenerateThumbnailJob.mockResolvedValue(asset);
|
|
|
|
|
|
|
|
|
|
await sut.handleGenerateThumbnails({ id: asset.id });
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(extractedBuffer, {
|
|
|
|
|
checkAlpha: false,
|
|
|
|
|
colorspace: Colorspace.P3,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
size: 1440, // capped to preview size as fullsize conversion is skipped
|
|
|
|
|
@@ -1016,14 +1036,13 @@ describe(MediaService.name, () => {
|
|
|
|
|
image: { fullsize: { enabled: true, format: ImageFormat.Webp }, extractEmbedded: true },
|
|
|
|
|
});
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jxl });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue({ width: 3840, height: 2160 });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 3840, height: 2160, isTransparent: false });
|
|
|
|
|
mocks.assetJob.getForGenerateThumbnailJob.mockResolvedValue(asset);
|
|
|
|
|
|
|
|
|
|
await sut.handleGenerateThumbnails({ id: asset.id });
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(extractedBuffer, {
|
|
|
|
|
checkAlpha: false,
|
|
|
|
|
colorspace: Colorspace.P3,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
});
|
|
|
|
|
@@ -1065,14 +1084,13 @@ describe(MediaService.name, () => {
|
|
|
|
|
|
|
|
|
|
mocks.systemMetadata.get.mockResolvedValue({ image: { fullsize: { enabled: true }, extractEmbedded: false } });
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue({ width: 3840, height: 2160 });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 3840, height: 2160, isTransparent: false });
|
|
|
|
|
mocks.assetJob.getForGenerateThumbnailJob.mockResolvedValue(asset);
|
|
|
|
|
|
|
|
|
|
await sut.handleGenerateThumbnails({ id: asset.id });
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(asset.originalPath, {
|
|
|
|
|
checkAlpha: false,
|
|
|
|
|
colorspace: Colorspace.P3,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
});
|
|
|
|
|
@@ -1110,7 +1128,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
it('should generate full-size preview from non-web-friendly images', async () => {
|
|
|
|
|
mocks.systemMetadata.get.mockResolvedValue({ image: { fullsize: { enabled: true } } });
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue({ width: 3840, height: 2160 });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 3840, height: 2160, isTransparent: false });
|
|
|
|
|
// HEIF/HIF image taken by cameras are not web-friendly, only has limited support on Safari.
|
|
|
|
|
const asset = AssetFactory.from({ originalFileName: 'image.hif' })
|
|
|
|
|
.exif({
|
|
|
|
|
@@ -1125,7 +1143,6 @@ describe(MediaService.name, () => {
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(asset.originalPath, {
|
|
|
|
|
checkAlpha: true,
|
|
|
|
|
colorspace: Colorspace.P3,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
});
|
|
|
|
|
@@ -1150,14 +1167,13 @@ describe(MediaService.name, () => {
|
|
|
|
|
const asset = AssetFactory.from().exif().build();
|
|
|
|
|
mocks.systemMetadata.get.mockResolvedValue({ image: { fullsize: { enabled: true } } });
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue({ width: 3840, height: 2160 });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 3840, height: 2160, isTransparent: false });
|
|
|
|
|
mocks.assetJob.getForGenerateThumbnailJob.mockResolvedValue(asset);
|
|
|
|
|
|
|
|
|
|
await sut.handleGenerateThumbnails({ id: asset.id });
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(asset.originalPath, {
|
|
|
|
|
checkAlpha: false,
|
|
|
|
|
colorspace: Colorspace.Srgb,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
size: 1440,
|
|
|
|
|
@@ -1174,7 +1190,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
it('should always generate full-size preview from non-web-friendly panoramas', async () => {
|
|
|
|
|
mocks.systemMetadata.get.mockResolvedValue({ image: { fullsize: { enabled: false } } });
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue({ width: 3840, height: 2160 });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 3840, height: 2160, isTransparent: false });
|
|
|
|
|
mocks.media.copyTagGroup.mockResolvedValue(true);
|
|
|
|
|
|
|
|
|
|
const asset = AssetFactory.from({ originalFileName: 'panorama.tif' })
|
|
|
|
|
@@ -1190,7 +1206,6 @@ describe(MediaService.name, () => {
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(asset.originalPath, {
|
|
|
|
|
checkAlpha: true,
|
|
|
|
|
colorspace: Colorspace.Srgb,
|
|
|
|
|
orientation: undefined,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
@@ -1221,7 +1236,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
image: { fullsize: { enabled: true, format: ImageFormat.Webp, quality: 90 } },
|
|
|
|
|
});
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue({ width: 3840, height: 2160 });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 3840, height: 2160, isTransparent: false });
|
|
|
|
|
// HEIF/HIF image taken by cameras are not web-friendly, only has limited support on Safari.
|
|
|
|
|
const asset = AssetFactory.from({ originalFileName: 'image.hif' })
|
|
|
|
|
.exif({
|
|
|
|
|
@@ -1236,7 +1251,6 @@ describe(MediaService.name, () => {
|
|
|
|
|
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledOnce();
|
|
|
|
|
expect(mocks.media.decodeImage).toHaveBeenCalledWith(asset.originalPath, {
|
|
|
|
|
checkAlpha: true,
|
|
|
|
|
colorspace: Colorspace.P3,
|
|
|
|
|
processInvalidImages: false,
|
|
|
|
|
});
|
|
|
|
|
@@ -1262,7 +1276,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
image: { fullsize: { enabled: true, format: ImageFormat.Jpeg, progressive: true } },
|
|
|
|
|
});
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue({ width: 3840, height: 2160 });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 3840, height: 2160, isTransparent: false });
|
|
|
|
|
const asset = AssetFactory.from({ originalFileName: 'image.hif' })
|
|
|
|
|
.exif({
|
|
|
|
|
fileSizeInByte: 5000,
|
|
|
|
|
@@ -1296,10 +1310,11 @@ describe(MediaService.name, () => {
|
|
|
|
|
mocks.media.decodeImage.mockImplementation((input) =>
|
|
|
|
|
Promise.resolve(
|
|
|
|
|
typeof input === 'string'
|
|
|
|
|
? { data: rawBuffer, info: rawInfo as OutputInfo, hasAlpha: false } // string implies original file
|
|
|
|
|
: { data: fullsizeBuffer, info: rawInfo as OutputInfo, hasAlpha: false }, // buffer implies embedded image extracted
|
|
|
|
|
? { data: rawBuffer, info: rawInfo as OutputInfo } // string implies original file
|
|
|
|
|
: { data: fullsizeBuffer, info: rawInfo as OutputInfo }, // buffer implies embedded image extracted
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 100, height: 100, isTransparent: false });
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should skip videos', async () => {
|
|
|
|
|
@@ -1467,7 +1482,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
mocks.media.generateThumbnail.mockResolvedValue();
|
|
|
|
|
const data = Buffer.from('');
|
|
|
|
|
const info = { width: 1000, height: 1000 } as OutputInfo;
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info, hasAlpha: false });
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info });
|
|
|
|
|
|
|
|
|
|
await expect(sut.handleGeneratePersonThumbnail({ id: personStub.primaryPerson.id })).resolves.toBe(
|
|
|
|
|
JobStatus.Success,
|
|
|
|
|
@@ -1512,7 +1527,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
mocks.media.generateThumbnail.mockResolvedValue();
|
|
|
|
|
const data = Buffer.from('');
|
|
|
|
|
const info = { width: 1000, height: 1000 } as OutputInfo;
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info, hasAlpha: false });
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info });
|
|
|
|
|
|
|
|
|
|
await expect(sut.handleGeneratePersonThumbnail({ id: personStub.primaryPerson.id })).resolves.toBe(
|
|
|
|
|
JobStatus.Success,
|
|
|
|
|
@@ -1557,7 +1572,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
mocks.media.generateThumbnail.mockResolvedValue();
|
|
|
|
|
const data = Buffer.from('');
|
|
|
|
|
const info = { width: 2160, height: 3840 } as OutputInfo;
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info, hasAlpha: false });
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info });
|
|
|
|
|
|
|
|
|
|
await expect(sut.handleGeneratePersonThumbnail({ id: personStub.primaryPerson.id })).resolves.toBe(
|
|
|
|
|
JobStatus.Success,
|
|
|
|
|
@@ -1600,7 +1615,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
mocks.media.generateThumbnail.mockResolvedValue();
|
|
|
|
|
const data = Buffer.from('');
|
|
|
|
|
const info = { width: 1000, height: 1000 } as OutputInfo;
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info, hasAlpha: false });
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info });
|
|
|
|
|
|
|
|
|
|
await expect(sut.handleGeneratePersonThumbnail({ id: personStub.primaryPerson.id })).resolves.toBe(
|
|
|
|
|
JobStatus.Success,
|
|
|
|
|
@@ -1643,7 +1658,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
mocks.media.generateThumbnail.mockResolvedValue();
|
|
|
|
|
const data = Buffer.from('');
|
|
|
|
|
const info = { width: 4624, height: 3080 } as OutputInfo;
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info, hasAlpha: false });
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info });
|
|
|
|
|
|
|
|
|
|
await expect(sut.handleGeneratePersonThumbnail({ id: personStub.primaryPerson.id })).resolves.toBe(
|
|
|
|
|
JobStatus.Success,
|
|
|
|
|
@@ -1686,7 +1701,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
mocks.media.generateThumbnail.mockResolvedValue();
|
|
|
|
|
const data = Buffer.from('');
|
|
|
|
|
const info = { width: 4624, height: 3080 } as OutputInfo;
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info, hasAlpha: false });
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info });
|
|
|
|
|
|
|
|
|
|
await expect(sut.handleGeneratePersonThumbnail({ id: personStub.primaryPerson.id })).resolves.toBe(
|
|
|
|
|
JobStatus.Success,
|
|
|
|
|
@@ -1732,8 +1747,8 @@ describe(MediaService.name, () => {
|
|
|
|
|
const data = Buffer.from('');
|
|
|
|
|
const info = { width: 2160, height: 3840 } as OutputInfo;
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extracted, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info, hasAlpha: false });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue(info);
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info });
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 2160, height: 3840, isTransparent: false });
|
|
|
|
|
|
|
|
|
|
await expect(sut.handleGeneratePersonThumbnail({ id: personStub.primaryPerson.id })).resolves.toBe(
|
|
|
|
|
JobStatus.Success,
|
|
|
|
|
@@ -1776,7 +1791,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
mocks.media.generateThumbnail.mockResolvedValue();
|
|
|
|
|
const data = Buffer.from('');
|
|
|
|
|
const info = { width: 2160, height: 3840 } as OutputInfo;
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info, hasAlpha: false });
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info });
|
|
|
|
|
|
|
|
|
|
await expect(sut.handleGeneratePersonThumbnail({ id: personStub.primaryPerson.id })).resolves.toBe(
|
|
|
|
|
JobStatus.Success,
|
|
|
|
|
@@ -1792,7 +1807,7 @@ describe(MediaService.name, () => {
|
|
|
|
|
mocks.media.generateThumbnail.mockResolvedValue();
|
|
|
|
|
const data = Buffer.from('');
|
|
|
|
|
const info = { width: 2160, height: 3840 } as OutputInfo;
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info, hasAlpha: false });
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info });
|
|
|
|
|
|
|
|
|
|
await expect(sut.handleGeneratePersonThumbnail({ id: personStub.primaryPerson.id })).resolves.toBe(
|
|
|
|
|
JobStatus.Success,
|
|
|
|
|
@@ -1814,9 +1829,9 @@ describe(MediaService.name, () => {
|
|
|
|
|
const extracted = Buffer.from('');
|
|
|
|
|
const data = Buffer.from('');
|
|
|
|
|
const info = { width: 1000, height: 1000 } as OutputInfo;
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info, hasAlpha: false });
|
|
|
|
|
mocks.media.decodeImage.mockResolvedValue({ data, info });
|
|
|
|
|
mocks.media.extract.mockResolvedValue({ buffer: extracted, format: RawExtractedFormat.Jpeg });
|
|
|
|
|
mocks.media.getImageDimensions.mockResolvedValue(info);
|
|
|
|
|
mocks.media.getImageMetadata.mockResolvedValue({ width: 1000, height: 1000, isTransparent: false });
|
|
|
|
|
|
|
|
|
|
await expect(sut.handleGeneratePersonThumbnail({ id: personStub.primaryPerson.id })).resolves.toBe(
|
|
|
|
|
JobStatus.Success,
|
|
|
|
|
|