github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/build/assets_test.go (about)

     1  package build
     2  
     3  import (
     4  	"archive/zip"
     5  	"io"
     6  	"os"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/JarrahG/buffalocli/internal/genny/assets/webpack"
    11  	"github.com/JarrahG/buffalocli/internal/genny/newapp/core"
    12  	"github.com/JarrahG/buffalocli/internal/genny/newapp/web"
    13  	"github.com/JarrahG/buffalocli/internal/genny/testrunner"
    14  	"github.com/gobuffalo/envy"
    15  	"github.com/gobuffalo/meta"
    16  	"github.com/stretchr/testify/require"
    17  )
    18  
    19  func Test_assets(t *testing.T) {
    20  	r := require.New(t)
    21  
    22  	run, err := testrunner.WebApp(&web.Options{})
    23  	r.NoError(err)
    24  
    25  	opts := &Options{
    26  		WithAssets: true,
    27  	}
    28  	r.NoError(opts.Validate())
    29  	opts.App.WithNodeJs = true
    30  	opts.App.PackageJSON.Scripts = map[string]string{
    31  		"build": "webpack -p --progress",
    32  	}
    33  	r.NoError(run.WithNew(assets(opts)))
    34  
    35  	r.NoError(envy.MustSet("NODE_ENV", ""))
    36  	ne := envy.Get("NODE_ENV", "")
    37  	r.Empty(ne)
    38  	r.NoError(run.Run())
    39  
    40  	ne = envy.Get("NODE_ENV", "")
    41  	r.NotEmpty(ne)
    42  	r.Equal(opts.Environment, ne)
    43  
    44  	res := run.Results()
    45  
    46  	cmds := []string{"npm run build"}
    47  	r.Len(res.Commands, len(cmds))
    48  	for i, c := range res.Commands {
    49  		r.Equal(cmds[i], strings.Join(c.Args, " "))
    50  	}
    51  }
    52  
    53  func Test_assets_Archived(t *testing.T) {
    54  	r := require.New(t)
    55  
    56  	app := meta.New(".")
    57  	app.Root = "."
    58  	webOpts := &web.Options{
    59  		Options: &core.Options{},
    60  		Webpack: &webpack.Options{},
    61  	}
    62  	webOpts.App = app
    63  	run, err := testrunner.WebApp(webOpts)
    64  	r.NoError(err)
    65  
    66  	opts := &Options{
    67  		WithAssets:    true,
    68  		ExtractAssets: true,
    69  	}
    70  
    71  	opts.App = app
    72  	r.NoError(opts.Validate())
    73  	r.NoError(run.WithNew(assets(opts)))
    74  	r.NoError(run.Run())
    75  
    76  	res := run.Results()
    77  
    78  	cmds := []string{}
    79  	r.Len(res.Commands, len(cmds))
    80  	for i, c := range res.Commands {
    81  		r.Equal(cmds[i], strings.Join(c.Args, " "))
    82  	}
    83  
    84  	f, err := res.Find("actions/app.go")
    85  	r.NoError(err)
    86  	r.Contains(f.String(), `// app.ServeFiles("/"`)
    87  
    88  	f, err = res.Find("bin/assets.zip")
    89  	r.NoError(err)
    90  
    91  	tmp, err := os.CreateTemp("", "assets-*.zip")
    92  	r.NoError(err)
    93  	t.Cleanup(func() {
    94  		os.Remove(tmp.Name())
    95  	})
    96  
    97  	_, err = io.Copy(tmp, f)
    98  	r.NoError(err)
    99  	r.NoError(tmp.Close())
   100  
   101  	archive, err := zip.OpenReader(tmp.Name())
   102  	r.NoError(err)
   103  
   104  	r.Equal(1, len(archive.File))
   105  	for _, e := range []string{"keep"} {
   106  		_, err = archive.Open(e)
   107  		r.NoError(err)
   108  	}
   109  }