Files
ent/entc/integration/customid/customid_test.go
2020-02-12 20:42:03 +02:00

101 lines
3.2 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 customid
import (
"context"
"database/sql"
"fmt"
"net"
"strconv"
"testing"
"github.com/facebookincubator/ent/dialect"
"github.com/facebookincubator/ent/entc/integration/customid/ent"
"github.com/facebookincubator/ent/entc/integration/customid/ent/user"
"github.com/go-sql-driver/mysql"
_ "github.com/go-sql-driver/mysql"
"github.com/google/uuid"
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3"
"github.com/stretchr/testify/require"
)
func TestMySQL(t *testing.T) {
for version, port := range map[string]int{"56": 3306, "57": 3307, "8": 3308} {
addr := net.JoinHostPort("localhost", strconv.Itoa(port))
t.Run(version, func(t *testing.T) {
cfg := mysql.Config{
User: "root", Passwd: "pass", Net: "tcp", Addr: addr,
AllowNativePasswords: true, ParseTime: true,
}
db, err := sql.Open("mysql", cfg.FormatDSN())
require.NoError(t, err)
defer db.Close()
_, err = db.Exec("CREATE DATABASE IF NOT EXISTS custom_id")
require.NoError(t, err, "creating database")
defer db.Exec("DROP DATABASE IF EXISTS custom_id")
cfg.DBName = "custom_id"
client, err := ent.Open("mysql", cfg.FormatDSN())
require.NoError(t, err, "connecting to json database")
err = client.Schema.Create(context.Background())
require.NoError(t, err)
CustomID(t, client)
})
}
}
func TestPostgres(t *testing.T) {
for version, port := range map[string]int{"10": 5430, "11": 5431, "12": 5432} {
t.Run(version, func(t *testing.T) {
dsn := fmt.Sprintf("host=localhost port=%d user=postgres password=pass sslmode=disable", port)
db, err := sql.Open(dialect.Postgres, dsn)
require.NoError(t, err)
defer db.Close()
_, err = db.Exec("CREATE DATABASE custom_id")
require.NoError(t, err, "creating database")
defer db.Exec("DROP DATABASE custom_id")
client, err := ent.Open(dialect.Postgres, dsn+" dbname=custom_id")
require.NoError(t, err, "connecting to json database")
defer client.Close()
err = client.Schema.Create(context.Background())
require.NoError(t, err)
CustomID(t, client)
})
}
}
func TestSQLite(t *testing.T) {
client, err := ent.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1")
require.NoError(t, err)
defer client.Close()
require.NoError(t, client.Schema.Create(context.Background()))
CustomID(t, client)
}
func CustomID(t *testing.T, client *ent.Client) {
ctx := context.Background()
nat := client.User.Create().SaveX(ctx)
require.Equal(t, 1, nat.ID)
_, err := client.User.Create().SetID(1).Save(ctx)
require.True(t, ent.IsConstraintError(err), "duplicate id")
a8m := client.User.Create().SetID(5).SaveX(ctx)
require.Equal(t, 5, a8m.ID)
hub := client.Group.Create().SetID(3).AddUsers(a8m, nat).SaveX(ctx)
require.Equal(t, 3, hub.ID)
require.Equal(t, []int{1, 5}, hub.QueryUsers().Order(ent.Asc(user.FieldID)).IDsX(ctx))
b := client.Blob.Create().SetID(uuid.New()).SaveX(ctx)
require.NotEmpty(t, b.ID)
pedro := client.Pet.Create().SetID("pedro").SetOwner(a8m).SaveX(ctx)
require.Equal(t, a8m.ID, pedro.QueryOwner().OnlyXID(ctx))
require.Equal(t, pedro.ID, a8m.QueryPets().OnlyXID(ctx))
}