github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/actions/build_tests.go (about) 1 package actions 2 3 import ( 4 "fmt" 5 "io" 6 7 "github.com/gobuffalo/genny/v2" 8 ) 9 10 // buildTests is the top level action/test builder 11 // it determines whether to build a new actions/foo_test.go file 12 // or append to an existing one 13 func buildTests(pres *presenter) genny.RunFn { 14 return func(r *genny.Runner) error { 15 fn := fmt.Sprintf("actions/%s_test.go", pres.Name.File()) 16 xf, err := r.FindFile(fn) 17 if err != nil { 18 return buildNewTests(fn, pres)(r) 19 } 20 return appendTests(xf, pres)(r) 21 } 22 } 23 24 // buildNewTests builds a brand new actions/foo_test.go file 25 // and files it with tests 26 func buildNewTests(fn string, pres *presenter) genny.RunFn { 27 return func(r *genny.Runner) error { 28 h, err := templates.Open("templates/tests_header.go.tmpl") 29 if err != nil { 30 return err 31 } 32 a, err := templates.Open("templates/test.go.tmpl") 33 if err != nil { 34 return err 35 } 36 37 f := genny.NewFile(fn+".tmpl", io.MultiReader(h, a)) 38 f, err = transform(pres, f) 39 if err != nil { 40 return err 41 } 42 return r.File(f) 43 } 44 } 45 46 // appendTests appends *only* tests that don't exist in 47 // actions/foo_test.go. if the test already exists it is not touched. 48 func appendTests(f genny.File, pres *presenter) genny.RunFn { 49 return func(r *genny.Runner) error { 50 a, err := templates.Open("templates/test.go.tmpl") 51 if err != nil { 52 return err 53 } 54 55 f := genny.NewFile(f.Name()+".tmpl", io.MultiReader(f, a)) 56 f, err = transform(pres, f) 57 if err != nil { 58 return err 59 } 60 return r.File(f) 61 } 62 }