github.com/jacobsoderblom/buffalo@v0.11.0/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/stretchr/testify/require" 14 ) 15 16 func Test_Template(t *testing.T) { 17 r := require.New(t) 18 19 tPath, err := ioutil.TempDir("", "") 20 r.NoError(err) 21 defer os.Remove(tPath) 22 23 tmpFile, err := os.Create(filepath.Join(tPath, "test")) 24 r.NoError(err) 25 defer os.Remove(tmpFile.Name()) 26 27 _, err = tmpFile.Write([]byte("<%= name %>")) 28 r.NoError(err) 29 30 type ji func(string, ...string) render.Renderer 31 32 table := []ji{ 33 render.New(render.Options{ 34 TemplatesBox: packr.NewBox(tPath), 35 }).Template, 36 } 37 38 for _, j := range table { 39 re := j("foo/bar", filepath.Base(tmpFile.Name())) 40 r.Equal("foo/bar", re.ContentType()) 41 bb := &bytes.Buffer{} 42 err = re.Render(bb, render.Data{"name": "Mark"}) 43 r.NoError(err) 44 r.Equal("Mark", strings.TrimSpace(bb.String())) 45 } 46 } 47 48 func Test_Template_Partial(t *testing.T) { 49 r := require.New(t) 50 51 tPath, err := ioutil.TempDir("", "") 52 r.NoError(err) 53 defer os.Remove(tPath) 54 55 partFile, err := os.Create(filepath.Join(tPath, "_foo.html")) 56 r.NoError(err) 57 58 _, err = partFile.Write([]byte("Foo > <%= name %>")) 59 r.NoError(err) 60 61 tmpFile, err := os.Create(filepath.Join(tPath, "index.html")) 62 r.NoError(err) 63 64 _, err = tmpFile.Write([]byte(`<%= partial("foo.html") %>`)) 65 r.NoError(err) 66 67 type ji func(string, ...string) render.Renderer 68 69 j := render.New(render.Options{ 70 TemplatesBox: packr.NewBox(tPath), 71 }).Template 72 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 func Test_Template_Partial_WithoutExtension(t *testing.T) { 82 r := require.New(t) 83 84 tPath, err := ioutil.TempDir("", "") 85 r.NoError(err) 86 defer os.Remove(tPath) 87 88 partFile, err := os.Create(filepath.Join(tPath, "_foo.html")) 89 r.NoError(err) 90 91 _, err = partFile.Write([]byte("Foo > <%= name %>")) 92 r.NoError(err) 93 94 tmpFile, err := os.Create(filepath.Join(tPath, "index.html")) 95 r.NoError(err) 96 97 _, err = tmpFile.Write([]byte(`<%= partial("foo") %>`)) 98 r.NoError(err) 99 100 type ji func(string, ...string) render.Renderer 101 102 j := render.New(render.Options{ 103 TemplatesBox: packr.NewBox(tPath), 104 }).HTML 105 106 re := j("index.html") 107 bb := &bytes.Buffer{} 108 err = re.Render(bb, render.Data{"name": "Mark"}) 109 r.NoError(err) 110 r.Equal("Foo > Mark", strings.TrimSpace(bb.String())) 111 } 112 113 func Test_AssetPath(t *testing.T) { 114 r := require.New(t) 115 116 cases := map[string]string{ 117 "something.txt": "/assets/something.txt", 118 "images/something.png": "/assets/images/something.png", 119 "/images/something.png": "/assets/images/something.png", 120 "application.css": "/assets/application.aabbc123.css", 121 } 122 123 tDir, err := ioutil.TempDir("", "templates") 124 if err != nil { 125 r.Fail("Could not set the templates dir") 126 } 127 128 aDir, err := ioutil.TempDir("", "assets") 129 if err != nil { 130 r.Fail("Could not set the assets dir") 131 } 132 133 re := render.New(render.Options{ 134 TemplatesBox: packr.NewBox(tDir), 135 AssetsBox: packr.NewBox(aDir), 136 }).Template 137 138 ioutil.WriteFile(filepath.Join(aDir, "manifest.json"), []byte(`{ 139 "application.css": "application.aabbc123.css" 140 }`), 0644) 141 142 for original, expected := range cases { 143 144 tmpFile, err := os.Create(filepath.Join(tDir, "test.html")) 145 r.NoError(err) 146 147 _, err = tmpFile.Write([]byte("<%= assetPath(\"" + original + "\") %>")) 148 r.NoError(err) 149 150 result := re("text/html", filepath.Base(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 161 func Test_AssetPathNoManifest(t *testing.T) { 162 r := require.New(t) 163 164 cases := map[string]string{ 165 "something.txt": "/assets/something.txt", 166 } 167 168 tDir, err := ioutil.TempDir("", "templates") 169 if err != nil { 170 r.Fail("Could not set the templates dir") 171 } 172 173 aDir, err := ioutil.TempDir("", "assets") 174 if err != nil { 175 r.Fail("Could not set the assets dir") 176 } 177 178 re := render.New(render.Options{ 179 TemplatesBox: packr.NewBox(tDir), 180 AssetsBox: packr.NewBox(aDir), 181 }).Template 182 183 for original, expected := range cases { 184 185 tmpFile, err := os.Create(filepath.Join(tDir, "test.html")) 186 r.NoError(err) 187 188 _, err = tmpFile.Write([]byte("<%= assetPath(\"" + original + "\") %>")) 189 r.NoError(err) 190 191 result := re("text/html", filepath.Base(tmpFile.Name())) 192 193 bb := &bytes.Buffer{} 194 err = result.Render(bb, render.Data{}) 195 r.NoError(err) 196 r.Equal(expected, strings.TrimSpace(bb.String())) 197 198 os.Remove(tmpFile.Name()) 199 } 200 } 201 func Test_AssetPathManifestCorrupt(t *testing.T) { 202 r := require.New(t) 203 204 cases := map[string]string{ 205 "something.txt": "manifest.json is not correct", 206 "other.txt": "manifest.json is not correct", 207 } 208 209 tDir, err := ioutil.TempDir("", "templates") 210 if err != nil { 211 r.Fail("Could not set the templates dir") 212 } 213 214 aDir, err := ioutil.TempDir("", "assets") 215 if err != nil { 216 r.Fail("Could not set the assets dir") 217 } 218 219 ioutil.WriteFile(filepath.Join(aDir, "manifest.json"), []byte(`//shdnn Corrupt!`), 0644) 220 221 re := render.New(render.Options{ 222 TemplatesBox: packr.NewBox(tDir), 223 AssetsBox: packr.NewBox(aDir), 224 }).Template 225 226 for original, expected := range cases { 227 228 tmpFile, err := os.Create(filepath.Join(tDir, "test.html")) 229 r.NoError(err) 230 231 _, err = tmpFile.Write([]byte("<%= assetPath(\"" + original + "\") %>")) 232 r.NoError(err) 233 234 result := re("text/html", filepath.Base(tmpFile.Name())) 235 236 bb := &bytes.Buffer{} 237 err = result.Render(bb, render.Data{}) 238 r.Error(err) 239 r.Contains(err.Error(), expected) 240 241 os.Remove(tmpFile.Name()) 242 } 243 }