diff --git a/config/setup/markdown_test.go b/config/setup/markdown_test.go index c84a118dd..c8b2f3154 100644 --- a/config/setup/markdown_test.go +++ b/config/setup/markdown_test.go @@ -2,8 +2,14 @@ package setup import ( "fmt" - "github.com/mholt/caddy/middleware/markdown" + "io/ioutil" + "net/http" + "os" + "path/filepath" "testing" + + "github.com/mholt/caddy/middleware" + "github.com/mholt/caddy/middleware/markdown" ) func TestMarkdown(t *testing.T) { @@ -33,8 +39,82 @@ func TestMarkdown(t *testing.T) { if fmt.Sprint(myHandler.Configs[0].Extensions) != fmt.Sprint([]string{".md"}) { t.Errorf("Expected .md as the Default Extension") } - } + +func TestMarkdownStaticGen(t *testing.T) { + c := NewTestController(`markdown /blog { + ext .md + template tpl_with_include.html + sitegen +}`) + + c.Root = "./testdata" + mid, err := Markdown(c) + + if err != nil { + t.Errorf("Expected no errors, got: %v", err) + } + + if mid == nil { + t.Fatal("Expected middleware, was nil instead") + } + + for _, start := range c.Startup { + err := start() + if err != nil { + t.Errorf("Startup error: %v", err) + } + } + + next := middleware.HandlerFunc(func(w http.ResponseWriter, r *http.Request) (int, error) { + t.Fatalf("Next shouldn't be called") + return 0, nil + }) + hndlr := mid(next) + mkdwn, ok := hndlr.(markdown.Markdown) + if !ok { + t.Fatalf("Was expecting a markdown.Markdown but got %T", hndlr) + } + + expectedStaticFiles := map[string]string{"/blog/first_post.md": "testdata/generated_site/blog/first_post.md/index.html"} + if fmt.Sprint(expectedStaticFiles) != fmt.Sprint(mkdwn.Configs[0].StaticFiles) { + t.Fatalf("Test expected StaticFiles to be %s, but got %s", + fmt.Sprint(expectedStaticFiles), fmt.Sprint(mkdwn.Configs[0].StaticFiles)) + } + + filePath := "testdata/generated_site/blog/first_post.md/index.html" + if _, err := os.Stat(filePath); err != nil { + t.Fatalf("An error occured when getting the file information: %v", err) + } + + html, err := ioutil.ReadFile(filePath) + if err != nil { + t.Fatalf("An error occured when getting the file content: %v", err) + } + + expectedBody := ` + + +first_post + + +

Header title

+ +

Test h1

+ + + +` + if string(html) != expectedBody { + t.Fatalf("Expected file content: %v got: %v", expectedBody, html) + } + + fp := filepath.Join(c.Root, markdown.DefaultStaticDir) + if err = os.RemoveAll(fp); err != nil { + t.Errorf("Error while removing the generated static files: ", err) + } +} + func TestMarkdownParse(t *testing.T) { tests := []struct { inputMarkdownConfig string @@ -52,9 +132,20 @@ func TestMarkdownParse(t *testing.T) { Styles: []string{"/resources/css/blog.css"}, Scripts: []string{"/resources/js/blog.js"}, }}}, + {`markdown /blog { + ext .md + template tpl_with_include.html + sitegen +}`, false, []markdown.Config{{ + PathScope: "/blog", + Extensions: []string{".md"}, + Templates: map[string]string{markdown.DefaultTemplate: "testdata/tpl_with_include.html"}, + StaticDir: markdown.DefaultStaticDir, + }}}, } for i, test := range tests { c := NewTestController(test.inputMarkdownConfig) + c.Root = "./testdata" actualMarkdownConfigs, err := markdownParse(c) if err == nil && test.shouldErr { @@ -81,7 +172,10 @@ func TestMarkdownParse(t *testing.T) { t.Errorf("Test %d expected %dth Markdown Config Scripts to be %s , but got %s", i, j, fmt.Sprint(test.expectedMarkdownConfig[j].Scripts), fmt.Sprint(actualMarkdownConfig.Scripts)) } - + if fmt.Sprint(actualMarkdownConfig.Templates) != fmt.Sprint(test.expectedMarkdownConfig[j].Templates) { + t.Errorf("Test %d expected %dth Markdown Config Templates to be %s , but got %s", + i, j, fmt.Sprint(test.expectedMarkdownConfig[j].Templates), fmt.Sprint(actualMarkdownConfig.Templates)) + } } } diff --git a/config/setup/testdata/blog/first_post.md b/config/setup/testdata/blog/first_post.md new file mode 100644 index 000000000..f26583b75 --- /dev/null +++ b/config/setup/testdata/blog/first_post.md @@ -0,0 +1 @@ +# Test h1 diff --git a/config/setup/testdata/header.html b/config/setup/testdata/header.html new file mode 100644 index 000000000..9c96e0e37 --- /dev/null +++ b/config/setup/testdata/header.html @@ -0,0 +1 @@ +

Header title

diff --git a/config/setup/testdata/tpl_with_include.html b/config/setup/testdata/tpl_with_include.html new file mode 100644 index 000000000..95eeae0c8 --- /dev/null +++ b/config/setup/testdata/tpl_with_include.html @@ -0,0 +1,10 @@ + + + +{{.Doc.title}} + + +{{.Include "header.html"}} +{{.Doc.body}} + + diff --git a/middleware/markdown/markdown_test.go b/middleware/markdown/markdown_test.go index 28dd22848..917cff9bf 100644 --- a/middleware/markdown/markdown_test.go +++ b/middleware/markdown/markdown_test.go @@ -1,11 +1,14 @@ package markdown import ( + "log" "net/http" "net/http/httptest" + "os" "strings" "sync" "testing" + "time" "github.com/mholt/caddy/middleware" "github.com/russross/blackfriday" @@ -38,6 +41,24 @@ func TestMarkdown(t *testing.T) { StaticDir: DefaultStaticDir, StaticFiles: make(map[string]string), }, + Config{ + Renderer: blackfriday.HtmlRenderer(0, "", ""), + PathScope: "/og", + Extensions: []string{".md"}, + Styles: []string{}, + Scripts: []string{}, + Templates: templates, + StaticDir: "testdata/og_static", + StaticFiles: map[string]string{"/og/first.md": "testdata/og_static/og/first.md/index.html"}, + Links: []PageLink{ + PageLink{ + Title: "first", + Summary: "", + Date: time.Now(), + Url: "/og/first.md", + }, + }, + }, }, IndexFiles: []string{"index.html"}, Next: middleware.HandlerFunc(func(w http.ResponseWriter, r *http.Request) (int, error) { @@ -129,12 +150,47 @@ func getTrue() bool { t.Fatalf("Expected body: %v got: %v", expectedBody, respBody) } + req, err = http.NewRequest("GET", "/og/first.md", nil) + if err != nil { + t.Fatalf("Could not create HTTP request: %v", err) + } + rec = httptest.NewRecorder() + currenttime := time.Now().Local().Add(-time.Second) + err = os.Chtimes("testdata/og/first.md", currenttime, currenttime) + currenttime = time.Now().Local() + err = os.Chtimes("testdata/og_static/og/first.md/index.html", currenttime, currenttime) + + md.ServeHTTP(rec, req) + if rec.Code != http.StatusOK { + t.Fatalf("Wrong status, expected: %d and got %d", http.StatusOK, rec.Code) + } + respBody = rec.Body.String() + expectedBody = ` + + +first_post + + +

Header title

+ +

Test h1

+ + +` + respBody = replacer.Replace(respBody) + expectedBody = replacer.Replace(expectedBody) + if respBody != expectedBody { + t.Fatalf("Expected body: %v got: %v", expectedBody, respBody) + } + expectedLinks := []string{ "/blog/test.md", "/log/test.md", + "/og/first.md", } for i, c := range md.Configs { + log.Printf("Test number: %d, configuration links: %v, config: %v", i, c.Links, c) if c.Links[0].Url != expectedLinks[i] { t.Fatalf("Expected %v got %v", expectedLinks[i], c.Links[0].Url) } @@ -158,4 +214,8 @@ func getTrue() bool { } w.Wait() + if err = os.RemoveAll(DefaultStaticDir); err != nil { + t.Errorf("Error while removing the generated static files: %v", err) + } + } diff --git a/middleware/markdown/testdata/og/first.md b/middleware/markdown/testdata/og/first.md new file mode 100644 index 000000000..f26583b75 --- /dev/null +++ b/middleware/markdown/testdata/og/first.md @@ -0,0 +1 @@ +# Test h1 diff --git a/middleware/markdown/testdata/og_static/og/first.md/index.html b/middleware/markdown/testdata/og_static/og/first.md/index.html new file mode 100644 index 000000000..4dd4a5a24 --- /dev/null +++ b/middleware/markdown/testdata/og_static/og/first.md/index.html @@ -0,0 +1,12 @@ + + + +first_post + + +

Header title

+ +

Test h1

+ + +