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'); }); });