github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/fly/commands/internal/flaghelpers/yaml_variable_pair_flag_test.go (about) 1 package flaghelpers_test 2 3 import ( 4 "encoding/json" 5 6 "github.com/pf-qiu/concourse/v6/vars" 7 . "github.com/onsi/ginkgo" 8 . "github.com/onsi/gomega" 9 10 "github.com/pf-qiu/concourse/v6/fly/commands/internal/flaghelpers" 11 ) 12 13 var _ = Describe("YAMLVariablePair", func() { 14 Describe("UnmarshalFlag", func() { 15 var variable *flaghelpers.YAMLVariablePairFlag 16 17 BeforeEach(func() { 18 variable = &flaghelpers.YAMLVariablePairFlag{} 19 }) 20 21 for _, tt := range []struct { 22 desc string 23 flag string 24 ref vars.Reference 25 val interface{} 26 err string 27 }{ 28 { 29 desc: "basic", 30 flag: "key=value", 31 ref: vars.Reference{Path: "key", Fields: []string{}}, 32 val: "value", 33 }, 34 { 35 desc: "unmarshals arbitrary yaml", 36 flag: `key={hello:world: [a, b, c]}`, 37 ref: vars.Reference{Path: `key`, Fields: []string{}}, 38 val: map[string]interface{}{"hello:world": []interface{}{"a", "b", "c"}}, 39 }, 40 { 41 desc: "unmarshals numbers as json.Number", 42 flag: `key={int: 1, float: 1.23}`, 43 ref: vars.Reference{Path: `key`, Fields: []string{}}, 44 val: map[string]interface{}{"int": json.Number("1"), "float": json.Number("1.23")}, 45 }, 46 { 47 desc: "errors if yaml is malformed", 48 flag: `key={a: b`, 49 err: `error converting YAML to JSON: yaml: line 1: did not find expected ',' or '}'`, 50 }, 51 } { 52 tt := tt 53 It(tt.desc, func() { 54 err := variable.UnmarshalFlag(tt.flag) 55 if tt.err == "" { 56 Expect(err).ToNot(HaveOccurred()) 57 Expect(variable.Ref).To(Equal(tt.ref)) 58 Expect(variable.Value).To(Equal(tt.val)) 59 } else { 60 Expect(err).To(MatchError(tt.err)) 61 } 62 }) 63 } 64 }) 65 })