@@ -3,7 +3,9 @@ package schema
33import (
44 "testing"
55
6+ "entgo.io/ent"
67 "entgo.io/ent/entc/load"
8+ "entgo.io/ent/schema/field"
79 "github.com/stretchr/testify/require"
810)
911
@@ -74,6 +76,17 @@ func TestAuthIdentityFoundationSchemas(t *testing.T) {
7476
7577 userSchema := requireSchema (t , schemas , "User" )
7678 requireSchemaFields (t , userSchema , "signup_source" , "last_login_at" , "last_active_at" )
79+ signupSource := requireSchemaField (t , userSchema , "signup_source" )
80+ require .Equal (t , field .TypeString , signupSource .Info .Type )
81+ require .True (t , signupSource .Default )
82+ require .Equal (t , "email" , signupSource .DefaultValue )
83+ require .Equal (t , 1 , signupSource .Validators )
84+
85+ validator := requireStringFieldValidator (t , User {}.Fields (), "signup_source" )
86+ for _ , value := range []string {"email" , "linuxdo" , "wechat" , "oidc" } {
87+ require .NoError (t , validator (value ))
88+ }
89+ require .Error (t , validator ("github" ))
7790}
7891
7992func requireSchema (t * testing.T , schemas map [string ]* load.Schema , name string ) * load.Schema {
@@ -98,6 +111,37 @@ func requireSchemaFields(t *testing.T, schema *load.Schema, names ...string) {
98111 }
99112}
100113
114+ func requireSchemaField (t * testing.T , schema * load.Schema , name string ) * load.Field {
115+ t .Helper ()
116+
117+ for _ , schemaField := range schema .Fields {
118+ if schemaField .Name == name {
119+ return schemaField
120+ }
121+ }
122+
123+ require .Failf (t , "missing schema field" , "schema %s should include field %s" , schema .Name , name )
124+ return nil
125+ }
126+
127+ func requireStringFieldValidator (t * testing.T , fields []ent.Field , name string ) func (string ) error {
128+ t .Helper ()
129+
130+ for _ , entField := range fields {
131+ descriptor := entField .Descriptor ()
132+ if descriptor .Name != name {
133+ continue
134+ }
135+ require .NotEmpty (t , descriptor .Validators , "field %s should include a validator" , name )
136+ validator , ok := descriptor .Validators [0 ].(func (string ) error )
137+ require .True (t , ok , "field %s validator should be func(string) error" , name )
138+ return validator
139+ }
140+
141+ require .Failf (t , "missing field validator" , "schema should include field %s" , name )
142+ return nil
143+ }
144+
101145func requireHasUniqueIndex (t * testing.T , schema * load.Schema , fields ... string ) {
102146 t .Helper ()
103147
0 commit comments