- 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>
150 lines
4.3 KiB
TypeScript
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');
|
|
}
|
|
});
|
|
});
|