Files
GoNtech/internal/handler/podsetnici_test.go
T

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)
}
})
}
}