test: add coverage for migration
This commit is contained in:
parent
ad4d723ceb
commit
1720855a2d
1 changed files with 152 additions and 0 deletions
152
migration_test.go
Normal file
152
migration_test.go
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"slices"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNewMigrationReturnsMigrationWithProperties(t *testing.T) {
|
||||||
|
migration := NewMigration("path", "name", "requires")
|
||||||
|
|
||||||
|
if migration.Path != "path" || migration.Name != "name" || migration.Requires != "requires" || migration.Run != false {
|
||||||
|
t.Errorf("Expected Migration with passed values and default, got %#v", migration)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMigrationBytesReturnsBytesFromMigrationFile(t *testing.T) {
|
||||||
|
mockMigrationData := []byte("SELECT * FROM myTable;")
|
||||||
|
|
||||||
|
migrationRoot := t.TempDir()
|
||||||
|
migrationPath := filepath.Join(migrationRoot, "0001.sql")
|
||||||
|
os.WriteFile(migrationPath, mockMigrationData, 0750)
|
||||||
|
|
||||||
|
migration := NewMigration(migrationPath, "TestMigration", "")
|
||||||
|
|
||||||
|
migrationBytes, _ := migration.Bytes()
|
||||||
|
if !slices.Equal(migrationBytes, mockMigrationData) {
|
||||||
|
t.Errorf("Expected bytes to be %#v, got %#v.", mockMigrationData, migrationBytes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMigrationBytesErrorsIfFileCannotBeRead(t *testing.T) {
|
||||||
|
migration := NewMigration("not-a-file", "TestMigration", "")
|
||||||
|
|
||||||
|
_, err := migration.Bytes()
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("Expected error, got nil.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMigrationTextReturnsFileContentAsString(t *testing.T) {
|
||||||
|
mockMigrationData := []byte("SELECT * FROM myTable;")
|
||||||
|
|
||||||
|
migrationRoot := t.TempDir()
|
||||||
|
migrationPath := filepath.Join(migrationRoot, "0001.sql")
|
||||||
|
os.WriteFile(migrationPath, mockMigrationData, 0750)
|
||||||
|
|
||||||
|
migration := NewMigration(migrationPath, "TestMigration", "")
|
||||||
|
|
||||||
|
migrationStr, _ := migration.Text()
|
||||||
|
|
||||||
|
if migrationStr != string(mockMigrationData) {
|
||||||
|
t.Errorf("Expected text to be %#v, got %#v.", string(mockMigrationData), migrationStr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMigrationTextErrorsIfFileCannotBeRead(t *testing.T) {
|
||||||
|
migration := NewMigration("not-a-file", "TestMigration", "")
|
||||||
|
|
||||||
|
_, err := migration.Text()
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("Expected error, got nil.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMigrationSqlReturnsSqlAsStringWithoutComments(t *testing.T) {
|
||||||
|
mockMigrationData := []byte("SELECT * FROM myTable;")
|
||||||
|
mockMigrationComment := []byte("--comment\n")
|
||||||
|
mockMigrationDataWithComment := append(mockMigrationComment, mockMigrationData...)
|
||||||
|
|
||||||
|
migrationRoot := t.TempDir()
|
||||||
|
migrationPath := filepath.Join(migrationRoot, "0001.sql")
|
||||||
|
os.WriteFile(migrationPath, mockMigrationDataWithComment, 0750)
|
||||||
|
|
||||||
|
migration := NewMigration(migrationPath, "TestMigration", "")
|
||||||
|
|
||||||
|
migrationStr, _ := migration.Sql()
|
||||||
|
|
||||||
|
if migrationStr != string(mockMigrationData) {
|
||||||
|
t.Errorf("Expected text to be %#v, got %#v.", string(mockMigrationData), migrationStr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMigrationSqlErrorsIfFileCannotBeRead(t *testing.T) {
|
||||||
|
migration := NewMigration("not-a-file", "TestMigration", "")
|
||||||
|
|
||||||
|
_, err := migration.Sql()
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("Expected error, got nil.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMigrationApplyRunsTheSqlOnTheGivenDatabase(t *testing.T) {
|
||||||
|
mockMigrationData := []byte("SELECT * FROM myTable;")
|
||||||
|
|
||||||
|
migrationRoot := t.TempDir()
|
||||||
|
migrationPath := filepath.Join(migrationRoot, "0001.sql")
|
||||||
|
os.WriteFile(migrationPath, mockMigrationData, 0750)
|
||||||
|
|
||||||
|
migration := NewMigration(migrationPath, "TestMigration", "")
|
||||||
|
|
||||||
|
mockDB := &MockSqlDB{}
|
||||||
|
|
||||||
|
err := migration.Apply(mockDB)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Did not expect error, got %#v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedQueries := []string{string(mockMigrationData)}
|
||||||
|
if !slices.Equal(mockDB.queries, expectedQueries) {
|
||||||
|
t.Errorf("Expected queries %#v, got %#v", expectedQueries, mockDB.queries)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMigrationApplyErrorsIfFileCannotBeRead(t *testing.T) {
|
||||||
|
migration := NewMigration("not-a-file", "TestMigration", "")
|
||||||
|
|
||||||
|
mockDB := &MockSqlDB{}
|
||||||
|
|
||||||
|
err := migration.Apply(mockDB)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("Expected error, got nil.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMigrationApplyErrorsIfRunningSqlFails(t *testing.T) {
|
||||||
|
mockMigrationData := []byte("SELECT * FROM myTable;")
|
||||||
|
|
||||||
|
migrationRoot := t.TempDir()
|
||||||
|
migrationPath := filepath.Join(migrationRoot, "0001.sql")
|
||||||
|
os.WriteFile(migrationPath, mockMigrationData, 0750)
|
||||||
|
|
||||||
|
migration := NewMigration(migrationPath, "TestMigration", "")
|
||||||
|
|
||||||
|
mockDB := &MockSqlDB{
|
||||||
|
mockedError: errors.New("test error"),
|
||||||
|
}
|
||||||
|
|
||||||
|
err := migration.Apply(mockDB)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("Expected error, got nil")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue