1 package ast
2
3 import (
4 "testing"
5
6 "github.com/stretchr/testify/require"
7 )
8
9 func TestArg2Map(t *testing.T) {
10 defs := ArgumentDefinitionList{
11 {Name: "A", Type: NamedType("String", nil), DefaultValue: &Value{Kind: StringValue, Raw: "defaultA"}},
12 {Name: "B", Type: NamedType("String", nil)},
13 }
14
15 t.Run("defaults", func(t *testing.T) {
16 args := arg2map(defs, ArgumentList{}, nil)
17 require.Equal(t, "defaultA", args["A"])
18 require.NotContains(t, args, "B")
19 })
20
21 t.Run("values", func(t *testing.T) {
22 args := arg2map(defs, ArgumentList{
23 {Name: "A", Value: &Value{Kind: StringValue, Raw: "valA"}},
24 {Name: "B", Value: &Value{Kind: StringValue, Raw: "valB"}},
25 }, nil)
26 require.Equal(t, "valA", args["A"])
27 require.Equal(t, "valB", args["B"])
28 })
29
30 t.Run("nulls", func(t *testing.T) {
31 args := arg2map(defs, ArgumentList{
32 {Name: "A", Value: &Value{Kind: NullValue}},
33 {Name: "B", Value: &Value{Kind: NullValue}},
34 }, nil)
35 require.Equal(t, nil, args["A"])
36 require.Equal(t, nil, args["B"])
37 require.Contains(t, args, "A")
38 require.Contains(t, args, "B")
39 })
40
41 t.Run("undefined variables", func(t *testing.T) {
42 args := arg2map(defs, ArgumentList{
43 {Name: "A", Value: &Value{Kind: Variable, Raw: "VarA"}},
44 {Name: "B", Value: &Value{Kind: Variable, Raw: "VarB"}},
45 }, map[string]interface{}{})
46 require.Equal(t, "defaultA", args["A"])
47 require.NotContains(t, args, "B")
48 })
49
50 t.Run("nil variables", func(t *testing.T) {
51 args := arg2map(defs, ArgumentList{
52 {Name: "A", Value: &Value{Kind: Variable, Raw: "VarA"}},
53 {Name: "B", Value: &Value{Kind: Variable, Raw: "VarB"}},
54 }, map[string]interface{}{
55 "VarA": nil,
56 "VarB": nil,
57 })
58 require.Equal(t, nil, args["A"])
59 require.Equal(t, nil, args["B"])
60 require.Contains(t, args, "A")
61 require.Contains(t, args, "B")
62 })
63
64 t.Run("defined variables", func(t *testing.T) {
65 args := arg2map(defs, ArgumentList{
66 {Name: "A", Value: &Value{Kind: Variable, Raw: "VarA"}},
67 {Name: "B", Value: &Value{Kind: Variable, Raw: "VarB"}},
68 }, map[string]interface{}{
69 "VarA": "varvalA",
70 "VarB": "varvalB",
71 })
72 require.Equal(t, "varvalA", args["A"])
73 require.Equal(t, "varvalB", args["B"])
74 })
75 }
76
View as plain text