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  }