github.com/gocaveman/caveman@v0.0.0-20191211162744-0ddf99dbdf6e/regions/regions_test.go (about) 1 package regions 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "net/http/httputil" 7 "testing" 8 9 "github.com/gocaveman/caveman/renderer" 10 "github.com/gocaveman/caveman/tmpl" 11 "github.com/gocaveman/caveman/webutil" 12 "github.com/spf13/afero" 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestRegions(t *testing.T) { 17 18 // start with renderer test, trim anything we can and 19 // add region stuff to it 20 21 // check enabled, request matches, ContextMeta and sequence 22 23 assert := assert.New(t) 24 25 fs := afero.NewMemMapFs() 26 27 fs.MkdirAll("/test/views", 0755) 28 fs.MkdirAll("/test/views/sampledir", 0755) 29 fs.MkdirAll("/test/includes", 0755) 30 31 afero.WriteFile(fs, "/test/views/sampledir/example.gohtml", []byte(`--- 32 some: data 33 goes: here 34 --- 35 {{template "/main-page.gohtml" .}} 36 {{define "body"}}body_section{{end}} 37 `), 0644) 38 39 afero.WriteFile(fs, "/test/includes/main-page.gohtml", []byte(`<!doctype html> 40 <html><head> 41 {{block "style+" .}}{{end}} 42 </head><body> 43 {{block "leftnav+" .}}{{end}} 44 {{block "body" .}}{{end}} 45 {{block "script+" .}}{{end}} 46 </body></html> 47 `), 0755) 48 49 afero.WriteFile(fs, "/test/includes/bar1.gohtml", []byte(`bar1content`), 0755) 50 afero.WriteFile(fs, "/test/includes/bar2.gohtml", []byte(`bar2content`), 0755) 51 52 tmplStore := &tmpl.HFSStore{ 53 FileSystems: map[string]http.FileSystem{ 54 tmpl.ViewsCategory: afero.NewHttpFs(afero.NewBasePathFs(fs, "/test/views")), 55 tmpl.IncludesCategory: afero.NewHttpFs(afero.NewBasePathFs(fs, "/test/includes")), 56 }, 57 } 58 59 rend := renderer.NewFromTemplateReader(tmplStore) 60 61 blockDefineHandler := renderer.NewBlockDefineHandler() 62 reqCtxHandler := webutil.NewRequestContextHandler() 63 rendHandler := renderer.NewHandler(rend) 64 65 regionHandler := &RegionHandler{Store: nil} 66 _ = regionHandler 67 68 hl := webutil.NewDefaultHandlerList(blockDefineHandler, reqCtxHandler, regionHandler, rendHandler) 69 70 runReq := func(s Store, urlPath string) string { 71 72 regionHandler.Store = s 73 74 w := httptest.NewRecorder() 75 r := httptest.NewRequest("GET", urlPath, nil) 76 hl.ServeHTTP(w, r) 77 78 b, err := httputil.DumpResponse(w.Result(), true) 79 if err != nil { 80 panic(err) 81 } 82 return string(b) 83 84 } 85 86 var resStr string 87 88 resStr = runReq(ListStore{ 89 Definition{ 90 DefinitionID: "def1", 91 RegionName: "leftnav+", 92 Sequence: 1, 93 TemplateName: "/bar1.gohtml", 94 }, 95 }, "/sampledir/example") 96 t.Logf("RESULT: %s", resStr) 97 assert.Contains(resStr, "bar1content") 98 99 }