61 lines
3.3 KiB
TypeScript
61 lines
3.3 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { loginAs, navigateTo, expectSidebarLink } from '../helpers/auth';
|
|
import { APP_URL } from '../helpers/api';
|
|
|
|
test.describe('OU Minimal — solo vista de grupos', () => {
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
await loginAs(page, 'minimal');
|
|
});
|
|
|
|
// ── Login ────────────────────────────────────────────────────────────────────
|
|
test('tras login aterriza en /groups', async ({ page }) => {
|
|
await expect(page).toHaveURL(/\/groups/);
|
|
});
|
|
|
|
// ── Sidebar: solo /groups ────────────────────────────────────────────────────
|
|
test.describe('Sidebar — solo ve /groups', () => {
|
|
test('ve /groups', async ({ page }) => expectSidebarLink(page, '/groups', true));
|
|
test('NO ve /dhcp-servers', async ({ page }) => expectSidebarLink(page, '/dhcp-servers', false));
|
|
test('NO ve /boot-servers', async ({ page }) => expectSidebarLink(page, '/boot-servers', false));
|
|
test('NO ve /calendars', async ({ page }) => expectSidebarLink(page, '/calendars', false));
|
|
test('NO ve /repositories', async ({ page }) => expectSidebarLink(page, '/repositories', false));
|
|
test('NO ve /menus', async ({ page }) => expectSidebarLink(page, '/menus', false));
|
|
});
|
|
|
|
// ── Rutas bloqueadas ─────────────────────────────────────────────────────────
|
|
test.describe('Todas las rutas protegidas redirigen a /groups', () => {
|
|
const blocked = [
|
|
'/users', '/roles', '/env-vars',
|
|
'/commands', '/dhcp-servers', '/boot-servers',
|
|
'/calendars', '/repositories', '/pxe',
|
|
'/clients/deploy-image', '/clients/partition-assistant', '/clients/run-script',
|
|
];
|
|
for (const route of blocked) {
|
|
test(`${route} → redirige a /groups`, async ({ page }) => {
|
|
const finalUrl = await navigateTo(page, route);
|
|
expect(finalUrl).toContain('/groups');
|
|
});
|
|
}
|
|
});
|
|
|
|
// ── GUI en /groups: sin botones de acción ────────────────────────────────────
|
|
test.describe('/groups — sin botones de creación ni edición', () => {
|
|
test('NO ve botones "Añadir OU" ni "Añadir cliente"', async ({ page }) => {
|
|
await page.goto(`${APP_URL}/groups`);
|
|
await page.waitForLoadState('networkidle');
|
|
const actionBtns = page.locator('button.action-button');
|
|
await expect(actionBtns).not.toBeAttached({ timeout: 5_000 });
|
|
});
|
|
|
|
test('NO ve botones de editar ni eliminar en el árbol de grupos', async ({ page }) => {
|
|
await page.goto(`${APP_URL}/groups`);
|
|
await page.waitForLoadState('networkidle');
|
|
// Los botones de editar/borrar nodo tienen *ngIf="auth.userCategory !== 'ou-minimal'"
|
|
// Se verifican a través del menú contextual que no debería aparecer con opciones de edición
|
|
const editBtns = page.locator('button').filter({ hasText: /editar|edit|modificar/i });
|
|
await expect(editBtns).not.toBeAttached({ timeout: 5_000 });
|
|
});
|
|
});
|
|
});
|