dal-license-server/TESTING.md
djuka 1b8db5e4a7 Obimni testovi: 179 ukupno (46 Go + 133 Playwright)
Novi Go testovi:
- config_test.go: 9 testova (defaults, override, DSN, .env loading)
- helpers_test.go: 13 testova (writeJSON, writeError, clientIP)

Prosireni E2E testovi za svaku stranicu:
- login: 15 testova (forma, auth, redirect, sesije)
- dashboard: 18 testova (statistike, navbar, navigacija, odjava)
- licenses: 20 testova (tabela, filteri, pretraga, kombinacije)
- license-crud: 22 testa (forma, validacija, svi proizvodi/tipovi)
- license-detail: 26 testova (info, aktivacije, audit, revoke, release)
- audit: 14 testova (tabela, API zapisi, formati)
- api-client: 18 testova (activate flow, auth, revoke flow)

Azuriran TESTING.md sa kompletnom checklistom

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

8.1 KiB

DAL License Server — Test Checklista

Ukupno testova: 179

  • Go unit testovi: 46
  • Playwright E2E testovi: 133

Pokretanje testova

# Go unit testovi
go test ./internal/... -v -count=1

# Playwright E2E testovi (server mora biti pokrenut na :8090)
npx playwright test

# Sve zajedno
go test ./internal/... -v -count=1 && npx playwright test

Go Unit Testovi (46)

Config (9 testova)

  • Podrazumevane vrednosti (port, env, db, rsa, rate limit)
  • Override iz env varijabli
  • DSN format (parseTime, charset, multiStatements)
  • DSN sa specijalnim karakterima
  • Ucitavanje .env fajla
  • Postojece env varijable se ne prepisuju iz .env
  • Komentari u .env se preskacu
  • Prazne linije u .env se preskacu
  • Nepostojeci .env fajl ne izaziva gresku

Keygen (4 testa)

  • Format kljuca: {PREFIX}-XXXX-XXXX-XXXX-XXXX
  • Samo dozvoljeni karakteri (A-H, J-N, P-Y, 2-9)
  • Nema konfuznih karaktera (O, 0, I, 1, L, Z)
  • Jedinstvenost 100 generisanih kljuceva

Crypto Service (7 testova)

  • Kreiranje servisa sa validnim kljucem
  • Greska za nepostojeci fajl
  • Greska za nevalidan PEM
  • Potpis format (RSA-SHA256:base64...)
  • Verifikacija potpisa sa public key-em
  • Tampered data ne prolazi verifikaciju
  • Generisanje public key PEM-a

Model — License (13 testova)

  • IsExpired: PERPETUAL (nikad ne istice)
  • IsExpired: aktivna licenca
  • IsExpired: istekla licenca
  • IsInGrace: nije istekla → false
  • IsInGrace: istekla pre 5 dana, grace 30 → true
  • IsInGrace: istekla pre 35 dana, grace 30 → false
  • IsInGrace: PERPETUAL → false
  • IsGraceExpired: istekao grace
  • IsGraceExpired: PERPETUAL → false
  • MaskedKey: LT, ESIR, ARV prefiksi
  • StatusText: revoked, inactive, active, trial, grace, expired
  • StatusClass: status-active, status-revoked
  • ExpiresAtFormatted: datum format i Neograniceno

Handler Helpers (13 testova)

  • writeJSON: status 200, Content-Type, body
  • writeJSON: status 201
  • writeJSON: nil data
  • writeJSON: prazan slice []
  • writeError: 400 sa kodom i porukom
  • writeError: 401 Unauthorized
  • writeError: 500 Internal Server Error
  • writeLicenseError: LicenseError → 400
  • writeLicenseError: genericka greska → 500
  • clientIP: RemoteAddr
  • clientIP: X-Forwarded-For
  • clientIP: X-Real-IP
  • clientIP: X-Forwarded-For prioritet

Middleware Auth (3 testa)

  • Validan API kljuc → 200
  • Bez kljuca → 401
  • Pogresan kljuc → 401

Middleware Rate Limit (4 testa)

  • Dozvoljeni zahtevi prolaze (do limita)
  • Zahtev preko limita → blokiran
  • Razliciti IP-ovi imaju odvojene limite
  • X-Forwarded-For se koristi za identifikaciju

Playwright E2E Testovi (133)

Login stranica (15 testova)

  • Prikazuje login formu sa svim elementima
  • Password polje ima autofocus
  • Forma ima ispravnu action i method
  • Prijava sa ispravnom lozinkom preusmerava na dashboard
  • Prijava sa pogresnom lozinkom prikazuje gresku
  • Prijava sa praznom lozinkom (browser validacija)
  • Razlicite pogresne lozinke (7 pokusaja)
  • Pristup /dashboard bez logina → redirect
  • Pristup /licenses bez logina → redirect
  • Pristup /licenses/new bez logina → redirect
  • Pristup /audit bez logina → redirect
  • Pristup /licenses/1 bez logina → redirect
  • CSS je ucitan
  • Ispravan page title
  • Visestruki logini kreiraju razlicite sesije

Dashboard stranica (18 testova)

  • Prikazuje naslov Dashboard
  • 3 statisticke kartice (ESIR, ARV, LIGHT_TICKET)
  • Svaka kartica prikazuje ime proizvoda
  • Svaka kartica prikazuje sve metrike (5 redova)
  • Sekcija poslednje aktivnosti
  • Tabela aktivnosti ima ispravne kolone
  • Navbar prikazuje brend
  • Navbar dashboard link je aktivan
  • Navbar ima link na licence
  • Navbar ima link na audit log
  • Navbar ima dugme za odjavu
  • Odjava preusmerava na login
  • Posle odjave ne moze na dashboard
  • Root (/) preusmerava na dashboard
  • Navigacija na licence
  • Navigacija na audit
  • Ispravan page title
  • htmx je ucitan

Lista licenci — stranica (20 testova)

  • Prikazuje naslov Licence
  • Ispravan page title
  • Tabela sa 7 ispravnih kolona
  • Dugme za novu licencu (btn-primary)
  • Dugme vodi na formu
  • Filter dropdown za proizvod (4 opcije)
  • Filter dropdown za status (5 opcija)
  • Pretraga polje sa placeholder-om
  • Filtriraj dugme
  • Filter po ESIR proizvodu
  • Filter po ARV proizvodu
  • Filter po LIGHT_TICKET proizvodu
  • Filter po statusu active
  • Filter po statusu expired
  • Filter po statusu revoked
  • Pretraga po firmi
  • Kombinacija filtera (proizvod + status)
  • Filter cuva selekciju posle submit-a
  • Navbar licence link je aktivan
  • Poruka kad nema licenci

Kreiranje licence — forma (14 testova)

  • Naslov Nova licenca
  • Ispravan page title
  • Sva polja forme prikazana
  • customer_name je obavezan (required)
  • product_id je obavezan (required)
  • license_type je obavezan (required)
  • Dropdown ima min 3 proizvoda
  • Dropdown ima sve tipove licenci
  • grace_days default je 30
  • limits placeholder
  • email polje ima type email
  • Otkazi dugme vodi na listu
  • Forma ima POST method
  • Kreiraj licencu dugme (btn-primary)

Kreiranje licence — svi proizvodi (8 testova)

  • LIGHT_TICKET MONTHLY sa svim poljima + format kljuca
  • LIGHT_TICKET PERPETUAL (Neograniceno)
  • ARV ANNUAL
  • ARV TRIAL
  • ESIR PERPETUAL
  • ESIR MONTHLY
  • Kreirana licenca se pojavljuje u listi
  • Kreirana licenca ima status Aktivna

Detalji licence — informacije (8 testova)

  • Licencni kljuc u naslovu
  • Status badge
  • Sekcija Informacije
  • Sva informaciona polja (8 polja)
  • Ispravni podaci za LT licencu
  • Ispravni podaci za ARV licencu
  • PERPETUAL prikazuje Neograniceno
  • Ispravan title sa kljucem

Detalji licence — aktivacije i audit (6 testova)

  • Tabela aktivacija
  • Nova licenca nema aktivacija
  • Tabela aktivacija ima ispravne kolone
  • Audit log za licencu
  • CREATE audit zapis
  • Audit tabela ima ispravne kolone

Detalji licence — akcije (10 testova)

  • Sekcija Akcije
  • Dugme za opoziv (btn-danger)
  • Dugme za force release (btn-warning)
  • Polje za razlog opoziva
  • Revoke menja status na Opozvana
  • Revoke generise REVOKE audit zapis
  • Posle revoke-a dugme za opoziv nestaje
  • Posle revoke-a force release ostaje
  • Force release funkcionise
  • Force release generise FORCE_RELEASE audit zapis

Detalji licence — navigacija (2 testa)

  • Klik iz liste otvara detalje
  • Navbar licence link aktivan

Audit Log stranica (11 testova)

  • Naslov Audit Log
  • Ispravan page title
  • Tabela prikazana
  • 5 kolona (Vreme, Akcija, Licenca, IP, Detalji)
  • Navbar audit link aktivan
  • Navigacija iz navbara
  • CREATE zapis posle kreiranja licence
  • Licencni kljuc prikazan u auditu
  • IP adresa prikazana
  • Vreme u DD.MM.YYYY formatu
  • Detalji kao JSON

Audit Log — API zapisi (3 testa)

  • ACTIVATE zapis posle aktivacije
  • DEACTIVATE zapis posle deaktivacije
  • VALIDATE zapis posle validacije

Klijentski API (8 testova)

  • Aktivacija licence (200 + potpis)
  • Ponovna aktivacija istim fingerprint-om (refresh)
  • Aktivacija sa drugog racunara → ALREADY_ACTIVATED
  • Validacija aktivne licence
  • Deaktivacija licence
  • Re-aktivacija posle deaktivacije
  • Nepostojeci kljuc → INVALID_KEY
  • Validacija nepostojeceg kljuca → valid: false

Admin API autentifikacija (7 testova)

  • Bez API kljuca → 401
  • Pogresan kljuc → 401
  • Ispravan kljuc → 200
  • Products endpoint
  • Stats endpoint
  • Audit endpoint
  • Health endpoint

Admin API — Revoke flow (3 testa)

  • Revoke licence
  • Aktivacija opozvane → KEY_REVOKED
  • Validacija opozvane → valid: false, revoked: true

Poslednje azuriranje: 04.03.2026 — 179 testova (46 Go + 133 Playwright)