//go:build test package validators import ( "testing" "github.com/stretchr/testify/assert" ) func TestIsValidID_ValidHex(t *testing.T) { t.Parallel() assert.True(t, IsValidID("a1b2c3d4e5f6")) } func TestIsValidID_TooShort(t *testing.T) { t.Parallel() assert.False(t, IsValidID("abc")) } func TestIsValidID_TooLong(t *testing.T) { t.Parallel() assert.False(t, IsValidID("abcdef1234567")) } func TestIsValidID_NonHexChars(t *testing.T) { t.Parallel() assert.False(t, IsValidID("zzzzzzzzzzzz")) } func TestIsValidID_Empty(t *testing.T) { t.Parallel() assert.False(t, IsValidID("")) } func TestIsValidID_MixedCase(t *testing.T) { t.Parallel() assert.True(t, IsValidID("ABCDEF123456")) } func TestIsValidID_AllZeros(t *testing.T) { t.Parallel() assert.True(t, IsValidID("000000000000")) } func TestValidate_StructWithJSONTag(t *testing.T) { t.Parallel() type withTag struct { Name string `json:"name" validate:"required"` } err := Validate.Struct(withTag{}) assert.Error(t, err) assert.Contains(t, err.Error(), "name") } func TestValidate_StructWithIgnoredTag(t *testing.T) { t.Parallel() type withIgnored struct { Secret string `json:"-" validate:"required"` } err := Validate.Struct(withIgnored{}) assert.Error(t, err) } func TestValidate_ValidStruct(t *testing.T) { t.Parallel() type validStruct struct { Name string `json:"name" validate:"required"` } err := Validate.Struct(validStruct{Name: "hello"}) assert.NoError(t, err) } func TestIsValidSquareCheckoutID_AcceptsRealSquareID(t *testing.T) { t.Parallel() // Real Square checkout IDs are opaque UUIDs, not local 12-hex DB IDs. assert.True(t, IsValidSquareCheckoutID("08YceKh7B3ZqO")) assert.True(t, IsValidSquareCheckoutID("a1b2c3d4e5f6")) } func TestIsValidSquareCheckoutID_RejectsInvalid(t *testing.T) { t.Parallel() assert.False(t, IsValidSquareCheckoutID("")) assert.False(t, IsValidSquareCheckoutID("../etc/passwd")) assert.False(t, IsValidSquareCheckoutID("has spaces")) assert.False(t, IsValidSquareCheckoutID("abc")) // too short }