fix(uploads): pause previous audio preview when another starts
This commit is contained in:
1 parent
7d62531c02
commit
af06cf1e75
3 files changed
+44
-2
No files matched your search
@@ -1,7 +1,7 @@
|
||||
import { expect, test, type Page } from '@playwright/test';
|
||||
|
||||
function previewWav() {
|
||||
const dataSize = 8000 * 2 * 2;
|
||||
function previewWav(seconds = 2) {
|
||||
const dataSize = 8000 * 2 * seconds;
|
||||
const wav = Buffer.alloc(44 + dataSize);
|
||||
wav.write('RIFF', 0); wav.writeUInt32LE(36 + dataSize, 4); wav.write('WAVEfmt ', 8);
|
||||
wav.writeUInt32LE(16, 16); wav.writeUInt16LE(1, 20); wav.writeUInt16LE(1, 22);
|
||||
@@ -216,3 +216,24 @@ test('queue preview explains HTTP failures and recovers on retry', async ({ page
|
||||
await expect.poll(() => preview.locator('audio').evaluate((el: HTMLAudioElement) => el.duration)).toBe(2);
|
||||
await expect(preview.getByRole('alert')).toHaveCount(0);
|
||||
});
|
||||
|
||||
test('starting another queue preview pauses the previous track', async ({ page }) => {
|
||||
const wav = previewWav(10);
|
||||
await page.route('**/api/v1/admin/uploads/files/*/stream?*', (route) => route.fulfill({ contentType: 'audio/wav', body: wav }));
|
||||
await page.route('**/api/v1/stream/mobile-preview', (route) => route.fulfill({ contentType: 'audio/wav', body: wav }));
|
||||
await setup(page, 'queue');
|
||||
await page.getByRole('button', { name: 'Развернуть пачку', exact: true }).click();
|
||||
const first = page.locator('audio').nth(0);
|
||||
const second = page.locator('audio').nth(1);
|
||||
await first.evaluate((el: HTMLAudioElement) => el.play());
|
||||
await expect.poll(() => first.evaluate((el: HTMLAudioElement) => el.currentTime)).toBeGreaterThan(0);
|
||||
await second.evaluate((el: HTMLAudioElement) => el.play());
|
||||
await expect.poll(() => first.evaluate((el: HTMLAudioElement) => el.paused)).toBe(true);
|
||||
expect(await second.evaluate((el: HTMLAudioElement) => el.paused)).toBe(false);
|
||||
expect(await first.evaluate((el: HTMLAudioElement) => el.currentTime)).toBeGreaterThan(0);
|
||||
await first.evaluate((el: HTMLAudioElement) => el.play());
|
||||
await expect.poll(() => second.evaluate((el: HTMLAudioElement) => el.paused)).toBe(true);
|
||||
expect(await first.evaluate((el: HTMLAudioElement) => el.paused)).toBe(false);
|
||||
await page.getByRole('button', { name: 'Свернуть пачку', exact: true }).click();
|
||||
await expect.poll(() => first.evaluate((el: HTMLAudioElement) => el.paused)).toBe(true);
|
||||
});
|
||||
Reference in new issue
Block a user