Skip to content

Commit

Permalink
Error instead of die when rendering templates
Browse files Browse the repository at this point in the history
bittersweet committed Oct 11, 2015
1 parent 34eae78 commit 1dbbc67
Showing 2 changed files with 42 additions and 10 deletions.
10 changes: 5 additions & 5 deletions notifier.go
Original file line number Diff line number Diff line change
@@ -54,22 +54,22 @@ func (n *Notifier) checkRules(e *Event) bool {
return true
}

func (n *Notifier) renderTemplate(e *Event) []byte {
func (n *Notifier) renderTemplate(e *Event) ([]byte, error) {
var err error
var doc bytes.Buffer

t := template.New("notificationTemplate")
t, err = t.Parse(n.Template)
if err != nil {
log.Fatal("t.Parse of n.Template", err)
return []byte(""), err
}

err = t.Execute(&doc, e.toMap())
if err != nil {
log.Fatal("t.Execute ", err)
return []byte(""), err
}

return doc.Bytes()
return doc.Bytes(), nil
}

func (n *Notifier) notify(e *Event, mn notifiers.MessageNotifier) {
@@ -80,7 +80,7 @@ func (n *Notifier) notify(e *Event, mn notifiers.MessageNotifier) {
return
}

message := n.renderTemplate(e)
message, _ := n.renderTemplate(e)
mn.SendMessage(e.Identifier, n.Target, message)
log.Printf("Notifying notifier id: %d done\n", n.ID)
}
42 changes: 37 additions & 5 deletions notifier_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

import (
"fmt"
"testing"

"github.com/bittersweet/notifilter/notifiers"
@@ -144,9 +145,40 @@ func TestNotifierRenderTemplate(t *testing.T) {
data := types.JsonText(`{"active": true, "name": "Go", "number": 12}`)
event := setupTestNotifier(data)

result := n.renderTemplate(&event)
result, err := n.renderTemplate(&event)
expected := []byte("name: Go")
assert.Equal(t, result, expected)
assert.Nil(t, err)
}

func TestNotifierRenderWithInvalidTemplate(t *testing.T) {
n := Notifier{
Template: "name: {{.name}",
}

data := types.JsonText(`{"active": true, "name": "Go", "number": 12}`)
event := setupTestNotifier(data)

result, err := n.renderTemplate(&event)
expected := []byte("")
assert.Equal(t, result, expected)
assert.NotNil(t, err)
assert.Equal(t, "template: notificationTemplate:1: unexpected \"}\" in operand", err.Error())
}

func TestNotifierRenderWithInvalidData(t *testing.T) {
n := Notifier{
Template: "name: {{.name}}",
}

data := types.JsonText(`{"active": true}`)
event := setupTestNotifier(data)

result, err := n.renderTemplate(&event)
expected := []byte("name: <no value>")
fmt.Println("resut, ", string(result))
assert.Equal(t, expected, result)
assert.Nil(t, err)
}

func TestNotifierRenderTemplateWithLogic(t *testing.T) {
@@ -158,14 +190,14 @@ func TestNotifierRenderTemplateWithLogic(t *testing.T) {
data := types.JsonText(`{"active": true, "name": "Go", "number": 12}`)
event := setupTestNotifier(data)

result := n.renderTemplate(&event)
result, _ := n.renderTemplate(&event)
expected := []byte("Active!")
assert.Equal(t, result, expected)

data = types.JsonText(`{"active": false, "name": "Go", "number": 12}`)
event = Event{"signup", data}

result = n.renderTemplate(&event)
result, _ = n.renderTemplate(&event)
expected = []byte("inactive")
assert.Equal(t, result, expected)
}
@@ -177,14 +209,14 @@ func TestNotifierRenderTemplateWithAdvancedLogic(t *testing.T) {
data := types.JsonText(`{"active": true, "name": "Go", "number": 12}`)
event := setupTestNotifier(data)

result := n.renderTemplate(&event)
result, _ := n.renderTemplate(&event)
expected := "Incoming conversion: (Making it rain!) 12"
assert.Equal(t, string(result), expected)

data = types.JsonText(`{"active": true, "name": "Go", "number": 10}`)
event = setupTestNotifier(data)

result = n.renderTemplate(&event)
result, _ = n.renderTemplate(&event)
expected = "Incoming conversion: 10"
assert.Equal(t, string(result), expected)
}

0 comments on commit 1dbbc67

Please sign in to comment.