// 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 schema import ( "context" "testing" "entgo.io/ent/dialect/sql" "github.com/DATA-DOG/go-sqlmock" "github.com/stretchr/testify/require" ) func TestMigrateHookOmitTable(t *testing.T) { db, mk, err := sqlmock.New() require.NoError(t, err) tables := []*Table{{Name: "users"}, {Name: "pets"}} mock := mysqlMock{mk} mock.start("5.7.23") mock.tableExists("pets", false) mock.ExpectExec(escape("CREATE TABLE IF NOT EXISTS `pets`() CHARACTER SET utf8mb4 COLLATE utf8mb4_bin")). WillReturnResult(sqlmock.NewResult(0, 1)) mock.ExpectCommit() migrate, err := NewMigrate(sql.OpenDB("mysql", db), WithHooks(func(next Creator) Creator { return CreateFunc(func(ctx context.Context, tables ...*Table) error { return next.Create(ctx, tables[1]) }) })) require.NoError(t, err) err = migrate.Create(context.Background(), tables...) require.NoError(t, err) } func TestMigrateHookAddTable(t *testing.T) { db, mk, err := sqlmock.New() require.NoError(t, err) tables := []*Table{{Name: "users"}} mock := mysqlMock{mk} mock.start("5.7.23") mock.tableExists("users", false) mock.ExpectExec(escape("CREATE TABLE IF NOT EXISTS `users`() CHARACTER SET utf8mb4 COLLATE utf8mb4_bin")). WillReturnResult(sqlmock.NewResult(0, 1)) mock.tableExists("pets", false) mock.ExpectExec(escape("CREATE TABLE IF NOT EXISTS `pets`() CHARACTER SET utf8mb4 COLLATE utf8mb4_bin")). WillReturnResult(sqlmock.NewResult(0, 1)) mock.ExpectCommit() migrate, err := NewMigrate(sql.OpenDB("mysql", db), WithHooks(func(next Creator) Creator { return CreateFunc(func(ctx context.Context, tables ...*Table) error { return next.Create(ctx, tables[0], &Table{Name: "pets"}) }) })) require.NoError(t, err) err = migrate.Create(context.Background(), tables...) require.NoError(t, err) }