- HERENCIA-SIMCO.md actualizado con directivas v3.7 y v3.8 - Cambios en backend y frontend Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
104 lines
3.1 KiB
TypeScript
104 lines
3.1 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { TEST_PRODUCT, ROUTES } from './fixtures/test-data';
|
|
|
|
/**
|
|
* E2E Tests - Punto de Venta (POS)
|
|
* MiChangarrito Frontend
|
|
*
|
|
* Nota: Estos tests requieren autenticacion previa
|
|
* y un backend corriendo con datos de prueba
|
|
*/
|
|
|
|
test.describe('Punto de Venta - Sin Autenticacion', () => {
|
|
test('redirige a login si no esta autenticado', async ({ page }) => {
|
|
await page.goto('/pos');
|
|
await expect(page).toHaveURL('/login');
|
|
});
|
|
});
|
|
|
|
test.describe('Punto de Venta - UI Basica', () => {
|
|
// Estos tests verifican la estructura esperada del POS
|
|
// cuando el usuario esta autenticado
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
// Mock de autenticacion para tests
|
|
// En un escenario real, se usaria un fixture de login
|
|
await page.goto('/login');
|
|
});
|
|
|
|
test('pagina de productos existe', async ({ page }) => {
|
|
await page.goto(ROUTES.products);
|
|
// Sin auth, redirige a login
|
|
await expect(page).toHaveURL('/login');
|
|
});
|
|
});
|
|
|
|
test.describe('Punto de Venta - Flujo de Venta', () => {
|
|
// Tests de flujo completo de venta
|
|
// Requieren setup de autenticacion
|
|
|
|
test('estructura del formulario de busqueda', async ({ page }) => {
|
|
await page.goto('/login');
|
|
|
|
// Verificar que la pagina de login tiene estructura correcta
|
|
// antes de poder probar el POS
|
|
await expect(page.locator('form')).toBeVisible();
|
|
});
|
|
});
|
|
|
|
test.describe('Carrito de Compras', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto('/login');
|
|
});
|
|
|
|
test('login tiene campos necesarios para acceder al POS', async ({ page }) => {
|
|
// Verificar campos necesarios
|
|
await expect(page.locator('input[name="phone"]')).toBeVisible();
|
|
await expect(page.locator('input[name="pin"]')).toBeVisible();
|
|
await expect(page.locator('button[type="submit"]')).toBeVisible();
|
|
});
|
|
});
|
|
|
|
test.describe('Busqueda de Productos', () => {
|
|
test('rutas de productos protegidas', async ({ page }) => {
|
|
// Verificar que todas las rutas relacionadas al POS estan protegidas
|
|
const posRoutes = [
|
|
'/products',
|
|
'/pos',
|
|
'/inventory',
|
|
];
|
|
|
|
for (const route of posRoutes) {
|
|
await page.goto(route);
|
|
await expect(page).toHaveURL('/login');
|
|
}
|
|
});
|
|
});
|
|
|
|
test.describe('Metodos de Pago', () => {
|
|
test('verificar existencia de ruta de pedidos', async ({ page }) => {
|
|
await page.goto(ROUTES.orders);
|
|
// Sin auth, redirige
|
|
await expect(page).toHaveURL('/login');
|
|
});
|
|
});
|
|
|
|
test.describe('Recibos y Tickets', () => {
|
|
test('estructura de datos de producto de prueba', () => {
|
|
// Verificar que los datos de prueba tienen la estructura correcta
|
|
expect(TEST_PRODUCT.name).toBeDefined();
|
|
expect(TEST_PRODUCT.price).toBeGreaterThan(0);
|
|
expect(TEST_PRODUCT.cost).toBeGreaterThan(0);
|
|
expect(TEST_PRODUCT.stock).toBeGreaterThanOrEqual(0);
|
|
expect(TEST_PRODUCT.sku).toBeDefined();
|
|
expect(TEST_PRODUCT.barcode).toBeDefined();
|
|
});
|
|
});
|
|
|
|
test.describe('Inventario desde POS', () => {
|
|
test('ruta de inventario protegida', async ({ page }) => {
|
|
await page.goto(ROUTES.inventory);
|
|
await expect(page).toHaveURL('/login');
|
|
});
|
|
});
|