github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/fly/commands/internal/flaghelpers/resource_flag_test.go (about)

     1  package flaghelpers_test
     2  
     3  import (
     4  	"github.com/pf-qiu/concourse/v6/atc"
     5  	. "github.com/pf-qiu/concourse/v6/fly/commands/internal/flaghelpers"
     6  
     7  	. "github.com/onsi/ginkgo"
     8  	. "github.com/onsi/gomega"
     9  )
    10  
    11  var _ = Describe("ResourceFlag", func() {
    12  	var flag *ResourceFlag
    13  
    14  	BeforeEach(func() {
    15  		flag = &ResourceFlag{}
    16  	})
    17  
    18  	for _, tt := range []struct {
    19  		desc         string
    20  		flag         string
    21  		pipelineRef  atc.PipelineRef
    22  		resourceName string
    23  		err          string
    24  	}{
    25  		{
    26  			desc:         "basic",
    27  			flag:         "some-pipeline/some-resource",
    28  			pipelineRef:  atc.PipelineRef{Name: "some-pipeline"},
    29  			resourceName: "some-resource",
    30  		},
    31  		{
    32  			desc: "instance vars",
    33  			flag: "some-pipeline/branch:master,foo.bar:baz/some-resource",
    34  			pipelineRef: atc.PipelineRef{
    35  				Name:         "some-pipeline",
    36  				InstanceVars: atc.InstanceVars{"branch": "master", "foo": map[string]interface{}{"bar": "baz"}},
    37  			},
    38  			resourceName: "some-resource",
    39  		},
    40  		{
    41  			desc: "instance var with a '/'",
    42  			flag: "some-pipeline/branch:feature/do_things,foo:bar/some-resource",
    43  			pipelineRef: atc.PipelineRef{
    44  				Name:         "some-pipeline",
    45  				InstanceVars: atc.InstanceVars{"branch": "feature/do_things", "foo": "bar"},
    46  			},
    47  			resourceName: "some-resource",
    48  		},
    49  		{
    50  			desc: "instance var with special chars",
    51  			flag: `some-pipeline/foo."bar.baz":'abc,def:ghi'/some-resource`,
    52  			pipelineRef: atc.PipelineRef{
    53  				Name: "some-pipeline",
    54  				InstanceVars: atc.InstanceVars{
    55  					"foo": map[string]interface{}{
    56  						"bar.baz": "abc,def:ghi",
    57  					},
    58  				},
    59  			},
    60  			resourceName: "some-resource",
    61  		},
    62  		{
    63  			desc: "only pipeline specified",
    64  			flag: "some-pipeline",
    65  			err:  "argument format should be <pipeline>/<resource>",
    66  		},
    67  		{
    68  			desc: "resource name not specified",
    69  			flag: "some-pipeline/",
    70  			err:  "argument format should be <pipeline>/<resource>",
    71  		},
    72  		{
    73  			desc: "malformed instance var",
    74  			flag: "some-pipeline/branch=master/some-resource",
    75  			err:  "argument format should be <pipeline>/<key:value>/<resource>",
    76  		},
    77  	} {
    78  		tt := tt
    79  		It(tt.desc, func() {
    80  			err := flag.UnmarshalFlag(tt.flag)
    81  			if tt.err == "" {
    82  				Expect(err).ToNot(HaveOccurred())
    83  				Expect(flag.PipelineRef).To(Equal(tt.pipelineRef))
    84  				Expect(flag.ResourceName).To(Equal(tt.resourceName))
    85  			} else {
    86  				Expect(err).To(MatchError(tt.err))
    87  			}
    88  		})
    89  	}
    90  })