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 }