github.com/haraldLmueller/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 }