Files
scroll/database/migrate/migrate_test.go

102 lines
2.0 KiB
Go

package migrate
import (
"testing"
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq"
"github.com/stretchr/testify/assert"
"scroll-tech/common/docker"
"scroll-tech/database"
"scroll-tech/database/cache"
)
var (
pgDB *sqlx.DB
dbImg docker.ImgInstance
redisImg docker.ImgInstance
)
func initEnv(t *testing.T) error {
// Start db container.
dbImg = docker.NewTestDBDocker(t, "postgres")
redisImg = docker.NewTestRedisDocker(t)
// Create db orm handler.
factory, err := database.NewOrmFactory(&database.DBConfig{
Persistence: &database.PersistenceConfig{
DriverName: "postgres",
DSN: dbImg.Endpoint(),
},
Redis: &cache.RedisConfig{
Expirations: map[string]int64{"trace": 30},
URL: redisImg.Endpoint(),
},
})
if err != nil {
return err
}
pgDB = factory.GetDB()
return nil
}
func TestMigrate(t *testing.T) {
if err := initEnv(t); err != nil {
t.Fatal(err)
}
t.Run("testCurrent", testCurrent)
t.Run("testStatus", testStatus)
t.Run("testResetDB", testResetDB)
t.Run("testMigrate", testMigrate)
t.Run("testRollback", testRollback)
t.Cleanup(func() {
if dbImg != nil {
assert.NoError(t, dbImg.Stop())
}
if redisImg != nil {
assert.NoError(t, redisImg.Stop())
}
})
}
func testCurrent(t *testing.T) {
cur, err := Current(pgDB.DB)
assert.NoError(t, err)
assert.Equal(t, 0, int(cur))
}
func testStatus(t *testing.T) {
status := Status(pgDB.DB)
assert.NoError(t, status)
}
func testResetDB(t *testing.T) {
assert.NoError(t, ResetDB(pgDB.DB))
cur, err := Current(pgDB.DB)
assert.NoError(t, err)
assert.Equal(t, 5, int(cur))
}
func testMigrate(t *testing.T) {
assert.NoError(t, Migrate(pgDB.DB))
cur, err := Current(pgDB.DB)
assert.NoError(t, err)
assert.Equal(t, true, cur > 0)
}
func testRollback(t *testing.T) {
version, err := Current(pgDB.DB)
assert.NoError(t, err)
assert.Equal(t, true, version > 0)
assert.NoError(t, Rollback(pgDB.DB, nil))
cur, err := Current(pgDB.DB)
assert.NoError(t, err)
assert.Equal(t, true, cur+1 == version)
}