- 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>
62 lines
2.2 KiB
TypeScript
62 lines
2.2 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('Lista licenci', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await login(page);
|
|
});
|
|
|
|
test('prikazuje tabelu licenci', async ({ page }) => {
|
|
await page.goto('/licenses');
|
|
await expect(page.locator('h1')).toHaveText('Licence');
|
|
await expect(page.locator('table')).toBeVisible();
|
|
// Tabela ima ispravne kolone
|
|
const headers = page.locator('thead th');
|
|
await expect(headers.nth(0)).toHaveText('Kljuc');
|
|
await expect(headers.nth(1)).toHaveText('Proizvod');
|
|
await expect(headers.nth(2)).toHaveText('Firma');
|
|
await expect(headers.nth(3)).toHaveText('Tip');
|
|
});
|
|
|
|
test('ima dugme za novu licencu', async ({ page }) => {
|
|
await page.goto('/licenses');
|
|
const btn = page.locator('a[href="/licenses/new"]');
|
|
await expect(btn).toBeVisible();
|
|
await expect(btn).toHaveText('Nova licenca');
|
|
});
|
|
|
|
test('filteri su prikazani', async ({ page }) => {
|
|
await page.goto('/licenses');
|
|
await expect(page.locator('select[name="product"]')).toBeVisible();
|
|
await expect(page.locator('select[name="status"]')).toBeVisible();
|
|
await expect(page.locator('input[name="search"]')).toBeVisible();
|
|
});
|
|
|
|
test('filter po proizvodu radi', async ({ page }) => {
|
|
await page.goto('/licenses');
|
|
await page.selectOption('select[name="product"]', 'ESIR');
|
|
await page.click('button:has-text("Filtriraj")');
|
|
await expect(page).toHaveURL(/product=ESIR/);
|
|
});
|
|
|
|
test('filter po statusu radi', async ({ page }) => {
|
|
await page.goto('/licenses');
|
|
await page.selectOption('select[name="status"]', 'active');
|
|
await page.click('button:has-text("Filtriraj")');
|
|
await expect(page).toHaveURL(/status=active/);
|
|
});
|
|
|
|
test('pretraga po firmi radi', async ({ page }) => {
|
|
await page.goto('/licenses');
|
|
await page.fill('input[name="search"]', 'TestFirma');
|
|
await page.click('button:has-text("Filtriraj")');
|
|
await expect(page).toHaveURL(/search=TestFirma/);
|
|
});
|
|
});
|