HEX
Server: LiteSpeed
System: Linux in-mum-web785.main-hosting.eu 4.18.0-553.34.1.lve.el8.x86_64 #1 SMP Thu Jan 9 16:30:32 UTC 2025 x86_64
User: u338768758 (338768758)
PHP: 8.3.30
Disabled: system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
Upload Files
File: //opt/go/pkg/mod/github.com/go-openapi/validate@v0.21.0/formats_test.go
package validate

import (
	"fmt"
	"reflect"
	"testing"

	"github.com/go-openapi/spec"
	"github.com/go-openapi/strfmt"
	"github.com/stretchr/testify/assert"
)

// Validator for string formats
func TestFormatValidator_EdgeCases(t *testing.T) {
	// Apply
	v := formatValidator{
		KnownFormats: strfmt.Default,
	}

	// formatValidator applies to: Items, Parameter,Schema

	p := spec.Parameter{}
	p.Typed(stringType, "email")
	s := spec.Schema{}
	s.Typed(stringType, "uuid")
	i := spec.Items{}
	i.Typed(stringType, "datetime")

	sources := []interface{}{&p, &s, &i}

	for _, source := range sources {
		// Default formats for strings
		assert.True(t, v.Applies(source, reflect.String))
		// Do not apply for number formats
		assert.False(t, v.Applies(source, reflect.Int))
	}

	assert.False(t, v.Applies("A string", reflect.String))
	assert.False(t, v.Applies(nil, reflect.String))
}

func TestStringValidation(t *testing.T) {
	type testParams struct {
		format string
		obj    fmt.Stringer
	}

	testCases := []*testParams{
		{
			format: "datetime",
			obj:    strfmt.NewDateTime(),
		},
		{
			format: "uuid",
			obj:    strfmt.UUID("00000000-0000-0000-0000-000000000000"),
		},
		{
			format: "email",
			obj:    strfmt.Email("name@domain.tld"),
		},
		{
			format: "bsonobjectid",
			obj:    strfmt.NewObjectId("60a7903427a1e6666d2b998c"),
		},
	}

	for _, v := range testCases {
		err := FormatOf("id", "body", v.format, v.obj.String(), strfmt.Default)
		assert.Nil(t, err)
	}
}