github.com/cheikhshift/buffalo@v0.9.5/render/template_test.go (about)

     1  package render_test
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"os"
     7  	"path/filepath"
     8  	"strings"
     9  	"testing"
    10  
    11  	"github.com/gobuffalo/buffalo/render"
    12  	"github.com/gobuffalo/packr"
    13  	"github.com/gobuffalo/plush"
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  func Test_Template(t *testing.T) {
    18  	r := require.New(t)
    19  
    20  	tmpFile, err := ioutil.TempFile("", "test")
    21  	r.NoError(err)
    22  	defer os.Remove(tmpFile.Name())
    23  
    24  	_, err = tmpFile.Write([]byte("<%= name %>"))
    25  	r.NoError(err)
    26  
    27  	type ji func(string, ...string) render.Renderer
    28  
    29  	table := []ji{
    30  		render.New(render.Options{
    31  			TemplateEngine: plush.BuffaloRenderer,
    32  		}).Template,
    33  	}
    34  
    35  	for _, j := range table {
    36  		re := j("foo/bar", tmpFile.Name())
    37  		r.Equal("foo/bar", re.ContentType())
    38  		bb := &bytes.Buffer{}
    39  		err = re.Render(bb, render.Data{"name": "Mark"})
    40  		r.NoError(err)
    41  		r.Equal("Mark", strings.TrimSpace(bb.String()))
    42  	}
    43  }
    44  
    45  func Test_Template_Partial(t *testing.T) {
    46  	r := require.New(t)
    47  
    48  	tPath, err := ioutil.TempDir("", "")
    49  	r.NoError(err)
    50  	defer os.Remove(tPath)
    51  
    52  	partFile, err := os.Create(filepath.Join(tPath, "_foo.html"))
    53  	r.NoError(err)
    54  
    55  	_, err = partFile.Write([]byte("Foo > <%= name %>"))
    56  	r.NoError(err)
    57  
    58  	tmpFile, err := os.Create(filepath.Join(tPath, "index.html"))
    59  	r.NoError(err)
    60  
    61  	_, err = tmpFile.Write([]byte(`<%= partial("foo.html") %>`))
    62  	r.NoError(err)
    63  
    64  	type ji func(string, ...string) render.Renderer
    65  
    66  	table := []ji{
    67  		render.New(render.Options{
    68  			TemplatesBox: packr.NewBox(tPath),
    69  		}).Template,
    70  	}
    71  
    72  	for _, j := range table {
    73  		re := j("foo/bar", "index.html")
    74  		r.Equal("foo/bar", re.ContentType())
    75  		bb := &bytes.Buffer{}
    76  		err = re.Render(bb, render.Data{"name": "Mark"})
    77  		r.NoError(err)
    78  		r.Equal("Foo > Mark", strings.TrimSpace(bb.String()))
    79  	}
    80  }
    81  
    82  func Test_AssetPath(t *testing.T) {
    83  	r := require.New(t)
    84  
    85  	cases := map[string]string{
    86  		"something.txt":         "/assets/something.txt",
    87  		"images/something.png":  "/assets/images/something.png",
    88  		"/images/something.png": "/assets/images/something.png",
    89  		"application.css":       "/assets/application.aabbc123.css",
    90  	}
    91  
    92  	tdir, err := ioutil.TempDir("", "test")
    93  	if err != nil {
    94  		r.Fail("Could not set the Temp dir")
    95  	}
    96  
    97  	re := render.New(render.Options{
    98  		TemplateEngine: plush.BuffaloRenderer,
    99  		AssetsBox:      packr.NewBox(tdir),
   100  	}).Template
   101  
   102  	ioutil.WriteFile(filepath.Join(tdir, "manifest.json"), []byte(`{		
   103  		"application.css": "application.aabbc123.css"		
   104  	}`), 0644)
   105  
   106  	for original, expected := range cases {
   107  
   108  		tmpFile, err := ioutil.TempFile(tdir, "test")
   109  		r.NoError(err)
   110  
   111  		_, err = tmpFile.Write([]byte("<%= assetPath(\"" + original + "\") %>"))
   112  		r.NoError(err)
   113  
   114  		result := re("text/html", tmpFile.Name())
   115  
   116  		bb := &bytes.Buffer{}
   117  		err = result.Render(bb, render.Data{})
   118  		r.NoError(err)
   119  		r.Equal(expected, strings.TrimSpace(bb.String()))
   120  
   121  		os.Remove(tmpFile.Name())
   122  	}
   123  }
   124  
   125  func Test_AssetPathNoManifest(t *testing.T) {
   126  	r := require.New(t)
   127  
   128  	cases := map[string]string{
   129  		"something.txt": "/assets/something.txt",
   130  	}
   131  
   132  	tdir, err := ioutil.TempDir("", "test")
   133  	if err != nil {
   134  		r.Fail("Could not set the Temp dir")
   135  	}
   136  
   137  	re := render.New(render.Options{
   138  		TemplateEngine: plush.BuffaloRenderer,
   139  		AssetsBox:      packr.NewBox(tdir),
   140  	}).Template
   141  
   142  	for original, expected := range cases {
   143  
   144  		tmpFile, err := ioutil.TempFile(tdir, "test")
   145  		r.NoError(err)
   146  
   147  		_, err = tmpFile.Write([]byte("<%= assetPath(\"" + original + "\") %>"))
   148  		r.NoError(err)
   149  
   150  		result := re("text/html", tmpFile.Name())
   151  
   152  		bb := &bytes.Buffer{}
   153  		err = result.Render(bb, render.Data{})
   154  		r.NoError(err)
   155  		r.Equal(expected, strings.TrimSpace(bb.String()))
   156  
   157  		os.Remove(tmpFile.Name())
   158  	}
   159  }
   160  func Test_AssetPathManifestCorrupt(t *testing.T) {
   161  	r := require.New(t)
   162  
   163  	cases := map[string]string{
   164  		"something.txt": "manifest.json is not correct",
   165  		"other.txt":     "manifest.json is not correct",
   166  	}
   167  
   168  	tdir, err := ioutil.TempDir("", "test")
   169  	r.NoError(err)
   170  
   171  	ioutil.WriteFile(filepath.Join(tdir, "manifest.json"), []byte(`//shdnn Corrupt!`), 0644)
   172  
   173  	re := render.New(render.Options{
   174  		TemplateEngine: plush.BuffaloRenderer,
   175  		AssetsBox:      packr.NewBox(tdir),
   176  	}).Template
   177  
   178  	for original, expected := range cases {
   179  
   180  		tmpFile, err := ioutil.TempFile(tdir, "test")
   181  		r.NoError(err)
   182  
   183  		_, err = tmpFile.Write([]byte("<%= assetPath(\"" + original + "\") %>"))
   184  		r.NoError(err)
   185  
   186  		result := re("text/html", tmpFile.Name())
   187  
   188  		bb := &bytes.Buffer{}
   189  		err = result.Render(bb, render.Data{})
   190  		r.Error(err)
   191  		r.Contains(err.Error(), expected)
   192  
   193  		os.Remove(tmpFile.Name())
   194  	}
   195  }