Files
GoNtech/internal/model/servis_test.go
T
Dasko 99ae077082 Dashboard/izveštaji: ispravka obračuna prihoda + KIR servisa, testovi
- Prihod meseca: izbačeni stornirani nalozi, servis preko naplaceno+avans
- Servis KIR: neto cena + PDV po stvarnoj stopi (PdvKir.DodajNeto), bez hardkodovanih 20%
- TopKlijenti: samo preuzeti nalozi sa naplatom/avansom
- Izveštaji: mesečni ključevi sidreni na 1. u mesecu (bez preliva dana)
- BUG-04: konačna cena servisa bez dvostrukog računanja delova
- Dashboard: uklonjena kartica „Prihod ovog meseca"
- Default port 3000
- Dodati testovi: prihod/storno/delovi/nivelacija/KIR/mesečni ključevi
2026-06-27 09:41:07 +02:00

90 lines
2.1 KiB
Go

package model
import "testing"
func TestServisniNalog_PreostaloZaNaplatu(t *testing.T) {
slucajevi := []struct {
naziv string
konacna *float64
avans *float64
ocekivano *float64
}{
{
naziv: "cena_konacna nil → nil (nije uneta)",
konacna: nil,
avans: nil,
ocekivano: nil,
},
{
naziv: "bez avansa → puna cena",
konacna: ptr(2000),
avans: nil,
ocekivano: ptr(2000),
},
{
naziv: "avans manji od cene → razlika",
konacna: ptr(2000),
avans: ptr(500),
ocekivano: ptr(1500),
},
{
naziv: "avans jednak ceni → 0",
konacna: ptr(2000),
avans: ptr(2000),
ocekivano: ptr(0),
},
{
naziv: "avans veći od cene → 0 (ne ide u minus)",
konacna: ptr(1000),
avans: ptr(1500),
ocekivano: ptr(0),
},
}
for _, s := range slucajevi {
t.Run(s.naziv, func(t *testing.T) {
n := ServisniNalog{CenaKonacna: s.konacna, Avans: s.avans}
dobijeno := n.PreostaloZaNaplatu()
if s.ocekivano == nil {
if dobijeno != nil {
t.Errorf("dobijeno %v, očekivano nil", *dobijeno)
}
return
}
if dobijeno == nil {
t.Fatalf("dobijeno nil, očekivano %.2f", *s.ocekivano)
}
if !jednako(*dobijeno, *s.ocekivano) {
t.Errorf("dobijeno %.2f, očekivano %.2f", *dobijeno, *s.ocekivano)
}
})
}
}
func TestServisniDeo_Ukupno(t *testing.T) {
d := ServisniDeo{Kolicina: 3, CenaKomada: 150}
if !jednako(d.Ukupno(), 450) {
t.Errorf("Ukupno = %.2f, očekivano 450", d.Ukupno())
}
}
func TestServisniDeoSaArtiklom_UkupnoSaPdv(t *testing.T) {
d := ServisniDeoSaArtiklom{
ServisniDeo: ServisniDeo{Kolicina: 2},
CenaSaPdv: 600,
}
if !jednako(d.UkupnoSaPdv(), 1200) {
t.Errorf("UkupnoSaPdv = %.2f, očekivano 1200", d.UkupnoSaPdv())
}
}
func TestServisniRad_UkupnoIUkupnoSaPdv(t *testing.T) {
r := ServisniRad{Kolicina: 2, CenaKomada: 1000, PdvStopa: 20, CenaSaPdv: 1200}
if !jednako(r.Ukupno(), 2000) {
t.Errorf("Ukupno = %.2f, očekivano 2000", r.Ukupno())
}
if !jednako(r.UkupnoSaPdv(), 2400) {
t.Errorf("UkupnoSaPdv = %.2f, očekivano 2400", r.UkupnoSaPdv())
}
}