github.com/dolanor/pop@v4.13.0+incompatible/genny/model/model_test.go (about) 1 package model 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/gobuffalo/attrs" 8 "github.com/gobuffalo/genny/gentest" 9 "github.com/gobuffalo/gogen" 10 packr "github.com/gobuffalo/packr/v2" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func clean(s string) string { 15 s = strings.TrimSpace(s) 16 s = strings.Replace(s, "\r\n", "\n", -1) 17 s = strings.Replace(s, "\r", "\n", -1) 18 s = strings.Replace(s, "\t", "", -1) 19 return s 20 } 21 22 func Test_New(t *testing.T) { 23 r := require.New(t) 24 25 g, err := New(&Options{ 26 Name: "widget", 27 }) 28 r.NoError(err) 29 30 run := gentest.NewRunner() 31 run.With(g) 32 33 r.NoError(run.Run()) 34 35 res := run.Results() 36 37 r.Len(res.Commands, 0) 38 r.Len(res.Files, 2) 39 40 r.NoError(gentest.CompareFiles([]string{"models/widget.go", "models/widget_test.go"}, res.Files)) 41 } 42 43 func Test_New_Standard(t *testing.T) { 44 r := require.New(t) 45 46 ats, err := attrs.ParseArgs("id:uuid", "created_at:timestamp", "updated_at:timestamp", "name", "description:text", "age:int", "bar:nulls.String") 47 r.NoError(err) 48 g, err := New(&Options{ 49 Name: "widget", 50 Attrs: ats, 51 }) 52 53 r.NoError(err) 54 55 run := gentest.NewRunner() 56 run.With(g) 57 58 r.NoError(run.Run()) 59 60 res := run.Results() 61 62 r.Len(res.Commands, 0) 63 r.NoError(gentest.CompareFiles([]string{"models/widget.go", "models/widget_test.go"}, res.Files)) 64 65 box := packr.New("Test_New_Standard", "../model/_fixtures") 66 67 f, err := res.Find("models/widget_test.go") 68 r.NoError(err) 69 bf, err := box.FindString(f.Name()) 70 r.NoError(err) 71 r.Equal(bf, f.String()) 72 73 f, err = res.Find("models/widget.go") 74 75 tf := gogen.FmtTransformer() 76 f, err = tf.Transform(f) 77 r.NoError(err) 78 79 bf, err = box.FindString(f.Name()) 80 r.NoError(err) 81 r.Equal(clean(bf), clean(f.String())) 82 } 83 84 func Test_New_No_Attrs(t *testing.T) { 85 r := require.New(t) 86 g, err := New(&Options{ 87 Name: "widget", 88 }) 89 90 r.NoError(err) 91 92 run := gentest.NewRunner() 93 run.With(g) 94 95 r.NoError(run.Run()) 96 97 res := run.Results() 98 f, err := res.Find("models/widget.go") 99 r.NoError(err) 100 101 tf := gogen.FmtTransformer() 102 f, err = tf.Transform(f) 103 r.NoError(err) 104 105 box := packr.New("Test_New_No_Attrs", "../model/_fixtures") 106 bf, err := box.FindString("models/widget_empty.go") 107 r.NoError(err) 108 r.Equal(clean(bf), clean(f.String())) 109 } 110 111 func Test_New_XML(t *testing.T) { 112 r := require.New(t) 113 114 ats, err := attrs.ParseArgs("id:uuid", "created_at:timestamp", "updated_at:timestamp", "name", "description:text", "age:int", "bar:nulls.String") 115 r.NoError(err) 116 g, err := New(&Options{ 117 Name: "widget", 118 Encoding: "xml", 119 Attrs: ats, 120 }) 121 122 r.NoError(err) 123 124 run := gentest.NewRunner() 125 run.With(g) 126 127 r.NoError(run.Run()) 128 129 res := run.Results() 130 131 r.Len(res.Commands, 0) 132 r.NoError(gentest.CompareFiles([]string{"models/widget.go", "models/widget_test.go"}, res.Files)) 133 134 box := packr.New("Test_New_XML", "../model/_fixtures") 135 136 f, err := res.Find("models/widget_test.go") 137 r.NoError(err) 138 bf, err := box.FindString(f.Name()) 139 r.NoError(err) 140 r.Equal(bf, f.String()) 141 142 f, err = res.Find("models/widget.go") 143 144 tf := gogen.FmtTransformer() 145 f, err = tf.Transform(f) 146 r.NoError(err) 147 148 bf, err = box.FindString("models/widget_xml.go") 149 r.NoError(err) 150 r.Equal(clean(bf), clean(f.String())) 151 } 152 153 func Test_New_JSONAPI(t *testing.T) { 154 r := require.New(t) 155 156 ats, err := attrs.ParseArgs("id:uuid", "created_at:timestamp", "updated_at:timestamp", "name", "description:text", "age:int", "bar:nulls.String") 157 r.NoError(err) 158 g, err := New(&Options{ 159 Name: "widget", 160 Encoding: "jsonapi", 161 Attrs: ats, 162 }) 163 164 r.NoError(err) 165 166 run := gentest.NewRunner() 167 run.With(g) 168 169 r.NoError(run.Run()) 170 171 res := run.Results() 172 173 r.Len(res.Commands, 0) 174 r.NoError(gentest.CompareFiles([]string{"models/widget.go", "models/widget_test.go"}, res.Files)) 175 176 box := packr.New("Test_New_JSONAPI", "../model/_fixtures") 177 178 f, err := res.Find("models/widget_test.go") 179 r.NoError(err) 180 bf, err := box.FindString(f.Name()) 181 r.NoError(err) 182 r.Equal(bf, f.String()) 183 184 f, err = res.Find("models/widget.go") 185 186 tf := gogen.FmtTransformer() 187 f, err = tf.Transform(f) 188 r.NoError(err) 189 190 bf, err = box.FindString("models/widget_jsonapi.go") 191 r.NoError(err) 192 r.Equal(clean(bf), clean(f.String())) 193 } 194 195 func Test_New_Package(t *testing.T) { 196 r := require.New(t) 197 198 g, err := New(&Options{ 199 Name: "widget", 200 Path: "models/admin", 201 }) 202 r.NoError(err) 203 204 run := gentest.NewRunner() 205 run.With(g) 206 207 r.NoError(run.Run()) 208 209 res := run.Results() 210 211 r.Len(res.Commands, 0) 212 r.Len(res.Files, 2) 213 214 f, err := res.Find("models/admin/widget.go") 215 r.NoError(err) 216 r.Contains(f.String(), "package admin") 217 }