Skip to content

Commit

Permalink
entc/gen: block Optional on ID fields (#2443)
Browse files Browse the repository at this point in the history
* entc/gen: block Optional on the ID field

* chore: restore the old error message

* Update entc/gen/type.go

Co-authored-by: Ariel Mashraki <7413593+a8m@users.noreply.github.com>

Co-authored-by: Ariel Mashraki <7413593+a8m@users.noreply.github.com>
  • Loading branch information
giautm and a8m committed Apr 2, 2022
1 parent 345d3d1 commit 196875c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
3 changes: 3 additions & 0 deletions entc/gen/type.go
Expand Up @@ -239,6 +239,9 @@ func NewType(c *Config, schema *load.Schema) (*Type, error) {
}
// User defined id field.
if tf.Name == typ.ID.Name {
if tf.Optional {
return nil, fmt.Errorf("id field cannot be optional")
}
typ.ID = tf
} else {
typ.Fields = append(typ.Fields, tf)
Expand Down
24 changes: 16 additions & 8 deletions entc/gen/type_test.go
Expand Up @@ -25,17 +25,17 @@ func TestType(t *testing.T) {

_, err = NewType(&Config{Package: "entc/gen"}, &load.Schema{
Fields: []*load.Field{
{Unique: true, Default: true, Info: &field.TypeInfo{Type: field.TypeInt}},
{Name: "foo", Unique: true, Default: true, Info: &field.TypeInfo{Type: field.TypeInt}},
},
})
require.Error(err, "unique field can not have default")
require.EqualError(err, "unique field \"foo\" cannot have default value", "unique field can not have default")

_, err = NewType(&Config{Package: "entc/gen"}, &load.Schema{
Fields: []*load.Field{
{Sensitive: true, Tag: `yaml:"pwd"`, Info: &field.TypeInfo{Type: field.TypeString}},
{Name: "foo", Sensitive: true, Tag: `yaml:"pwd"`, Info: &field.TypeInfo{Type: field.TypeString}},
},
})
require.Error(err, "sensitive field cannot have tags")
require.EqualError(err, "sensitive field \"foo\" cannot have struct tags", "sensitive field cannot have tags")

_, err = NewType(&Config{Package: "entc/gen"}, &load.Schema{
Name: "T",
Expand All @@ -44,31 +44,39 @@ func TestType(t *testing.T) {
{Name: "foo", Unique: true, Info: &field.TypeInfo{Type: field.TypeInt}},
},
})
require.Error(err, "field foo redeclared")
require.EqualError(err, "field \"foo\" redeclared for type \"T\"", "field foo redeclared")

_, err = NewType(&Config{Package: "entc/gen"}, &load.Schema{
Name: "T",
Fields: []*load.Field{
{Name: "enums", Info: &field.TypeInfo{Type: field.TypeEnum}, Enums: []struct{ N, V string }{{V: "v"}, {V: "v"}}},
},
})
require.Error(err, "duplicate enums")
require.EqualError(err, "duplicate values \"v\" for enum field \"enums\"", "duplicate enums")

_, err = NewType(&Config{Package: "entc/gen"}, &load.Schema{
Name: "T",
Fields: []*load.Field{
{Name: "enums", Info: &field.TypeInfo{Type: field.TypeEnum}, Enums: []struct{ N, V string }{{}}},
},
})
require.Error(err, "empty value for enums")
require.EqualError(err, "\"enums\" field value cannot be empty", "empty value for enums")

_, err = NewType(&Config{Package: "entc/gen"}, &load.Schema{
Name: "T",
Fields: []*load.Field{
{Name: "", Info: &field.TypeInfo{Type: field.TypeInt}},
},
})
require.Error(err, "empty field name")
require.EqualError(err, "field name cannot be empty", "empty field name")

_, err = NewType(&Config{Package: "entc/gen"}, &load.Schema{
Name: "T",
Fields: []*load.Field{
{Name: "id", Info: &field.TypeInfo{Type: field.TypeInt}, Optional: true},
},
})
require.EqualError(err, "id field cannot be optional", "id field cannot be optional")

_, err = NewType(&Config{Package: "entc/gen"}, &load.Schema{Name: "Type"})
require.EqualError(err, "schema lowercase name conflicts with Go keyword \"type\"")
Expand Down

0 comments on commit 196875c

Please sign in to comment.