dal-license-server/tests/e2e/dashboard.spec.ts
djuka 5a046110f0 Dodao Playwright E2E testove i azurirao CLAUDE.md
- 7 E2E test fajlova (54 testa ukupno):
  - login.spec.ts: prijava, pogresna lozinka, redirect bez sesije
  - dashboard.spec.ts: statistike, navbar, odjava, root redirect
  - licenses.spec.ts: tabela, filteri, pretraga
  - license-crud.spec.ts: forma, kreiranje LT/ARV/ESIR licence
  - license-detail.spec.ts: informacije, aktivacije, audit, revoke, force release
  - audit.spec.ts: audit log stranica, kolone, generisanje zapisa
  - api-client.spec.ts: activate, deactivate, validate, revoke flow, API key auth
- CLAUDE.md: dodato pravilo o rigoroznom testiranju

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 07:50:43 +00:00

48 lines
1.7 KiB
TypeScript

import { test, expect, Page } from '@playwright/test';
async function login(page: Page) {
await page.goto('/login');
await page.fill('input[name="password"]', 'admin123');
await page.click('button[type="submit"]');
await expect(page).toHaveURL(/\/dashboard/);
}
test.describe('Dashboard', () => {
test.beforeEach(async ({ page }) => {
await login(page);
});
test('prikazuje statistike po proizvodu', async ({ page }) => {
await expect(page.locator('h1')).toHaveText('Dashboard');
await expect(page.locator('.stats-grid')).toBeVisible();
// Treba da postoje kartice za proizvode
const statCards = page.locator('.stat-card');
await expect(statCards).toHaveCount(3); // ESIR, ARV, LIGHT_TICKET
});
test('prikazuje tabelu poslednje aktivnosti', async ({ page }) => {
await expect(page.locator('h2', { hasText: 'Poslednja aktivnost' })).toBeVisible();
await expect(page.locator('table').last()).toBeVisible();
});
test('navbar ima ispravne linkove', async ({ page }) => {
await expect(page.locator('.nav-brand')).toHaveText('DAL License Server');
await expect(page.locator('a[href="/dashboard"]')).toBeVisible();
await expect(page.locator('a[href="/licenses"]')).toBeVisible();
await expect(page.locator('a[href="/audit"]')).toBeVisible();
});
test('odjava funkcionise', async ({ page }) => {
await page.click('button:has-text("Odjava")');
await expect(page).toHaveURL(/\/login/);
// Posle odjave ne moze na dashboard
await page.goto('/dashboard');
await expect(page).toHaveURL(/\/login/);
});
test('root preusmerava na dashboard', async ({ page }) => {
await page.goto('/');
await expect(page).toHaveURL(/\/dashboard/);
});
});