-
Notifications
You must be signed in to change notification settings - Fork 72
/
Copy pathgenerator_test.go
101 lines (80 loc) · 2.55 KB
/
generator_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package generator
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestMigrationGeneratorLoadLock(t *testing.T) {
dir, err := ioutil.TempDir("", "kallax-migration-generator")
require.NoError(t, err)
defer os.RemoveAll(dir)
g := NewMigrationGenerator("migration", dir)
schema, err := g.LoadLock()
require.NoError(t, err)
require.NotNil(t, schema)
require.Len(t, schema.Tables, 0)
content, err := mkSchema(mkTable("foo")).MarshalText()
require.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(dir, string(migrationLock)), content, 0755)
require.NoError(t, err)
schema, err = g.LoadLock()
require.NoError(t, err)
require.NotNil(t, schema)
require.Len(t, schema.Tables, 1)
}
func TestMigrationGeneratorBuild(t *testing.T) {
dir, err := ioutil.TempDir("", "kallax-migration-generator")
require.NoError(t, err)
defer os.RemoveAll(dir)
g := NewMigrationGenerator("migration", dir)
content, err := mkSchema(mkTable("foo")).MarshalText()
require.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(dir, string(migrationLock)), content, 0755)
require.NoError(t, err)
migration, err := g.Build()
require.NoError(t, err)
require.NotNil(t, migration)
}
func TestMigrationGeneratorGenerate(t *testing.T) {
old := mkSchema(table1)
new := mkSchema(table1, table2)
migration, err := NewMigration(old, new)
require.NoError(t, err)
dir, err := ioutil.TempDir("", "kallax-migration-generator")
require.NoError(t, err)
defer os.RemoveAll(dir)
g := NewMigrationGenerator("migration", dir)
g.now = func() time.Time {
var t time.Time
return t
}
require.NoError(t, g.Generate(migration))
content, err := ioutil.ReadFile(g.migrationFile(migrationUp, g.now()))
require.NoError(t, err)
require.Equal(t, "BEGIN;\n\n"+expectedTable2+"\n\nCOMMIT;\n", string(content))
content, err = ioutil.ReadFile(g.migrationFile(migrationDown, g.now()))
require.NoError(t, err)
require.Equal(t, "BEGIN;\n\nDROP TABLE table2;\n\nCOMMIT;\n", string(content))
expected, err := migration.Lock.MarshalText()
require.NoError(t, err)
content, err = ioutil.ReadFile(filepath.Join(dir, string(migrationLock)))
require.NoError(t, err)
require.Equal(t, string(expected), string(content))
}
func TestSlugify(t *testing.T) {
cases := []struct {
input string
expected string
}{
{"the fancy slug", "the_fancy_slug"},
{"ThE-FaNcYnEss", "the_fancyness"},
{"this is: a migration", "this_is_a_migration"},
{"add caché", "add_cach"},
}
for _, c := range cases {
require.Equal(t, c.expected, slugify(c.input))
}
}