mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
* ent: add default value setter to enum builder Co-authored-by: Dario Ielardi <dario.ielardi@gmail.com>
209 lines
5.8 KiB
Go
209 lines
5.8 KiB
Go
// Copyright 2019-present Facebook Inc. All rights reserved.
|
|
// This source code is licensed under the Apache 2.0 license found
|
|
// in the LICENSE file in the root directory of this source tree.
|
|
|
|
package field_test
|
|
|
|
import (
|
|
"net/http"
|
|
"regexp"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/facebookincubator/ent/schema/field"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestInt(t *testing.T) {
|
|
f := field.Int("age").Positive()
|
|
fd := f.Descriptor()
|
|
assert.Equal(t, "age", fd.Name)
|
|
assert.Equal(t, field.TypeInt, fd.Info.Type)
|
|
assert.Len(t, fd.Validators, 1)
|
|
|
|
f = field.Int("age").Default(10).Min(10).Max(20)
|
|
fd = f.Descriptor()
|
|
assert.NotNil(t, fd.Default)
|
|
assert.Equal(t, 10, fd.Default)
|
|
assert.Len(t, fd.Validators, 2)
|
|
|
|
f = field.Int("age").Range(20, 40).Nillable()
|
|
fd = f.Descriptor()
|
|
assert.Nil(t, fd.Default)
|
|
assert.True(t, fd.Nillable)
|
|
assert.False(t, fd.Immutable)
|
|
assert.Len(t, fd.Validators, 1)
|
|
|
|
assert.Equal(t, field.TypeInt8, field.Int8("age").Descriptor().Info.Type)
|
|
assert.Equal(t, field.TypeInt16, field.Int16("age").Descriptor().Info.Type)
|
|
assert.Equal(t, field.TypeInt32, field.Int32("age").Descriptor().Info.Type)
|
|
assert.Equal(t, field.TypeInt64, field.Int64("age").Descriptor().Info.Type)
|
|
assert.Equal(t, field.TypeUint, field.Uint("age").Descriptor().Info.Type)
|
|
assert.Equal(t, field.TypeUint8, field.Uint8("age").Descriptor().Info.Type)
|
|
assert.Equal(t, field.TypeUint16, field.Uint16("age").Descriptor().Info.Type)
|
|
assert.Equal(t, field.TypeUint32, field.Uint32("age").Descriptor().Info.Type)
|
|
assert.Equal(t, field.TypeUint64, field.Uint64("age").Descriptor().Info.Type)
|
|
}
|
|
|
|
func TestFloat(t *testing.T) {
|
|
f := field.Float("age").Positive()
|
|
fd := f.Descriptor()
|
|
assert.Equal(t, "age", fd.Name)
|
|
assert.Equal(t, field.TypeFloat64, fd.Info.Type)
|
|
assert.Len(t, fd.Validators, 1)
|
|
|
|
f = field.Float("age").Min(2.5).Max(5)
|
|
fd = f.Descriptor()
|
|
assert.Len(t, fd.Validators, 2)
|
|
assert.Equal(t, field.TypeFloat32, field.Float32("age").Descriptor().Info.Type)
|
|
}
|
|
|
|
func TestBool(t *testing.T) {
|
|
f := field.Bool("active").Default(true).Immutable()
|
|
fd := f.Descriptor()
|
|
assert.Equal(t, "active", fd.Name)
|
|
assert.Equal(t, field.TypeBool, fd.Info.Type)
|
|
assert.NotNil(t, fd.Default)
|
|
assert.True(t, fd.Immutable)
|
|
assert.Equal(t, true, fd.Default)
|
|
}
|
|
|
|
func TestBytes(t *testing.T) {
|
|
f := field.Bytes("active").Default([]byte("{}"))
|
|
fd := f.Descriptor()
|
|
assert.Equal(t, "active", fd.Name)
|
|
assert.Equal(t, field.TypeBytes, fd.Info.Type)
|
|
assert.NotNil(t, fd.Default)
|
|
assert.Equal(t, []byte("{}"), fd.Default)
|
|
}
|
|
|
|
func TestString(t *testing.T) {
|
|
re := regexp.MustCompile("[a-zA-Z0-9]")
|
|
f := field.String("name").Unique().Match(re).Validate(func(string) error { return nil }).Sensitive()
|
|
fd := f.Descriptor()
|
|
assert.Equal(t, field.TypeString, fd.Info.Type)
|
|
assert.Equal(t, "name", fd.Name)
|
|
assert.True(t, fd.Unique)
|
|
assert.Len(t, fd.Validators, 2)
|
|
assert.True(t, fd.Sensitive)
|
|
}
|
|
|
|
func TestTime(t *testing.T) {
|
|
now := time.Now()
|
|
fd := field.Time("created_at").
|
|
Default(func() time.Time {
|
|
return now
|
|
}).
|
|
Descriptor()
|
|
assert.Equal(t, "created_at", fd.Name)
|
|
assert.Equal(t, field.TypeTime, fd.Info.Type)
|
|
assert.Equal(t, "time.Time", fd.Info.Type.String())
|
|
assert.NotNil(t, fd.Default)
|
|
assert.Equal(t, now, fd.Default.(func() time.Time)())
|
|
|
|
fd = field.Time("updated_at").
|
|
UpdateDefault(func() time.Time {
|
|
return now
|
|
}).
|
|
Descriptor()
|
|
assert.Equal(t, "updated_at", fd.Name)
|
|
assert.Equal(t, now, fd.UpdateDefault.(func() time.Time)())
|
|
}
|
|
|
|
func TestJSON(t *testing.T) {
|
|
fd := field.JSON("name", map[string]string{}).
|
|
Optional().
|
|
Descriptor()
|
|
assert.True(t, fd.Optional)
|
|
assert.Empty(t, fd.Info.PkgPath)
|
|
assert.Equal(t, "name", fd.Name)
|
|
assert.Equal(t, field.TypeJSON, fd.Info.Type)
|
|
assert.Equal(t, "map[string]string", fd.Info.String())
|
|
|
|
fd = field.JSON("dir", http.Dir("dir")).
|
|
Optional().
|
|
Descriptor()
|
|
assert.True(t, fd.Optional)
|
|
assert.Equal(t, field.TypeJSON, fd.Info.Type)
|
|
assert.Equal(t, "dir", fd.Name)
|
|
assert.Equal(t, "net/http", fd.Info.PkgPath)
|
|
assert.Equal(t, "http.Dir", fd.Info.String())
|
|
|
|
fd = field.Strings("strings").
|
|
Optional().
|
|
Descriptor()
|
|
assert.True(t, fd.Optional)
|
|
assert.Empty(t, fd.Info.PkgPath)
|
|
assert.Equal(t, "strings", fd.Name)
|
|
assert.Equal(t, field.TypeJSON, fd.Info.Type)
|
|
assert.Equal(t, "[]string", fd.Info.String())
|
|
}
|
|
|
|
func TestField_Tag(t *testing.T) {
|
|
fd := field.Bool("expired").
|
|
StructTag(`json:"expired,omitempty"`).
|
|
Descriptor()
|
|
assert.Equal(t, `json:"expired,omitempty"`, fd.Tag)
|
|
}
|
|
|
|
func TestField_Enums(t *testing.T) {
|
|
fd := field.Enum("role").
|
|
Values(
|
|
"user",
|
|
"admin",
|
|
"master",
|
|
).
|
|
Default("user").
|
|
Descriptor()
|
|
assert.Equal(t, "role", fd.Name)
|
|
assert.Equal(t, []string{"user", "admin", "master"}, fd.Enums)
|
|
assert.Equal(t, "user", fd.Default)
|
|
}
|
|
|
|
func TestField_UUID(t *testing.T) {
|
|
fd := field.UUID("id", uuid.UUID{}).
|
|
Default(uuid.New).
|
|
Descriptor()
|
|
assert.Equal(t, "id", fd.Name)
|
|
assert.Equal(t, "uuid.UUID", fd.Info.String())
|
|
assert.Equal(t, "github.com/google/uuid", fd.Info.PkgPath)
|
|
assert.NotNil(t, fd.Default)
|
|
assert.NotEmpty(t, fd.Default.(func() uuid.UUID)())
|
|
}
|
|
|
|
func TestTypeString(t *testing.T) {
|
|
typ := field.TypeBool
|
|
assert.Equal(t, "bool", typ.String())
|
|
typ = field.TypeInvalid
|
|
assert.Equal(t, "invalid", typ.String())
|
|
typ = 21
|
|
assert.Equal(t, "invalid", typ.String())
|
|
}
|
|
|
|
func TestTypeNumeric(t *testing.T) {
|
|
typ := field.TypeBool
|
|
assert.False(t, typ.Numeric())
|
|
typ = field.TypeUint8
|
|
assert.True(t, typ.Numeric())
|
|
}
|
|
|
|
func TestTypeValid(t *testing.T) {
|
|
typ := field.TypeBool
|
|
assert.True(t, typ.Valid())
|
|
typ = 0
|
|
assert.False(t, typ.Valid())
|
|
typ = 21
|
|
assert.False(t, typ.Valid())
|
|
}
|
|
|
|
func TestTypeConstName(t *testing.T) {
|
|
typ := field.TypeJSON
|
|
assert.Equal(t, "TypeJSON", typ.ConstName())
|
|
typ = field.TypeInt
|
|
assert.Equal(t, "TypeInt", typ.ConstName())
|
|
typ = 21
|
|
assert.Equal(t, "invalid", typ.ConstName())
|
|
}
|