package service import ( "strings" "testing" ) func TestGenerateKey_Format(t *testing.T) { prefixes := []string{"ESIR-", "ARV-", "LT-"} for _, prefix := range prefixes { key, err := GenerateKey(prefix) if err != nil { t.Fatalf("GenerateKey(%q) error: %v", prefix, err) } if !strings.HasPrefix(key, prefix) { t.Errorf("key %q nema prefix %q", key, prefix) } // Remove prefix, check 4 groups of 4 chars separated by dashes rest := strings.TrimPrefix(key, prefix) groups := strings.Split(rest, "-") if len(groups) != 4 { t.Errorf("key %q: ocekivano 4 grupe, dobijeno %d", key, len(groups)) } for i, g := range groups { if len(g) != 4 { t.Errorf("key %q: grupa %d ima %d karaktera umesto 4", key, i, len(g)) } } } } func TestGenerateKey_ValidChars(t *testing.T) { key, err := GenerateKey("TEST-") if err != nil { t.Fatal(err) } rest := strings.TrimPrefix(key, "TEST-") rest = strings.ReplaceAll(rest, "-", "") for _, c := range rest { if !strings.ContainsRune(keyChars, c) { t.Errorf("key sadrzi nedozvoljen karakter: %c", c) } } } func TestGenerateKey_NoConfusingChars(t *testing.T) { // Generate multiple keys and check none contain O, 0, I, 1, L, Z confusing := "OIL01Z" for i := 0; i < 50; i++ { key, err := GenerateKey("T-") if err != nil { t.Fatal(err) } rest := strings.TrimPrefix(key, "T-") rest = strings.ReplaceAll(rest, "-", "") for _, c := range rest { if strings.ContainsRune(confusing, c) { t.Errorf("key sadrzi konfuzan karakter %c: %s", c, key) } } } } func TestGenerateKey_Uniqueness(t *testing.T) { seen := make(map[string]bool) for i := 0; i < 100; i++ { key, err := GenerateKey("U-") if err != nil { t.Fatal(err) } if seen[key] { t.Errorf("duplikat kljuca: %s", key) } seen[key] = true } }