oggui/ogWebconsole/e2e/permissions/ou-minimal.spec.ts

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