pp-planer/tests/e2e/ccli-translation-pairing.spec.ts

62 lines
2.3 KiB
TypeScript

import { test, expect } from '@playwright/test';
import * as fs from 'fs';
test.describe('CCLI Translation Pairing', () => {
test('Translate.vue shows prefill banner when arrived from CCLI pairing', async ({ page }) => {
await page.goto('/songs');
await page.waitForLoadState('networkidle');
const cookies = await page.context().cookies();
const xsrf = cookies.find(c => c.name === 'XSRF-TOKEN')?.value ?? '';
const content = fs.readFileSync('tests/Fixtures/ccli/english-only-multi-verse.txt', 'utf-8');
const importRes = await page.request.post('/api/songs/import-from-ccli-paste', {
headers: {
'Content-Type': 'application/json',
'X-XSRF-TOKEN': decodeURIComponent(xsrf),
},
data: { raw_text: content, mode: 'create' },
});
if (importRes.status() !== 201) {
test.skip();
return;
}
const { song_id } = await importRes.json();
await page.goto(`/songs/${song_id}/translate`);
await page.waitForLoadState('networkidle');
await expect(page.getByTestId('translate-source-textarea')).toBeVisible();
});
test('Translate.vue shows no prefill banner without prefill param', async ({ page }) => {
await page.goto('/songs');
await page.waitForLoadState('networkidle');
const cookies = await page.context().cookies();
const xsrf = cookies.find(c => c.name === 'XSRF-TOKEN')?.value ?? '';
const content = fs.readFileSync('tests/Fixtures/ccli/english-only-multi-verse.txt', 'utf-8');
const importRes = await page.request.post('/api/songs/import-from-ccli-paste', {
headers: {
'Content-Type': 'application/json',
'X-XSRF-TOKEN': decodeURIComponent(xsrf),
},
data: { raw_text: content, mode: 'create' },
});
if (importRes.status() !== 201) {
test.skip();
return;
}
const { song_id } = await importRes.json();
await page.goto(`/songs/${song_id}/translate`);
await page.waitForLoadState('networkidle');
const banner = page.getByTestId('ccli-prefill-banner');
await expect(banner).not.toBeVisible();
});
});