michangarrito-frontend-v2/e2e/orders.spec.ts
rckrdmrd 67d3eef6a5 Migración desde michangarrito/frontend - Estándar multi-repo v2
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 08:12:10 -06:00

150 lines
4.3 KiB
TypeScript

import { test, expect } from '@playwright/test';
import { TEST_ORDER, TEST_CUSTOMER, ROUTES } from './fixtures/test-data';
/**
* E2E Tests - Pedidos y Fiado
* MiChangarrito Frontend
*
* Nota: Estos tests requieren autenticacion previa
* y un backend corriendo con datos de prueba
*/
test.describe('Pedidos - Sin Autenticacion', () => {
test('redirige a login si no esta autenticado', async ({ page }) => {
await page.goto(ROUTES.orders);
await expect(page).toHaveURL('/login');
});
test('fiado redirige a login sin autenticacion', async ({ page }) => {
await page.goto(ROUTES.fiado);
await expect(page).toHaveURL('/login');
});
test('clientes redirige a login sin autenticacion', async ({ page }) => {
await page.goto(ROUTES.customers);
await expect(page).toHaveURL('/login');
});
});
test.describe('Pedidos - Estructura de Datos', () => {
test('datos de pedido de prueba tienen estructura correcta', () => {
expect(TEST_ORDER.items).toBeInstanceOf(Array);
expect(TEST_ORDER.items.length).toBeGreaterThan(0);
expect(TEST_ORDER.total).toBeGreaterThan(0);
expect(TEST_ORDER.paymentMethod).toBeDefined();
// Verificar estructura de items
const item = TEST_ORDER.items[0];
expect(item.productId).toBeDefined();
expect(item.quantity).toBeGreaterThan(0);
expect(item.price).toBeGreaterThan(0);
});
test('datos de cliente de prueba tienen estructura correcta', () => {
expect(TEST_CUSTOMER.name).toBeDefined();
expect(TEST_CUSTOMER.phone).toBeDefined();
expect(TEST_CUSTOMER.phone.length).toBe(10);
expect(TEST_CUSTOMER.creditLimit).toBeGreaterThanOrEqual(0);
});
test('total del pedido es correcto', () => {
// Verificar calculo: 2 * 18.00 + 1 * 25.00 = 61.00
const calculatedTotal = TEST_ORDER.items.reduce(
(sum, item) => sum + item.quantity * item.price,
0
);
expect(calculatedTotal).toBe(TEST_ORDER.total);
});
});
test.describe('Sistema de Fiado', () => {
test('rutas de fiado protegidas', async ({ page }) => {
const fiadoRoutes = [
'/fiado',
'/customers',
];
for (const route of fiadoRoutes) {
await page.goto(route);
await expect(page).toHaveURL('/login');
}
});
});
test.describe('Historial de Pedidos', () => {
test('ruta de pedidos protegida', async ({ page }) => {
await page.goto('/orders');
await expect(page).toHaveURL('/login');
});
test('ruta de dashboard protegida', async ({ page }) => {
await page.goto(ROUTES.dashboard);
await expect(page).toHaveURL('/login');
});
});
test.describe('Clientes', () => {
test('ruta de clientes protegida', async ({ page }) => {
await page.goto('/customers');
await expect(page).toHaveURL('/login');
});
test('validacion de limite de credito', () => {
// El limite de credito debe ser un numero positivo o cero
expect(TEST_CUSTOMER.creditLimit).toBeGreaterThanOrEqual(0);
expect(typeof TEST_CUSTOMER.creditLimit).toBe('number');
});
});
test.describe('Metodos de Pago', () => {
test('metodo de pago valido', () => {
const validPaymentMethods = ['cash', 'card', 'transfer', 'fiado'];
expect(validPaymentMethods).toContain(TEST_ORDER.paymentMethod);
});
});
test.describe('Configuracion', () => {
test('ruta de configuracion protegida', async ({ page }) => {
await page.goto(ROUTES.settings);
await expect(page).toHaveURL('/login');
});
});
test.describe('Rutas Completas', () => {
test('todas las rutas definidas en fixtures existen', () => {
const expectedRoutes = [
'login',
'register',
'dashboard',
'products',
'orders',
'customers',
'fiado',
'inventory',
'settings',
];
for (const route of expectedRoutes) {
expect(ROUTES[route as keyof typeof ROUTES]).toBeDefined();
expect(ROUTES[route as keyof typeof ROUTES]).toMatch(/^\//);
}
});
test('todas las rutas protegidas redirigen a login', async ({ page }) => {
const protectedRoutes = [
ROUTES.dashboard,
ROUTES.products,
ROUTES.orders,
ROUTES.customers,
ROUTES.fiado,
ROUTES.inventory,
ROUTES.settings,
];
for (const route of protectedRoutes) {
await page.goto(route);
await expect(page).toHaveURL('/login');
}
});
});