fix(web): download toast showing wrong filename for motion assets (#26689)

This commit is contained in:
Snowknight26
2026-03-04 09:22:48 -06:00
committed by GitHub
parent 011ecbb43d
commit 8279e1078a
2 changed files with 50 additions and 4 deletions

View File

@@ -1,9 +1,34 @@
import { getAssetActions } from '$lib/services/asset.service';
import { getAssetActions, handleDownloadAsset } from '$lib/services/asset.service';
import { user as userStore } from '$lib/stores/user.store';
import { setSharedLink } from '$lib/utils';
import { getFormatter } from '$lib/utils/i18n';
import { getAssetInfo } from '@immich/sdk';
import { toastManager } from '@immich/ui';
import { assetFactory } from '@test-data/factories/asset-factory';
import { sharedLinkFactory } from '@test-data/factories/shared-link-factory';
import { userAdminFactory } from '@test-data/factories/user-factory';
import { vitest } from 'vitest';
vitest.mock('@immich/ui', () => ({
toastManager: {
success: vitest.fn(),
},
}));
vitest.mock('$lib/utils/i18n', () => ({
getFormatter: vitest.fn(),
getPreferredLocale: vitest.fn(),
}));
vitest.mock('@immich/sdk');
vitest.mock('$lib/utils', async () => {
const originalModule = await vitest.importActual('$lib/utils');
return {
...originalModule,
sleep: vitest.fn(),
};
});
describe('AssetService', () => {
describe('getAssetActions', () => {
@@ -34,4 +59,27 @@ describe('AssetService', () => {
expect(assetActions.SharedLinkDownload.$if?.()).toStrictEqual(true);
});
});
describe('handleDownloadAsset', () => {
it('should use the asset originalFileName when showing toasts', async () => {
const $t = vitest.fn().mockReturnValue('formatter');
vitest.mocked(getFormatter).mockResolvedValue($t);
const asset = assetFactory.build({ originalFileName: 'asset.heic' });
await handleDownloadAsset(asset, { edited: false });
expect($t).toHaveBeenNthCalledWith(1, 'downloading_asset_filename', { values: { filename: 'asset.heic' } });
expect(toastManager.success).toHaveBeenCalledWith('formatter');
});
it('should use the motion asset originalFileName when showing toasts', async () => {
const $t = vitest.fn().mockReturnValue('formatter');
vitest.mocked(getFormatter).mockResolvedValue($t);
const motionAsset = assetFactory.build({ originalFileName: 'asset.mov' });
vitest.mocked(getAssetInfo).mockResolvedValue(motionAsset);
const asset = assetFactory.build({ originalFileName: 'asset.heic', livePhotoVideoId: '1' });
await handleDownloadAsset(asset, { edited: false });
expect($t).toHaveBeenNthCalledWith(1, 'downloading_asset_filename', { values: { filename: 'asset.heic' } });
expect($t).toHaveBeenNthCalledWith(2, 'downloading_asset_filename', { values: { filename: 'asset.mov' } });
expect(toastManager.success).toHaveBeenCalledWith('formatter');
});
});
});

View File

@@ -294,7 +294,6 @@ export const handleDownloadAsset = async (asset: AssetResponseDto, { edited }: {
{
filename: asset.originalFileName,
id: asset.id,
size: asset.exifInfo?.fileSizeInByte || 0,
},
];
@@ -308,7 +307,6 @@ export const handleDownloadAsset = async (asset: AssetResponseDto, { edited }: {
assets.push({
filename: motionAsset.originalFileName,
id: asset.livePhotoVideoId,
size: motionAsset.exifInfo?.fileSizeInByte || 0,
});
}
}
@@ -322,7 +320,7 @@ export const handleDownloadAsset = async (asset: AssetResponseDto, { edited }: {
}
try {
toastManager.success($t('downloading_asset_filename', { values: { filename: asset.originalFileName } }));
toastManager.success($t('downloading_asset_filename', { values: { filename } }));
downloadUrl(
getBaseUrl() +
`/assets/${id}/original` +