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