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