66 lines
2.2 KiB
Go
66 lines
2.2 KiB
Go
package sqlite
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"ntech/internal/model"
|
|
)
|
|
|
|
// TestServisKreiraj_IdempotencyKey: dva poziva Kreiraj sa istim IdempotencyKey
|
|
// (simulira dupliran POST — dupli klik, "Nazad" pa ponovni submit, mrežni retry)
|
|
// vraćaju ISTI nalogID i ne prave drugi nalog — isti obrazac kao za prodaju
|
|
// (v. TestProdajaKreiraj_IdempotencyKey u prodaja_kreiraj_test.go).
|
|
func TestServisKreiraj_IdempotencyKey(t *testing.T) {
|
|
ctx := context.Background()
|
|
baza := testDB(t)
|
|
repo := NoviServisRepo(baza)
|
|
|
|
id1, err := repo.Kreiraj(ctx, &model.ServisniNalog{
|
|
Uredjaj: "Laptop", OpisKvara: "ne pali", Status: "Primljeno",
|
|
IdempotencyKey: "test-servis-kljuc-123",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("prvi Kreiraj: %v", err)
|
|
}
|
|
|
|
// drugi poziv sa ISTIM ključem (nov nalog, kao pri ponovljenom POST-u)
|
|
id2, err := repo.Kreiraj(ctx, &model.ServisniNalog{
|
|
Uredjaj: "Laptop", OpisKvara: "ne pali", Status: "Primljeno",
|
|
IdempotencyKey: "test-servis-kljuc-123",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("drugi Kreiraj (dupliran POST): %v", err)
|
|
}
|
|
|
|
if id1 != id2 {
|
|
t.Errorf("drugi poziv sa istim idempotency ključem vratio drugačiji ID: %d != %d — napravljen dupli nalog", id1, id2)
|
|
}
|
|
|
|
var brNaloga int
|
|
baza.QueryRowContext(ctx, "SELECT COUNT(*) FROM servisni_nalozi WHERE idempotency_key = ?", "test-servis-kljuc-123").Scan(&brNaloga)
|
|
if brNaloga != 1 {
|
|
t.Errorf("broj naloga sa ovim idempotency ključem = %d, očekivano 1", brNaloga)
|
|
}
|
|
}
|
|
|
|
// TestServisKreiraj_BezIdempotencyKljuca: prazan ključ (pozivalac ga ne koristi) —
|
|
// dva odvojena poziva prave DVA odvojena naloga, kao i pre uvođenja zaštite.
|
|
func TestServisKreiraj_BezIdempotencyKljuca(t *testing.T) {
|
|
ctx := context.Background()
|
|
baza := testDB(t)
|
|
repo := NoviServisRepo(baza)
|
|
|
|
id1, err := repo.Kreiraj(ctx, &model.ServisniNalog{Uredjaj: "PC", OpisKvara: "kvar", Status: "Primljeno"})
|
|
if err != nil {
|
|
t.Fatalf("prvi Kreiraj: %v", err)
|
|
}
|
|
id2, err := repo.Kreiraj(ctx, &model.ServisniNalog{Uredjaj: "PC", OpisKvara: "kvar", Status: "Primljeno"})
|
|
if err != nil {
|
|
t.Fatalf("drugi Kreiraj: %v", err)
|
|
}
|
|
if id1 == id2 {
|
|
t.Errorf("bez idempotency ključa očekivana dva različita naloga, dobijen isti ID %d", id1)
|
|
}
|
|
}
|