44 lines
1.5 KiB
Go
44 lines
1.5 KiB
Go
package handler
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"ntech/internal/model"
|
|
)
|
|
|
|
// TestKorisnikSmeDaMenjaPodsetnik proverava zaštitu od IDOR-a: radnik sme da menja/briše
|
|
// samo sopstveni podsetnik, admin/superadmin smeju bilo koji.
|
|
func TestKorisnikSmeDaMenjaPodsetnik(t *testing.T) {
|
|
radnik := &model.Korisnik{ID: 1, Uloga: "radnik"}
|
|
drugiRadnik := &model.Korisnik{ID: 2, Uloga: "radnik"}
|
|
admin := &model.Korisnik{ID: 3, Uloga: "admin"}
|
|
|
|
svojPodsetnik := &model.Podsetnik{ID: 100, KorisnikID: p(1)}
|
|
tudjPodsetnik := &model.Podsetnik{ID: 101, KorisnikID: p(2)}
|
|
nedodeljenPodsetnik := &model.Podsetnik{ID: 102, KorisnikID: nil}
|
|
|
|
slucajevi := []struct {
|
|
naziv string
|
|
korisnik *model.Korisnik
|
|
podsetnik *model.Podsetnik
|
|
ocekivano bool
|
|
}{
|
|
{"radnik menja svoj podsetnik", radnik, svojPodsetnik, true},
|
|
{"radnik ne sme tuđi podsetnik", radnik, tudjPodsetnik, false},
|
|
{"drugi radnik ne sme tuđi podsetnik", drugiRadnik, svojPodsetnik, false},
|
|
{"radnik ne sme nedodeljen podsetnik", radnik, nedodeljenPodsetnik, false},
|
|
{"admin sme tuđi podsetnik", admin, tudjPodsetnik, true},
|
|
{"admin sme nedodeljen podsetnik", admin, nedodeljenPodsetnik, true},
|
|
}
|
|
|
|
for _, sc := range slucajevi {
|
|
t.Run(sc.naziv, func(t *testing.T) {
|
|
dobijeno := korisnikSmeDaMenjaPodsetnik(sc.korisnik, sc.podsetnik)
|
|
if dobijeno != sc.ocekivano {
|
|
t.Errorf("korisnikSmeDaMenjaPodsetnik(%+v, %+v) = %v, očekivano %v",
|
|
sc.korisnik, sc.podsetnik, dobijeno, sc.ocekivano)
|
|
}
|
|
})
|
|
}
|
|
}
|