mirror of
https://github.com/ent/ent.git
synced 2026-05-01 07:00:57 +03:00
178 lines
8.4 KiB
Go
178 lines
8.4 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 printer
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"entgo.io/ent/entc/gen"
|
|
"entgo.io/ent/schema/field"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestPrinter_Print(t *testing.T) {
|
|
tests := []struct {
|
|
input *gen.Graph
|
|
out string
|
|
}{
|
|
{
|
|
input: &gen.Graph{
|
|
Nodes: []*gen.Type{
|
|
{
|
|
Name: "User",
|
|
ID: &gen.Field{Name: "id", Type: &field.TypeInfo{Type: field.TypeInt}},
|
|
Fields: []*gen.Field{
|
|
{Name: "name", Type: &field.TypeInfo{Type: field.TypeString}, Validators: 1},
|
|
{Name: "age", Type: &field.TypeInfo{Type: field.TypeInt}, Nillable: true},
|
|
{Name: "created_at", Type: &field.TypeInfo{Type: field.TypeTime}, Nillable: true, Immutable: true},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
out: `
|
|
User:
|
|
+------------+-----------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
| Field | Type | Unique | Optional | Nillable | Default | UpdateDefault | Immutable | StructTag | Validators |
|
|
+------------+-----------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
| id | int | false | false | false | false | false | false | | 0 |
|
|
| name | string | false | false | false | false | false | false | | 1 |
|
|
| age | int | false | false | true | false | false | false | | 0 |
|
|
| created_at | time.Time | false | false | true | false | false | true | | 0 |
|
|
+------------+-----------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
|
|
`,
|
|
},
|
|
{
|
|
input: &gen.Graph{
|
|
Nodes: []*gen.Type{
|
|
{
|
|
Name: "User",
|
|
ID: &gen.Field{Name: "id", Type: &field.TypeInfo{Type: field.TypeInt}},
|
|
Edges: []*gen.Edge{
|
|
{Name: "groups", Type: &gen.Type{Name: "Group"}, Rel: gen.Relation{Type: gen.M2M}, Optional: true},
|
|
{Name: "spouse", Type: &gen.Type{Name: "User"}, Unique: true, Rel: gen.Relation{Type: gen.O2O}},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
out: `
|
|
User:
|
|
+-------+------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
| Field | Type | Unique | Optional | Nillable | Default | UpdateDefault | Immutable | StructTag | Validators |
|
|
+-------+------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
| id | int | false | false | false | false | false | false | | 0 |
|
|
+-------+------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
+--------+-------+---------+---------+----------+--------+----------+
|
|
| Edge | Type | Inverse | BackRef | Relation | Unique | Optional |
|
|
+--------+-------+---------+---------+----------+--------+----------+
|
|
| groups | Group | false | | M2M | false | true |
|
|
| spouse | User | false | | O2O | true | false |
|
|
+--------+-------+---------+---------+----------+--------+----------+
|
|
|
|
`,
|
|
},
|
|
{
|
|
input: &gen.Graph{
|
|
Nodes: []*gen.Type{
|
|
{
|
|
Name: "User",
|
|
ID: &gen.Field{Name: "id", Type: &field.TypeInfo{Type: field.TypeInt}},
|
|
Fields: []*gen.Field{
|
|
{Name: "name", Type: &field.TypeInfo{Type: field.TypeString}, Validators: 1},
|
|
{Name: "age", Type: &field.TypeInfo{Type: field.TypeInt}, Nillable: true},
|
|
},
|
|
Edges: []*gen.Edge{
|
|
{Name: "groups", Type: &gen.Type{Name: "Group"}, Rel: gen.Relation{Type: gen.M2M}, Optional: true},
|
|
{Name: "spouse", Type: &gen.Type{Name: "User"}, Unique: true, Rel: gen.Relation{Type: gen.O2O}},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
out: `
|
|
User:
|
|
+-------+--------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
| Field | Type | Unique | Optional | Nillable | Default | UpdateDefault | Immutable | StructTag | Validators |
|
|
+-------+--------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
| id | int | false | false | false | false | false | false | | 0 |
|
|
| name | string | false | false | false | false | false | false | | 1 |
|
|
| age | int | false | false | true | false | false | false | | 0 |
|
|
+-------+--------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
+--------+-------+---------+---------+----------+--------+----------+
|
|
| Edge | Type | Inverse | BackRef | Relation | Unique | Optional |
|
|
+--------+-------+---------+---------+----------+--------+----------+
|
|
| groups | Group | false | | M2M | false | true |
|
|
| spouse | User | false | | O2O | true | false |
|
|
+--------+-------+---------+---------+----------+--------+----------+
|
|
|
|
`,
|
|
},
|
|
{
|
|
input: &gen.Graph{
|
|
Nodes: []*gen.Type{
|
|
{
|
|
Name: "User",
|
|
ID: &gen.Field{Name: "id", Type: &field.TypeInfo{Type: field.TypeInt}},
|
|
Fields: []*gen.Field{
|
|
{Name: "name", Type: &field.TypeInfo{Type: field.TypeString}, Validators: 1},
|
|
{Name: "age", Type: &field.TypeInfo{Type: field.TypeInt}, Nillable: true},
|
|
},
|
|
Edges: []*gen.Edge{
|
|
{Name: "groups", Type: &gen.Type{Name: "Group"}, Rel: gen.Relation{Type: gen.M2M}, Optional: true},
|
|
{Name: "spouse", Type: &gen.Type{Name: "User"}, Unique: true, Rel: gen.Relation{Type: gen.O2O}},
|
|
},
|
|
},
|
|
{
|
|
Name: "Group",
|
|
ID: &gen.Field{Name: "id", Type: &field.TypeInfo{Type: field.TypeInt}},
|
|
Fields: []*gen.Field{
|
|
{Name: "name", Type: &field.TypeInfo{Type: field.TypeString}},
|
|
},
|
|
Edges: []*gen.Edge{
|
|
{Name: "users", Type: &gen.Type{Name: "User"}, Rel: gen.Relation{Type: gen.M2M}, Optional: true},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
out: `
|
|
User:
|
|
+-------+--------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
| Field | Type | Unique | Optional | Nillable | Default | UpdateDefault | Immutable | StructTag | Validators |
|
|
+-------+--------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
| id | int | false | false | false | false | false | false | | 0 |
|
|
| name | string | false | false | false | false | false | false | | 1 |
|
|
| age | int | false | false | true | false | false | false | | 0 |
|
|
+-------+--------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
+--------+-------+---------+---------+----------+--------+----------+
|
|
| Edge | Type | Inverse | BackRef | Relation | Unique | Optional |
|
|
+--------+-------+---------+---------+----------+--------+----------+
|
|
| groups | Group | false | | M2M | false | true |
|
|
| spouse | User | false | | O2O | true | false |
|
|
+--------+-------+---------+---------+----------+--------+----------+
|
|
|
|
Group:
|
|
+-------+--------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
| Field | Type | Unique | Optional | Nillable | Default | UpdateDefault | Immutable | StructTag | Validators |
|
|
+-------+--------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
| id | int | false | false | false | false | false | false | | 0 |
|
|
| name | string | false | false | false | false | false | false | | 0 |
|
|
+-------+--------+--------+----------+----------+---------+---------------+-----------+-----------+------------+
|
|
+-------+------+---------+---------+----------+--------+----------+
|
|
| Edge | Type | Inverse | BackRef | Relation | Unique | Optional |
|
|
+-------+------+---------+---------+----------+--------+----------+
|
|
| users | User | false | | M2M | false | true |
|
|
+-------+------+---------+---------+----------+--------+----------+
|
|
|
|
`,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
b := &strings.Builder{}
|
|
Fprint(b, tt.input)
|
|
assert.Equal(t, tt.out, "\n"+b.String())
|
|
}
|
|
}
|