Files
immich/web/src/lib/components/asset-viewer/AssetViewer.spec.ts
T

80 lines
2.6 KiB
TypeScript

import { updateAsset } from '@immich/sdk';
import { fireEvent, waitFor } from '@testing-library/svelte';
import { getAnimateMock } from '$lib/__mocks__/animate.mock';
import { getResizeObserverMock } from '$lib/__mocks__/resize-observer.mock';
import { authManager } from '$lib/managers/auth-manager.svelte';
import { SlideshowState, slideshowStore } from '$lib/stores/slideshow.store';
import { renderWithTooltips } from '$tests/helpers';
import { assetFactory } from '@test-data/factories/asset-factory';
import { preferencesFactory } from '@test-data/factories/preferences-factory';
import { userAdminFactory } from '@test-data/factories/user-factory';
import AssetViewer from './AssetViewer.svelte';
vi.mock('$lib/managers/feature-flags-manager.svelte', () => ({
featureFlagsManager: {
init: vi.fn(),
loadFeatureFlags: vi.fn(),
value: { smartSearch: true, trash: true },
} as never,
}));
vi.mock('$lib/stores/ocr.svelte', () => ({
ocrManager: {
clear: vi.fn(),
getAssetOcr: vi.fn(),
hasOcrData: false,
showOverlay: false,
},
}));
vi.mock('@immich/sdk', async () => {
const sdk = await vi.importActual<typeof import('@immich/sdk')>('@immich/sdk');
return {
...sdk,
updateAsset: vi.fn(),
};
});
describe('AssetViewer', () => {
beforeAll(() => {
Element.prototype.animate = getAnimateMock();
vi.stubGlobal('ResizeObserver', getResizeObserverMock());
});
afterEach(() => {
slideshowStore.slideshowState.set(SlideshowState.None);
authManager.reset();
vi.clearAllMocks();
});
afterAll(() => {
vi.restoreAllMocks();
});
it.skip('updates the top bar favorite action after pressing favorite', async () => {
const ownerId = 'owner-id';
const user = userAdminFactory.build({ id: ownerId });
const asset = assetFactory.build({ ownerId, isFavorite: false, isTrashed: false });
authManager.setUser(user);
authManager.setPreferences(preferencesFactory.build({ cast: { gCastEnabled: false } }));
vi.mocked(updateAsset).mockResolvedValue({ ...asset, isFavorite: true });
const { getByLabelText, queryByLabelText } = renderWithTooltips(AssetViewer, {
cursor: { current: asset },
showNavigation: false,
});
expect(getByLabelText('to_favorite')).toBeInTheDocument();
expect(queryByLabelText('unfavorite')).toBeNull();
await fireEvent.click(getByLabelText('to_favorite'));
await waitFor(() =>
expect(updateAsset).toHaveBeenCalledWith({ id: asset.id, updateAssetDto: { isFavorite: true } }),
);
await waitFor(() => expect(getByLabelText('unfavorite')).toBeInTheDocument());
});
});