github.com/Accefy/pop@v0.0.0-20230428174248-e9f677eab5b9/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/v2/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", "started_at:time.Time", "finished_at:nulls.Time") 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.Column("started_at", "timestamp", {}) 55 t.Column("finished_at", "timestamp", {null: true}) 56 t.Timestamps() 57 }`, 58 }, 59 } 60 61 for _, c := range cases { 62 g, err := New(c.Options) 63 r.NoError(err) 64 65 run := gentest.NewRunner() 66 run.With(g) 67 68 r.NoError(run.Run()) 69 70 res := run.Results() 71 72 r.Len(res.Commands, 0) 73 r.Len(res.Files, 2) 74 75 f := res.Files[0] 76 r.Equal("migrations/create_widgets.down.fizz", f.Name()) 77 r.Equal(`drop_table("widgets")`, f.String()) 78 79 f = res.Files[1] 80 r.Equal("migrations/create_widgets.up.fizz", f.Name()) 81 r.Equal(c.Result, f.String()) 82 } 83 } 84 85 func Test_New_SQL(t *testing.T) { 86 r := require.New(t) 87 88 ats, err := attrs.ParseArgs("id:uuid", "created_at:timestamp", "updated_at:timestamp", "name", "description:text", "age:int", "bar:nulls.String") 89 r.NoError(err) 90 91 g, err := New(&Options{ 92 TableName: "widgets", 93 Name: "create_widgets", 94 Type: "sql", 95 Translator: mockTranslator{}, 96 Attrs: ats, 97 }) 98 r.NoError(err) 99 100 run := gentest.NewRunner() 101 run.With(g) 102 103 r.NoError(run.Run()) 104 105 res := run.Results() 106 107 r.Len(res.Commands, 0) 108 r.Len(res.Files, 2) 109 110 f := res.Files[0] 111 r.Equal("migrations/create_widgets.test.down.sql", f.Name()) 112 r.Equal("drop table;", f.String()) 113 114 f = res.Files[1] 115 r.Equal("migrations/create_widgets.test.up.sql", f.Name()) 116 r.Equal("create table;", f.String()) 117 } 118 119 func Test_New_Fail(t *testing.T) { 120 r := require.New(t) 121 122 g, err := New(&Options{ 123 TableName: "", 124 Name: "create_widgets.fizz", 125 }) 126 r.Error(err) 127 r.NotEmpty(g) 128 }