Files
Frontend-Iasis/src/constants/__tests__/breadcrumbs.test.ts

64 lines
1.8 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { breadcrumbRoutes } from '../breadcrumbs';
const expectedRoutes = [
'/',
'/entregaveis',
'/entregaveis/:id',
'/ordens-servico',
'/sprints',
'/profissionais',
'/usuarios',
'/usuarios/novo',
'/usuarios/:id/editar',
'/clientes',
'/configuracoes',
];
describe('breadcrumbRoutes', () => {
it('cobre todas as rotas do sistema', () => {
const patterns = breadcrumbRoutes.map((r) => r.pattern);
for (const route of expectedRoutes) {
expect(patterns).toContain(route);
}
});
it('cada configuração tem pelo menos um item', () => {
for (const route of breadcrumbRoutes) {
expect(route.items.length).toBeGreaterThanOrEqual(1);
}
});
it('último item de cada configuração não tem "to"', () => {
for (const route of breadcrumbRoutes) {
const lastItem = route.items[route.items.length - 1];
expect(lastItem.to).toBeUndefined();
}
});
it('rotas com parâmetros usam padrão :param', () => {
const dynamicRoutes = breadcrumbRoutes.filter((r) => r.pattern.includes(':'));
expect(dynamicRoutes.length).toBeGreaterThan(0);
for (const route of dynamicRoutes) {
expect(route.pattern).toMatch(/:\w+/);
}
});
it('Dashboard é sempre a raiz dos breadcrumbs', () => {
for (const route of breadcrumbRoutes) {
expect(route.items[0].label).toBe('Dashboard');
}
});
it('página Dashboard não tem link no item', () => {
const dashboardRoute = breadcrumbRoutes.find((r) => r.pattern === '/');
expect(dashboardRoute?.items[0].to).toBeUndefined();
});
it('não inclui rotas de autenticação', () => {
const patterns = breadcrumbRoutes.map((r) => r.pattern);
expect(patterns).not.toContain('/login');
expect(patterns).not.toContain('/trocar-senha');
});
});