72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
/// <reference types="node" />
|
|
|
|
import { existsSync } from 'node:fs';
|
|
import { basename } from 'node:path';
|
|
import { expect, test } from '@playwright/test';
|
|
|
|
const mediaPath = process.env.AV_TOOLS_LARGE_MEDIA;
|
|
|
|
test('plays a recognized large local video before detailed inspection', async ({
|
|
page,
|
|
}) => {
|
|
test.skip(
|
|
!mediaPath || !existsSync(mediaPath),
|
|
'Set AV_TOOLS_LARGE_MEDIA to a local video for this opt-in evidence run.'
|
|
);
|
|
test.setTimeout(360_000);
|
|
await page.goto('/');
|
|
|
|
const startedAt = Date.now();
|
|
await page
|
|
.locator('input[type="file"][accept*="audio"]')
|
|
.first()
|
|
.setInputFiles(mediaPath as string);
|
|
const name = basename(mediaPath as string);
|
|
const card = page.locator('.media-card').filter({ hasText: name });
|
|
const preview = page.locator('.preview video');
|
|
await expect(preview).toBeVisible({ timeout: 15_000 });
|
|
const previewVisibleMilliseconds = Date.now() - startedAt;
|
|
expect(previewVisibleMilliseconds).toBeLessThan(15_000);
|
|
await expect(card.locator('.phase--idle')).toContainText('Details on demand');
|
|
await expect(card).toContainText(/43:42\.\d{2}/u, { timeout: 15_000 });
|
|
expect(
|
|
await page.evaluate(() =>
|
|
performance
|
|
.getEntriesByType('resource')
|
|
.some((entry) => entry.name.includes('/vendor/ffmpeg/'))
|
|
)
|
|
).toBe(false);
|
|
|
|
const elementIdentity = await preview.evaluate((element) => {
|
|
element.dataset.evidenceIdentity = crypto.randomUUID();
|
|
return element.dataset.evidenceIdentity;
|
|
});
|
|
await preview.evaluate(async (element) => {
|
|
const video = element as HTMLVideoElement;
|
|
video.muted = true;
|
|
await video.play();
|
|
});
|
|
await expect
|
|
.poll(
|
|
() =>
|
|
preview.evaluate(
|
|
(element) => (element as HTMLVideoElement).currentTime
|
|
),
|
|
{
|
|
timeout: 15_000,
|
|
}
|
|
)
|
|
.toBeGreaterThan(0);
|
|
|
|
await page
|
|
.getByRole('button', { name: `Inspect details for ${name}` })
|
|
.click();
|
|
await expect(card.locator('.phase--probing')).toBeVisible();
|
|
await expect(card.locator('.phase--ready')).toBeVisible({ timeout: 120_000 });
|
|
await expect(preview).toHaveAttribute(
|
|
'data-evidence-identity',
|
|
elementIdentity
|
|
);
|
|
await expect(page.getByRole('alert')).toHaveCount(0);
|
|
});
|