github.com/res-am/buffalo@v0.11.1/render/js_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/stretchr/testify/require"
    14  )
    15  
    16  func Test_JavaScript(t *testing.T) {
    17  	r := require.New(t)
    18  
    19  	tmpDir := filepath.Join(os.TempDir(), "markdown_test")
    20  	err := os.MkdirAll(tmpDir, 0766)
    21  	r.NoError(err)
    22  	defer os.Remove(tmpDir)
    23  
    24  	tmpFile, err := os.Create(filepath.Join(tmpDir, "test.js"))
    25  	r.NoError(err)
    26  
    27  	_, err = tmpFile.Write([]byte("<%= name %>"))
    28  	r.NoError(err)
    29  
    30  	t.Run("without a layout", func(st *testing.T) {
    31  		r := require.New(st)
    32  
    33  		j := render.New(render.Options{
    34  			TemplatesBox: packr.NewBox(tmpDir),
    35  		}).JavaScript
    36  
    37  		re := j(filepath.Base(tmpFile.Name()))
    38  		r.Equal("application/javascript", re.ContentType())
    39  		bb := &bytes.Buffer{}
    40  		err = re.Render(bb, map[string]interface{}{"name": "Mark"})
    41  		r.NoError(err)
    42  		r.Equal("Mark", strings.TrimSpace(bb.String()))
    43  	})
    44  
    45  	t.Run("with a layout", func(st *testing.T) {
    46  		r := require.New(st)
    47  
    48  		layout, err := os.Create(filepath.Join(tmpDir, "layout.js"))
    49  		r.NoError(err)
    50  
    51  		_, err = layout.Write([]byte("<body><%= yield %></body>"))
    52  		r.NoError(err)
    53  
    54  		re := render.New(render.Options{
    55  			JavaScriptLayout: filepath.Base(layout.Name()),
    56  			TemplatesBox:     packr.NewBox(tmpDir),
    57  		})
    58  
    59  		st.Run("using just the JavaScriptLayout", func(sst *testing.T) {
    60  			r := require.New(sst)
    61  			h := re.JavaScript(filepath.Base(tmpFile.Name()))
    62  
    63  			r.Equal("application/javascript", h.ContentType())
    64  			bb := &bytes.Buffer{}
    65  			err = h.Render(bb, map[string]interface{}{"name": "Mark"})
    66  			r.NoError(err)
    67  			r.Equal("<body>Mark</body>", strings.TrimSpace(bb.String()))
    68  		})
    69  
    70  		st.Run("overriding the JavaScriptLayout", func(sst *testing.T) {
    71  			r := require.New(sst)
    72  			nlayout, err := os.Create(filepath.Join(tmpDir, "layout2.js"))
    73  			r.NoError(err)
    74  
    75  			_, err = nlayout.Write([]byte("<html><%= yield %></html>"))
    76  			r.NoError(err)
    77  			h := re.JavaScript(filepath.Base(tmpFile.Name()), filepath.Base(nlayout.Name()))
    78  
    79  			r.Equal("application/javascript", h.ContentType())
    80  			bb := &bytes.Buffer{}
    81  			err = h.Render(bb, map[string]interface{}{"name": "Mark"})
    82  			r.NoError(err)
    83  			r.Equal("<html>Mark</html>", strings.TrimSpace(bb.String()))
    84  		})
    85  
    86  	})
    87  
    88  }
    89  
    90  func Test_JavaScript_JS_Partial(t *testing.T) {
    91  	r := require.New(t)
    92  
    93  	dir, err := ioutil.TempDir("", "")
    94  	r.NoError(err)
    95  	defer os.RemoveAll(dir)
    96  
    97  	re := render.New(render.Options{
    98  		TemplatesBox: packr.NewBox(dir),
    99  	})
   100  
   101  	pf, err := os.Create(filepath.Join(dir, "_part.js"))
   102  	r.NoError(err)
   103  	_, err = pf.WriteString("alert('hi!');")
   104  	r.NoError(err)
   105  
   106  	tf, err := os.Create(filepath.Join(dir, "test.js"))
   107  	r.NoError(err)
   108  	_, err = tf.WriteString("let a = 1;\n<%= partial(\"part.js\") %>")
   109  
   110  	bb := &bytes.Buffer{}
   111  	err = re.JavaScript("test.js").Render(bb, map[string]interface{}{})
   112  	r.NoError(err)
   113  
   114  	r.Equal("let a = 1;\nalert('hi!');", bb.String())
   115  }
   116  
   117  func Test_JavaScript_HTML_Partial(t *testing.T) {
   118  	r := require.New(t)
   119  
   120  	dir, err := ioutil.TempDir("", "")
   121  	r.NoError(err)
   122  	defer os.RemoveAll(dir)
   123  
   124  	re := render.New(render.Options{
   125  		TemplatesBox: packr.NewBox(dir),
   126  	})
   127  
   128  	pf, err := os.Create(filepath.Join(dir, "_part.html"))
   129  	r.NoError(err)
   130  
   131  	const h = `<div id="foo">
   132  	<p>hi</p>
   133  </div>`
   134  	_, err = pf.WriteString(h)
   135  	r.NoError(err)
   136  
   137  	tf, err := os.Create(filepath.Join(dir, "test.js"))
   138  	r.NoError(err)
   139  	_, err = tf.WriteString("let a = \"<%= partial(\"part.html\") %>\"")
   140  
   141  	bb := &bytes.Buffer{}
   142  	err = re.JavaScript("test.js").Render(bb, map[string]interface{}{})
   143  	r.NoError(err)
   144  
   145  	r.Equal("let a = \"\\x3Cdiv id=\\\"foo\\\"\\x3E\\u000A\\u0009\\x3Cp\\x3Ehi\\x3C/p\\x3E\\u000A\\x3C/div\\x3E\"", bb.String())
   146  }