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  })