You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
4.3 KiB
70 lines
4.3 KiB
import { test, expect } from '@playwright/test';
|
|
import { randomUUID } from 'node:crypto';
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto('/entrar');
|
|
await page.getByLabel('Código de prueba', { exact: true }).fill('123456');
|
|
await page.getByRole('button', { name: 'Entrar', exact: true }).click();
|
|
await expect(page.getByRole('navigation', { name: 'Administración' })).toBeVisible();
|
|
});
|
|
test('una persona combina tipos, se puede editar y aparece al filtrar letristas', async ({
|
|
page
|
|
}) => {
|
|
const nombre = 'Persona integral ' + randomUUID().slice(0, 8);
|
|
await page.goto('/personas/nuevo');
|
|
await page.getByLabel('Nombre o título').fill(nombre);
|
|
for (const tipo of ['Artista', 'Letrista', 'Compositor', 'Artista virtual'])
|
|
await page.getByRole('checkbox', { name: tipo, exact: true }).check();
|
|
await page.getByRole('button', { name: 'Crear borrador', exact: false }).click();
|
|
await expect(page.getByRole('heading', { name: nombre, exact: true, level: 1 })).toBeVisible();
|
|
await expect(page.locator('.tipos-ficha')).toContainText('Letrista');
|
|
await page.getByRole('link', { name: 'Datos y contenido', exact: true }).click();
|
|
await expect(page.getByRole('checkbox', { name: 'Artista virtual', exact: true })).toBeChecked();
|
|
await page.getByRole('checkbox', { name: 'Músico', exact: true }).check();
|
|
await page.getByLabel('Nombre legal', { exact: true }).fill('Nombre para autoría');
|
|
await page.getByRole('button', { name: 'Guardar borrador', exact: true }).first().click();
|
|
await expect(page.getByRole('status')).toContainText('guardado');
|
|
await page.reload();
|
|
await expect(page.getByRole('checkbox', { name: 'Músico', exact: true })).toBeChecked();
|
|
await expect(page.getByLabel('Nombre legal', { exact: true })).toHaveValue('Nombre para autoría');
|
|
await page.screenshot({ path: 'docs/assets/estudio/persona.png', fullPage: true });
|
|
await page.goto('/personas');
|
|
await page.getByLabel('Buscar personas', { exact: true }).fill(nombre);
|
|
await page.getByLabel('Tipo de persona', { exact: true }).selectOption('letrista');
|
|
await page.locator('main').getByRole('button', { name: 'Buscar', exact: true }).click();
|
|
const fila = page
|
|
.getByRole('row')
|
|
.filter({ has: page.getByRole('link', { name: nombre, exact: true }) });
|
|
await expect(fila).toContainText('Letrista');
|
|
await expect(fila).toContainText('Artista virtual');
|
|
await page.screenshot({ path: 'docs/assets/estudio/personas.png', fullPage: true });
|
|
});
|
|
test('crear un letrista desde los créditos lo clasifica y conserva la grabación', async ({
|
|
page
|
|
}) => {
|
|
await page.goto('/canciones/nuevo');
|
|
await page.getByLabel('Nombre o título').fill('Canción con letra ' + randomUUID().slice(0, 8));
|
|
await page.getByRole('button', { name: 'Crear borrador', exact: false }).click();
|
|
await page.getByRole('link', { name: 'Grabaciones', exact: true }).click();
|
|
await page.getByRole('link', { name: 'Abrir →', exact: true }).click();
|
|
await page.getByRole('link', { name: 'Créditos', exact: true }).click();
|
|
const letra = page
|
|
.locator('section.bloque')
|
|
.filter({ has: page.getByRole('heading', { name: 'Autoría de la letra', exact: true }) });
|
|
await letra.getByRole('button', { name: 'Crear', exact: false }).click();
|
|
const dialog = page.getByRole('dialog');
|
|
const nombre = 'Letrista ' + randomUUID().slice(0, 8);
|
|
await expect(dialog.getByRole('checkbox', { name: 'Letrista', exact: true })).toBeChecked();
|
|
await dialog.getByLabel('Nombre', { exact: true }).fill(nombre);
|
|
await dialog.getByRole('checkbox', { name: 'Compositor', exact: true }).check();
|
|
await dialog.getByRole('button', { name: 'Crear y seleccionar' }).click();
|
|
await expect(dialog).not.toBeVisible();
|
|
await expect(letra.getByRole('link', { name: nombre, exact: true })).toBeVisible();
|
|
await page.getByRole('button', { name: 'Guardar borrador', exact: true }).click();
|
|
await expect(page.getByRole('status')).toContainText('guardado');
|
|
await letra.getByRole('link', { name: nombre, exact: true }).click();
|
|
await expect(page.getByRole('heading', { name: nombre, exact: true, level: 1 })).toBeVisible();
|
|
await page.getByRole('link', { name: 'Datos y contenido', exact: true }).click();
|
|
await expect(page.getByRole('checkbox', { name: 'Letrista', exact: true })).toBeChecked();
|
|
await expect(page.getByRole('checkbox', { name: 'Compositor', exact: true })).toBeChecked();
|
|
});
|