Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Giofelix/Proyecto-automatizacion-Empresa/llms.txt

Use this file to discover all available pages before exploring further.

El fixture paginaAutenticada es la base de toda la suite de automation-arqc. En lugar de ejecutar el flujo completo de login Angular en cada test (que implica dos pasos con reintentos y navegación pesada), este fixture lee la sesión ya autenticada desde playwright/.auth/user.json, la inyecta directamente en el sessionStorage del navegador mediante page.addInitScript(), y navega a la aplicación — todo antes de que el test reciba la página. El resultado es que cada test arranca ya autenticado, sin repetir la secuencia de credenciales, lo que reduce el tiempo de setup por test a menos de tres segundos.

fixtures/index.js — punto de entrada recomendado

Para la mayoría de los tests, la importación correcta es desde fixtures/index.js. Este archivo re-exporta el test extendido con paginaAutenticada y sirve como punto de entrada unificado que evita importar auth.fixture.js directamente.
import { test, expect } from '../../fixtures/index.js';
// Exposes only paginaAutenticada
// Tests needing pre-created data must import the specific fixture:
//   fixtures/reteica/contribuyente.fixture.js
//   fixtures/reteica/tercero.fixture.js
El contenido completo de fixtures/index.js es:
fixtures/index.js
// Punto de entrada base para todos los tests.
// Solo expone paginaAutenticada (sin fixtures de datos).
//
// Tests que necesitan datos precreados deben importar el fixture específico:
//   contribuyentes + tercero:  fixtures/reteica/contribuyente.fixture.js
//   solo tercero:              fixtures/reteica/tercero.fixture.js

import { expect } from '@playwright/test';
import { test } from './auth.fixture.js';

export { test, expect };

Fixture paginaAutenticada

PropiedadValor
ScopePor defecto (per-test)
Definido enfixtures/auth.fixture.js
Exportado desdefixtures/index.js
Parámetro de Playwright{ page } del base test

Secuencia de setup

Cuando Playwright configura el fixture antes de cada test, ejecuta los siguientes pasos en orden:
  1. Lee playwright/.auth/user.json usando readFileSync — este archivo contiene el objeto { sessionStorage: { ... } } generado por global-setup.js durante el login inicial.
  2. Inyecta las claves de sessionStorage mediante page.addInitScript(), que registra un script que corre en el contexto del navegador antes de que se cargue cualquier página — garantizando que Angular encuentra la sesión ya presente desde el primer frame.
  3. Navega a process.env.BASE_URL con waitUntil: 'domcontentloaded' para no bloquear en recursos lentos sobre VPN.
  4. Espera que la URL coincida con **/modulos** — confirma que Angular completó el redirect de autenticación y cargó el módulo principal.
  5. Espera que .mat-drawer-inner-container sea visible — confirma que el shell de Angular Material está listo para la interacción.
  6. Cede la página autenticada al test vía use(page).

Código fuente completo

fixtures/auth.fixture.js
import { test as base, expect } from '@playwright/test';
import { readFileSync } from 'fs';
import { resolve } from 'path';
import dotenv from 'dotenv';

dotenv.config({ path: resolve(__dirname, '../.env') });

const authFile = resolve(__dirname, '../playwright/.auth/user.json');

const test = base.extend({
  paginaAutenticada: async ({ page }, use) => {
    const authData = JSON.parse(readFileSync(authFile, 'utf8'));

    await page.addInitScript((sessionData) => {
      for (const [key, value] of Object.entries(sessionData)) {
        window.sessionStorage.setItem(key, value);
      }
    }, authData.sessionStorage);

    await page.goto(process.env.BASE_URL, { timeout: 60000, waitUntil: 'domcontentloaded' });
    await page.waitForURL('**/modulos**', { timeout: 30000 });
    await page.locator('.mat-drawer-inner-container').waitFor({ state: 'visible', timeout: 30000 });

    await use(page);
  }
});

export { test, expect };

auth.fixture.js vs fixtures/index.js

Estos dos archivos cumplen roles distintos y complementarios:
  • auth.fixture.js define la extensión del fixture. Contiene toda la lógica de lectura de user.json, inyección de sessionStorage y espera de carga Angular. Es la fuente de verdad del comportamiento de autenticación.
  • fixtures/index.js actúa como punto de entrada unificado para los tests. Re-exporta { test, expect } desde auth.fixture.js sin añadir lógica. Los fixtures de datos de Reteica (tercero.fixture.js, contribuyente.fixture.js, establecimiento.fixture.js) extienden sobre auth.fixture.js directamente en lugar de pasar por index.js, porque necesitan añadir más fixtures encadenados sobre la misma base.
La regla de uso es simple: si tu test no necesita datos precreados, importa desde index.js. Si necesita entidades Reteica ya creadas, importa desde el fixture específico.

Cuándo usar cada punto de entrada

EscenarioImportar desde
Test de componente (CRUD de una sola pantalla)fixtures/index.js
Test de login o navegación básicafixtures/index.js
Test que necesita un Tercero precreadofixtures/reteica/tercero.fixture.js
Test que necesita un Contribuyente precreadofixtures/reteica/contribuyente.fixture.js
Flujo E2E de declaración (necesita Establecimiento)fixtures/reteica/establecimiento.fixture.js
En todos los casos, el fixture paginaAutenticada está disponible — los fixtures de Reteica lo heredan a través de la cadena de extensión y lo exponen al test bajo el mismo nombre.
// Uso en cualquier test que importa desde index.js o desde un fixture Reteica
test('TC-TER-01 — Navegación y carga del listado',
  { tag: '@smoke @terceros @reteica @tagprueba' },
  async ({ paginaAutenticada: page }) => {
    // `page` ya está autenticada y en /modulos
    await expect(page).toHaveURL(/.*modulos.*/);
  }
);
Si playwright/.auth/user.json no existe (por ejemplo, tras un git clone limpio o después de que global-teardown.js lo eliminó), readFileSync lanzará un error de parseo de JSON. Antes de ejecutar cualquier test, genera la sesión con:
node playwright/global-setup.js
En CI esto ocurre automáticamente durante la etapa Ejecución de Pruebas de Jenkins, que siempre invoca globalSetup antes del primer test.

Build docs developers (and LLMs) love