github.com/reggieriser/pop@v4.13.1+incompatible/genny/fizz/ctable/create_table_test.go (about) 1 package ctable 2 3 import ( 4 "testing" 5 6 "github.com/gobuffalo/attrs" 7 "github.com/gobuffalo/genny/gentest" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func Test_New(t *testing.T) { 12 r := require.New(t) 13 14 ats, err := attrs.ParseArgs("id:uuid", "created_at:timestamp", "updated_at:timestamp", "name", "description:text", "age:int", "bar:nulls.String") 15 r.NoError(err) 16 17 cases := []struct { 18 Options *Options 19 Result string 20 }{ 21 { 22 &Options{ 23 TableName: "widgets", 24 Name: "create_widgets", 25 ForceDefaultTimestamps: true, 26 }, 27 `create_table("widgets") { 28 t.Timestamps() 29 }`, 30 }, 31 { 32 &Options{ 33 TableName: "widget", 34 Name: "create_widgets", 35 ForceDefaultTimestamps: true, 36 }, 37 `create_table("widgets") { 38 t.Timestamps() 39 }`, 40 }, 41 { 42 &Options{ 43 TableName: "widgets", 44 Name: "create_widgets", 45 Attrs: ats, 46 ForceDefaultTimestamps: true, 47 }, 48 `create_table("widgets") { 49 t.Column("id", "uuid", {primary: true}) 50 t.Column("name", "string", {}) 51 t.Column("description", "text", {}) 52 t.Column("age", "integer", {}) 53 t.Column("bar", "string", {null: true}) 54 t.Timestamps() 55 }`, 56 }, 57 } 58 59 for _, c := range cases { 60 g, err := New(c.Options) 61 r.NoError(err) 62 63 run := gentest.NewRunner() 64 run.With(g) 65 66 r.NoError(run.Run()) 67 68 res := run.Results() 69 70 r.Len(res.Commands, 0) 71 r.Len(res.Files, 2) 72 73 f := res.Files[0] 74 r.Equal("migrations/create_widgets.down.fizz", f.Name()) 75 r.Equal(`drop_table("widgets")`, f.String()) 76 77 f = res.Files[1] 78 r.Equal("migrations/create_widgets.up.fizz", f.Name()) 79 r.Equal(c.Result, f.String()) 80 } 81 } 82 83 func Test_New_SQL(t *testing.T) { 84 r := require.New(t) 85 86 ats, err := attrs.ParseArgs("id:uuid", "created_at:timestamp", "updated_at:timestamp", "name", "description:text", "age:int", "bar:nulls.String") 87 r.NoError(err) 88 89 g, err := New(&Options{ 90 TableName: "widgets", 91 Name: "create_widgets", 92 Type: "sql", 93 Translator: mockTranslator{}, 94 Attrs: ats, 95 }) 96 r.NoError(err) 97 98 run := gentest.NewRunner() 99 run.With(g) 100 101 r.NoError(run.Run()) 102 103 res := run.Results() 104 105 r.Len(res.Commands, 0) 106 r.Len(res.Files, 2) 107 108 f := res.Files[0] 109 r.Equal("migrations/create_widgets.test.down.sql", f.Name()) 110 r.Equal("drop table;", f.String()) 111 112 f = res.Files[1] 113 r.Equal("migrations/create_widgets.test.up.sql", f.Name()) 114 r.Equal("create table;", f.String()) 115 } 116 117 func Test_New_Fail(t *testing.T) { 118 r := require.New(t) 119 120 g, err := New(&Options{ 121 TableName: "", 122 Name: "create_widgets.fizz", 123 }) 124 r.Error(err) 125 r.NotEmpty(g) 126 }