github.com/segakazzz/buffalo@v0.16.22-0.20210119082501-1f52048d3feb/genny/actions/build_tests.go (about)

     1  package actions
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/gobuffalo/genny/v2"
     7  )
     8  
     9  // buildTests is the top level action/test builder
    10  // it determines whether to build a new actions/foo_test.go file
    11  // or append to an existing one
    12  func buildTests(pres *presenter) genny.RunFn {
    13  	return func(r *genny.Runner) error {
    14  		fn := fmt.Sprintf("actions/%s_test.go", pres.Name.File())
    15  		xf, err := r.FindFile(fn)
    16  		if err != nil {
    17  			return buildNewTests(fn, pres)(r)
    18  		}
    19  		return appendTests(xf, pres)(r)
    20  	}
    21  }
    22  
    23  // buildNewTests builds a brand new actions/foo_test.go file
    24  // and files it with tests
    25  func buildNewTests(fn string, pres *presenter) genny.RunFn {
    26  	return func(r *genny.Runner) error {
    27  		h, err := box.FindString("tests_header.go.tmpl")
    28  		if err != nil {
    29  			return err
    30  		}
    31  		a, err := box.FindString("test.go.tmpl")
    32  		if err != nil {
    33  			return err
    34  		}
    35  
    36  		f := genny.NewFileS(fn+".tmpl", h+a)
    37  
    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 := box.FindString("test.go.tmpl")
    51  		if err != nil {
    52  			return err
    53  		}
    54  		f := genny.NewFileS(f.Name()+".tmpl", f.String()+a)
    55  		f, err = transform(pres, f)
    56  		if err != nil {
    57  			return err
    58  		}
    59  		return r.File(f)
    60  	}
    61  }