Files
GoNtech/internal/config/moduli_test.go
T
Dasko b0188fd069 Profil firme: preduzetnik_knjige pokriven u modulima + informativna tabela
ModulKpo sada obuhvata i preduzetnik_knjige (proste knjige)
Dodata tabela sa pregledom svih kombinacija pravnog oblika, PDV-a, fiskalizacije, KPO i dvojnog
Napomene: PDV prag 8M, paušalni limit 6M, fiskalizacija obavezna za sve
2026-06-25 23:13:14 +02:00

97 lines
3.7 KiB
Go

package config
import (
"maps"
"testing"
)
func TestModulUkljucen(t *testing.T) {
// pun je profil punog režima sa svim prekidačima upaljenim i pravnim oblikom doo;
// pojedinačni testovi ga prepravljaju po potrebi preko pomoćne funkcije izmeni.
pun := map[string]string{
KljucRezim: "pun",
KljucPdvObveznik: "da",
KljucFiskalizacija: "da",
KljucPravniOblik: "doo",
}
// izmeni vraća kopiju mape sa promenjenim/dodatim ključem (da testovi ne dele stanje)
izmeni := func(osnova map[string]string, kljuc, vrednost string) map[string]string {
kopija := make(map[string]string, len(osnova)+1)
maps.Copy(kopija, osnova)
kopija[kljuc] = vrednost
return kopija
}
testovi := []struct {
naziv string
podesavanja map[string]string
modul string
ocekivano bool
}{
// master prekidač: režim „samo evidencija" gasi sve
{"prazna mapa — pdv ugašen (default samo_evidencija)", map[string]string{}, ModulPdv, false},
{"prazna mapa — fiskalizacija ugašena", map[string]string{}, ModulFiskalizacija, false},
{"prazna mapa — kpo ugašen", map[string]string{}, ModulKpo, false},
{"prazna mapa — dvojno ugašeno", map[string]string{}, ModulDvojno, false},
{"samo evidencija gasi pdv iako je obveznik", izmeni(pun, KljucRezim, "samo_evidencija"), ModulPdv, false},
{"samo evidencija gasi fiskalizaciju iako je upaljena", izmeni(pun, KljucRezim, "samo_evidencija"), ModulFiskalizacija, false},
// fiskalizacija — zaseban prekidač, nezavisan od oblika
{"pun + fiskalizacija da", pun, ModulFiskalizacija, true},
{"pun + fiskalizacija ne", izmeni(pun, KljucFiskalizacija, "ne"), ModulFiskalizacija, false},
// pdv — vezan isključivo za prekidač obveznika
{"pun + obveznik da", pun, ModulPdv, true},
{"pun + obveznik ne (čak i doo)", izmeni(pun, KljucPdvObveznik, "ne"), ModulPdv, false},
// kpo — paušalac i preduzetnik knjigaš (proste knjige)
{"pun + paušalac → kpo", izmeni(pun, KljucPravniOblik, "pausalac"), ModulKpo, true},
{"pun + doo → nema kpo", pun, ModulKpo, false},
{"pun + preduzetnik → kpo", izmeni(pun, KljucPravniOblik, "preduzetnik_knjige"), ModulKpo, true},
// dvojno — doo uvek, preduzetnik opciono (budući toggle)
{"pun + doo → dvojno", pun, ModulDvojno, true},
{"pun + paušalac → nema dvojno", izmeni(pun, KljucPravniOblik, "pausalac"), ModulDvojno, false},
{"pun + preduzetnik → nema dvojno (buduća podela)", izmeni(pun, KljucPravniOblik, "preduzetnik_knjige"), ModulDvojno, false},
// nepoznat modul
{"nepoznat modul → false", pun, "nepostojeci", false},
}
for _, tt := range testovi {
t.Run(tt.naziv, func(t *testing.T) {
if got := ModulUkljucen(tt.podesavanja, tt.modul); got != tt.ocekivano {
t.Errorf("ModulUkljucen(%q) = %v, očekivano %v", tt.modul, got, tt.ocekivano)
}
})
}
}
func TestSviModuli(t *testing.T) {
// pun režim, doo, PDV obveznik, fiskalizacija → pdv, fiskalizacija, dvojno uključeni; kpo ne
pod := map[string]string{
KljucRezim: "pun",
KljucPdvObveznik: "da",
KljucFiskalizacija: "da",
KljucPravniOblik: "doo",
}
m := SviModuli(pod)
if len(m) != 4 {
t.Fatalf("SviModuli vraća %d modula, očekivano 4", len(m))
}
ocek := map[string]bool{ModulPdv: true, ModulFiskalizacija: true, ModulKpo: false, ModulDvojno: true}
for modul, want := range ocek {
if m[modul] != want {
t.Errorf("SviModuli[%q] = %v, očekivano %v", modul, m[modul], want)
}
}
// samo evidencija → svi ugašeni
prazna := SviModuli(map[string]string{KljucRezim: "samo_evidencija"})
for modul, ukljucen := range prazna {
if ukljucen {
t.Errorf("u režimu samo_evidencija modul %q ne sme biti uključen", modul)
}
}
}