Skip to content

Commit 8b9890b

Browse files
committed
add unit tests
1 parent a4f2815 commit 8b9890b

File tree

6 files changed

+41
-2
lines changed

6 files changed

+41
-2
lines changed

cmd/function.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package cmd
1818

1919
import (
2020
"context"
21+
"errors"
2122
"fmt"
2223
"go/ast"
2324
"go/doc"
@@ -60,7 +61,7 @@ func (o *funcPrinterOption) runE(cmd *cobra.Command, args []string) (err error)
6061
return
6162
}
6263

63-
if err = tpl.Validate(); err != nil {
64+
if err = errors.Join(err, tpl.Validate(), tpl.ConflictWith(render.FuncMap())); err != nil {
6465
return
6566
}
6667
}

cmd/function_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func TestCreateFunctionCommand(t *testing.T) {
2929
tests := []struct {
3030
name string
3131
args []string
32+
hasErr bool
3233
verify func(t *testing.T, output string)
3334
}{{
3435
name: "normal",
@@ -61,6 +62,13 @@ func TestCreateFunctionCommand(t *testing.T) {
6162
assert.Equal(t, `{{generateJSONString "name"}}
6263
`, output)
6364
},
65+
}, {
66+
name: "verify template functions with error",
67+
args: []string{"func", "--extension-file", "testdata/function-with-conflicts.yaml"},
68+
hasErr: true,
69+
verify: func(t *testing.T, output string) {
70+
assert.Contains(t, output, "conflict with existing function")
71+
},
6472
}}
6573
for _, tt := range tests {
6674
t.Run(tt.name, func(t *testing.T) {
@@ -69,10 +77,15 @@ func TestCreateFunctionCommand(t *testing.T) {
6977

7078
buf := new(bytes.Buffer)
7179
c.SetOut(buf)
80+
c.SetErr(buf)
7281
c.SetArgs(tt.args)
7382

7483
err := c.Execute()
75-
assert.NoError(t, err)
84+
if tt.hasErr {
85+
assert.Error(t, err)
86+
} else {
87+
assert.NoError(t, err)
88+
}
7689

7790
if tt.verify != nil {
7891
tt.verify(t, buf.String())
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
items:
2+
- name: randEnum
3+
render: |
4+
{{ randInt 18 60 }}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
items:
2+
- name: randEnum
3+
render: |
4+
{{ randInt 18 60 }}

pkg/render/user_defined.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package render
1818
import (
1919
"errors"
2020
"os"
21+
"text/template"
2122

2223
"gopkg.in/yaml.v3"
2324
)
@@ -39,6 +40,16 @@ func (t *UserDefinedTemplates) Validate() (err error) {
3940
return
4041
}
4142

43+
func (t *UserDefinedTemplates) ConflictWith(funcMap template.FuncMap) (conflict error) {
44+
for _, item := range t.Items {
45+
if _, ok := funcMap[item.Name]; ok {
46+
conflict = errors.New("conflict with existing function: " + item.Name)
47+
break
48+
}
49+
}
50+
return
51+
}
52+
4253
func ParseUserDefinedTemplates(data []byte) (templates *UserDefinedTemplates, err error) {
4354
templates = &UserDefinedTemplates{}
4455
err = yaml.Unmarshal(data, templates)

pkg/render/user_defined_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,10 @@ func TestUserDefinedTemplates(t *testing.T) {
2828
assert.NotNil(t, tpl)
2929
err = tpl.Validate()
3030
assert.NoError(t, err)
31+
assert.NoError(t, tpl.ConflictWith(render.FuncMap()))
32+
33+
tpl, err = render.ParseUserDefinedTemplatesFromFile("testdata/function-with-conflicts.yaml")
34+
assert.NoError(t, err)
35+
assert.NoError(t, tpl.Validate())
36+
assert.Error(t, tpl.ConflictWith(render.FuncMap()))
3137
}

0 commit comments

Comments
 (0)