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  }