mirror of
https://github.com/immich-app/immich.git
synced 2026-04-25 10:39:50 -04:00
85 lines
2.8 KiB
TypeScript
85 lines
2.8 KiB
TypeScript
import { faker } from '@faker-js/faker';
|
|
import type { AssetResponseDto } from '@immich/sdk';
|
|
import { expect, test } from '@playwright/test';
|
|
import { toAssetResponseDto } from 'src/ui/generators/timeline';
|
|
import {
|
|
createMockStack,
|
|
createMockStackAsset,
|
|
MockStack,
|
|
setupBrokenAssetMockApiRoutes,
|
|
} from 'src/ui/mock-network/broken-asset-network';
|
|
import { assetViewerUtils } from '../timeline/utils';
|
|
import { enableTagsPreference, ensureDetailPanelVisible, setupAssetViewerFixture } from './utils';
|
|
|
|
test.describe.configure({ mode: 'parallel' });
|
|
test.describe('asset-viewer stack', () => {
|
|
const fixture = setupAssetViewerFixture(888);
|
|
let mockStack: MockStack;
|
|
let primaryAssetDto: AssetResponseDto;
|
|
let secondAssetDto: AssetResponseDto;
|
|
|
|
test.beforeAll(async () => {
|
|
primaryAssetDto = toAssetResponseDto(fixture.primaryAsset);
|
|
primaryAssetDto.tags = [
|
|
{
|
|
id: faker.string.uuid(),
|
|
name: '1',
|
|
value: 'test/1',
|
|
createdAt: new Date().toISOString(),
|
|
updatedAt: new Date().toISOString(),
|
|
},
|
|
];
|
|
|
|
secondAssetDto = createMockStackAsset(fixture.adminUserId);
|
|
secondAssetDto.tags = [
|
|
{
|
|
id: faker.string.uuid(),
|
|
name: '2',
|
|
value: 'test/2',
|
|
createdAt: new Date().toISOString(),
|
|
updatedAt: new Date().toISOString(),
|
|
},
|
|
];
|
|
|
|
mockStack = createMockStack(primaryAssetDto, [secondAssetDto], new Set());
|
|
});
|
|
|
|
test.beforeEach(async ({ context }) => {
|
|
await setupBrokenAssetMockApiRoutes(context, mockStack);
|
|
});
|
|
|
|
test('stack slideshow is visible', async ({ page }) => {
|
|
await page.goto(`/photos/${fixture.primaryAsset.id}`);
|
|
await assetViewerUtils.waitForViewerLoad(page, fixture.primaryAsset);
|
|
|
|
const stackSlideshow = page.locator('#stack-slideshow');
|
|
await expect(stackSlideshow).toBeVisible();
|
|
|
|
const stackAssets = stackSlideshow.locator('[data-asset]');
|
|
await expect(stackAssets).toHaveCount(mockStack.assets.length);
|
|
});
|
|
|
|
test('tags of primary asset are visible', async ({ context, page }) => {
|
|
await enableTagsPreference(context);
|
|
|
|
await page.goto(`/photos/${fixture.primaryAsset.id}`);
|
|
await ensureDetailPanelVisible(page);
|
|
|
|
const tags = page.getByTestId('detail-panel-tags').getByRole('link');
|
|
await expect(tags.first()).toHaveText('test/1');
|
|
});
|
|
|
|
test('tags of second asset are visible', async ({ context, page }) => {
|
|
await enableTagsPreference(context);
|
|
|
|
await page.goto(`/photos/${fixture.primaryAsset.id}`);
|
|
await ensureDetailPanelVisible(page);
|
|
|
|
const stackAssets = page.locator('#stack-slideshow [data-asset]');
|
|
await stackAssets.nth(1).click();
|
|
|
|
const tags = page.getByTestId('detail-panel-tags').getByRole('link');
|
|
await expect(tags.first()).toHaveText('test/2');
|
|
});
|
|
});
|