test: prva grupa testova (kripto, model, RBAC, helperi, TOTP repo)

Dodati testovi pored koda:
- internal/model: CenaBezPdv/PdvIznos, Klijent.PunoIme, PreostaloZaNaplatu
- internal/middleware: ImaDozvolu matrica po ulogama + SveDozvole
- internal/handler: izvuciIP, parseOpcionuCenu, validnoImeBackupa (anti path-traversal)
- internal/db/sqlite: integracioni nad privremenom SQLite bazom + prave migracije
  (TOTP šifrovan u mirovanju, brisanje, ZasifrujPostojeceTotp + idempotentnost)

19 test funkcija, prolaze i sa -race. Dopunjava kripto_test.go iz ranije.
This commit is contained in:
2026-06-12 22:07:32 +02:00
parent aa5cb62138
commit 2fb7c2d529
4 changed files with 359 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
package middleware
import "testing"
func TestImaDozvoluSuperadmin(t *testing.T) {
// superadmin sme sve, uključujući akcije koje ni ne postoje
for _, akcija := range []string{"artikal.obrisi", "prodaja.storno", "backup.pokreni", "nepostojeca.akcija"} {
if !ImaDozvolu("superadmin", akcija) {
t.Errorf("superadmin bi morao da sme %q", akcija)
}
}
}
func TestImaDozvoluAdmin(t *testing.T) {
sme := []string{"artikal.obrisi", "prodaja.storno", "backup.pokreni", "izvestaj.pregled", "podesavanja.izmeni", "dashboard.prihod"}
for _, a := range sme {
if !ImaDozvolu("admin", a) {
t.Errorf("admin bi morao da sme %q", a)
}
}
// admin ne sme nepostojeću akciju
if ImaDozvolu("admin", "nepostojeca.akcija") {
t.Error("admin ne bi smeo nepostojeću akciju")
}
}
func TestImaDozvoluRadnik(t *testing.T) {
sme := []string{"kategorija.pregled", "dobavljac.dodaj", "servis.izmeni", "prodaja.dodaj", "klijent.izmeni", "tema.lokalno"}
for _, a := range sme {
if !ImaDozvolu("radnik", a) {
t.Errorf("radnik bi morao da sme %q", a)
}
}
// radnik NE sme: brisanje, storno, izveštaje, podešavanja, backup
neSme := []string{"prodaja.obrisi", "prodaja.storno", "servis.obrisi", "klijent.obrisi",
"dobavljac.obrisi", "izvestaj.pregled", "podesavanja.izmeni", "backup.pokreni", "dashboard.prihod"}
for _, a := range neSme {
if ImaDozvolu("radnik", a) {
t.Errorf("radnik NE bi smeo %q", a)
}
}
}
func TestImaDozvoluNepoznataUloga(t *testing.T) {
if ImaDozvolu("gost", "kategorija.pregled") {
t.Error("nepoznata uloga ne sme ništa")
}
}
func TestSveDozvolePokrivaSveAkcije(t *testing.T) {
m := SveDozvole("radnik")
if len(m) != len(sveAkcije) {
t.Fatalf("SveDozvole vraća %d akcija, očekivano %d", len(m), len(sveAkcije))
}
for _, a := range sveAkcije {
if _, ok := m[a]; !ok {
t.Errorf("akcija %q nedostaje u SveDozvole", a)
}
}
}