-
Notifications
You must be signed in to change notification settings - Fork 11
/
helpers_test.go
100 lines (85 loc) · 2.37 KB
/
helpers_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package velvet_test
import (
"fmt"
"html/template"
"strings"
"testing"
"github.com/gobuffalo/velvet"
"github.com/stretchr/testify/require"
)
func Test_CustomGlobalHelper(t *testing.T) {
r := require.New(t)
err := velvet.Helpers.Add("say", func(name string) (string, error) {
return fmt.Sprintf("say: %s", name), nil
})
r.NoError(err)
input := `{{say "mark"}}`
ctx := velvet.NewContext()
s, err := velvet.Render(input, ctx)
r.NoError(err)
r.Equal("say: mark", s)
}
func Test_CustomGlobalBlockHelper(t *testing.T) {
r := require.New(t)
velvet.Helpers.Add("say", func(name string, help velvet.HelperContext) (template.HTML, error) {
ctx := help.Context
ctx.Set("name", strings.ToUpper(name))
s, err := help.BlockWith(ctx)
return template.HTML(s), err
})
input := `
{{#say "mark"}}
<h1>{{name}}</h1>
{{/say}}
`
ctx := velvet.NewContext()
s, err := velvet.Render(input, ctx)
r.NoError(err)
r.Contains(s, "<h1>MARK</h1>")
}
func Test_Helper_Hash_Options(t *testing.T) {
r := require.New(t)
velvet.Helpers.Add("say", func(help velvet.HelperContext) string {
return help.Context.Get("name").(string)
})
input := `{{say name="mark"}}`
ctx := velvet.NewContext()
s, err := velvet.Render(input, ctx)
r.NoError(err)
r.Equal("mark", s)
}
func Test_Helper_Hash_Options_Many(t *testing.T) {
r := require.New(t)
velvet.Helpers.Add("say", func(help velvet.HelperContext) string {
return help.Context.Get("first").(string) + help.Context.Get("last").(string)
})
input := `{{say first=first_name last=last_name}}`
ctx := velvet.NewContext()
ctx.Set("first_name", "Mark")
ctx.Set("last_name", "Bates")
s, err := velvet.Render(input, ctx)
r.NoError(err)
r.Equal("MarkBates", s)
}
func Test_Helper_Santize_Output(t *testing.T) {
r := require.New(t)
velvet.Helpers.Add("safe", func(help velvet.HelperContext) template.HTML {
return template.HTML("<p>safe</p>")
})
velvet.Helpers.Add("unsafe", func(help velvet.HelperContext) string {
return "<b>unsafe</b>"
})
input := `{{safe}}|{{unsafe}}`
s, err := velvet.Render(input, velvet.NewContext())
r.NoError(err)
r.Equal("<p>safe</p>|<b>unsafe</b>", s)
}
func Test_JSON_Helper(t *testing.T) {
r := require.New(t)
input := `{{json names}}`
ctx := velvet.NewContext()
ctx.Set("names", []string{"mark", "bates"})
s, err := velvet.Render(input, ctx)
r.NoError(err)
r.Equal(`["mark","bates"]`, s)
}