package utils
import (
"regexp"
"testing"
)
func TestGenerateShortID(t *testing.T) {
id, err := GenerateShortID()
if err != nil {
t.Fatalf("GenerateShortID() error = %v", err)
}
if len(id) != 12 {
t.Errorf("GenerateShortID() length = %d, want 12", len(id))
}
validPattern := regexp.MustCompile(`^[0-9A-Za-z_-]{12}$`)
if !validPattern.MatchString(id) {
t.Errorf("GenerateShortID() = %q, contains invalid characters", id)
}
ids := make(map[string]bool)
for i := 0; i < 100; i++ {
id, err := GenerateShortID()
if err != nil {
t.Fatalf("GenerateShortID() iteration %d error = %v", i, err)
}
if ids[id] {
t.Errorf("GenerateShortID() produced duplicate: %q", id)
}
ids[id] = true
}
}
func TestGenerateLongID(t *testing.T) {
id, err := GenerateLongID()
if err != nil {
t.Fatalf("GenerateLongID() error = %v", err)
}
if len(id) != 21 {
t.Errorf("GenerateLongID() length = %d, want 21", len(id))
}
validPattern := regexp.MustCompile(`^[0-9A-Za-z_-]{21}$`)
if !validPattern.MatchString(id) {
t.Errorf("GenerateLongID() = %q, contains invalid characters", id)
}
ids := make(map[string]bool)
for i := 0; i < 100; i++ {
id, err := GenerateLongID()
if err != nil {
t.Fatalf("GenerateLongID() iteration %d error = %v", i, err)
}
if ids[id] {
t.Errorf("GenerateLongID() produced duplicate: %q", id)
}
ids[id] = true
}
}
func TestIDsAreDifferent(t *testing.T) {
shortID, err := GenerateShortID()
if err != nil {
t.Fatalf("GenerateShortID() error = %v", err)
}
longID, err := GenerateLongID()
if err != nil {
t.Fatalf("GenerateLongID() error = %v", err)
}
if len(shortID) == len(longID) {
t.Error("Short and long IDs should have different lengths")
}
if len(shortID) != 12 {
t.Errorf("Short ID length = %d, want 12", len(shortID))
}
if len(longID) != 21 {
t.Errorf("Long ID length = %d, want 21", len(longID))
}
}