package migrate

import (
	"testing"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/dataflow-service-ng/app/repo"
)

func TestInitSchema(t *testing.T) {
	db, err := repo.GetFakeDB()
	require.Nil(t, err)

	sqlDB, err := db.DB()
	require.Nil(t, err)
	sqlDB.SetMaxOpenConns(1)
	defer func() {
		sqlDB.SetMaxOpenConns(0)
		_, _ = sqlDB.Exec("use test")
	}()

	db.DisableForeignKeyConstraintWhenMigrating = true
	// the fake DB already migrate the schema,
	// here we create a new database to test the initDataflowDB
	db.Exec("drop database if exists init_schema_test")
	db = db.Exec("create database init_schema_test").
		Exec("use init_schema_test")
	require.Nil(t, db.Error)
	// test migration works when the database is empty
	require.Nil(t, initDataflowDB(db))
	var tableName, createTableSQL string
	require.NoError(t, db.Raw("SHOW CREATE TABLE premium_dm_tasks").Row().Scan(&tableName, &createTableSQL))
	require.Equal(t, "premium_dm_tasks", tableName)
	require.Contains(t, createTableSQL, "operation_dispatched_at")
	require.Contains(t, createTableSQL, "pausing")
	require.Contains(t, createTableSQL, "resuming")
}
