43 lines
1.5 KiB
Go
43 lines
1.5 KiB
Go
package templates
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.sendico.io/tech/sxchnge/notifications/model"
|
|
)
|
|
|
|
func TestRenderAndValidate(t *testing.T) {
|
|
c, err := New([]Definition{{ID: "test", Version: "1", DefaultLocale: "en", Parameters: []string{"name"}, Locales: map[string]Content{"en": {Subject: "Hello {{.name}}", HTML: "<p>{{.name}}</p>", Text: "{{.name}}"}}}})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
r := model.Request{TemplateID: "test", TemplateVersion: "1", Parameters: map[string]string{"name": "<script>{{.other}}</script>"}}
|
|
result, err := c.Render(r)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.Contains(result.HTML, "<script>") || !strings.Contains(result.HTML, "{{.other}}") || result.Text != r.Parameters["name"] {
|
|
t.Fatalf("unsafe substitution: %+v", result)
|
|
}
|
|
for _, params := range []map[string]string{{}, {"name": "a", "extra": "b"}, {"wrong": "a"}, {"name": "bad\r\nsubject"}} {
|
|
r.Parameters = params
|
|
if _, err := c.Render(r); err == nil {
|
|
t.Fatal("invalid parameters accepted")
|
|
}
|
|
}
|
|
r.Parameters = map[string]string{"name": "valid"}
|
|
r.Locale = "unknown"
|
|
if _, err := c.Render(r); err == nil {
|
|
t.Fatal("unknown locale accepted")
|
|
}
|
|
}
|
|
func TestRejectBrokenCatalog(t *testing.T) {
|
|
for _, content := range []Content{{Subject: "Hello", HTML: "{{.undeclared}}"}, {Subject: "Hello", HTML: "{{"}, {HTML: "body"}} {
|
|
_, err := New([]Definition{{ID: "test", Version: "1", DefaultLocale: "en", Locales: map[string]Content{"en": content}}})
|
|
if err == nil {
|
|
t.Fatal("invalid template accepted")
|
|
}
|
|
}
|
|
}
|