@@ -19,10 +19,20 @@ type testCtxKey struct{}
1919var testCtx = context .WithValue (context .Background (), testCtxKey {}, "foo" )
2020var testClient = & resourcemanager.APIClient {}
2121var testProjectId = uuid .NewString ()
22+ var testProjectId2 = uuid .NewString ()
23+
24+ func fixtureArgValues (mods ... func (argValues []string )) []string {
25+ argValues := []string {
26+ testProjectId ,
27+ }
28+ for _ , mod := range mods {
29+ mod (argValues )
30+ }
31+ return argValues
32+ }
2233
2334func fixtureFlagValues (mods ... func (flagValues map [string ]string )) map [string ]string {
2435 flagValues := map [string ]string {
25- projectIdFlag : testProjectId ,
2636 includeParentsFlag : "false" ,
2737 }
2838 for _ , mod := range mods {
@@ -34,9 +44,10 @@ func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]st
3444func fixtureInputModel (mods ... func (model * inputModel )) * inputModel {
3545 model := & inputModel {
3646 GlobalFlagModel : & globalflags.GlobalFlagModel {
37- ProjectId : testProjectId ,
47+ ProjectId : "" ,
3848 },
3949 IncludeParents : false ,
50+ ArgProjectId : testProjectId ,
4051 }
4152 for _ , mod := range mods {
4253 mod (model )
@@ -55,24 +66,50 @@ func fixtureRequest(mods ...func(request *resourcemanager.ApiGetProjectRequest))
5566func TestParseInput (t * testing.T ) {
5667 tests := []struct {
5768 description string
69+ argValues []string
5870 flagValues map [string ]string
5971 labelValues []string
6072 isValid bool
6173 expectedModel * inputModel
6274 }{
6375 {
6476 description : "base" ,
77+ argValues : fixtureArgValues (),
6578 flagValues : fixtureFlagValues (),
6679 isValid : true ,
6780 expectedModel : fixtureInputModel (),
6881 },
6982 {
7083 description : "no values" ,
84+ argValues : []string {},
7185 flagValues : map [string ]string {},
7286 isValid : false ,
7387 },
88+ {
89+ description : "project id arg takes precedence" ,
90+ argValues : fixtureArgValues (),
91+ flagValues : fixtureFlagValues (func (flagValues map [string ]string ) {
92+ flagValues [projectIdFlag ] = testProjectId2
93+ }),
94+ isValid : true ,
95+ expectedModel : fixtureInputModel (func (model * inputModel ) {
96+ model .ProjectId = testProjectId2
97+ }),
98+ },
99+ {
100+ description : "project id arg missing" ,
101+ argValues : []string {},
102+ flagValues : fixtureFlagValues (func (flagValues map [string ]string ) {
103+ flagValues [projectIdFlag ] = testProjectId
104+ }),
105+ isValid : true ,
106+ expectedModel : fixtureInputModel (func (model * inputModel ) {
107+ model .ProjectId = testProjectId
108+ }),
109+ },
74110 {
75111 description : "project id missing" ,
112+ argValues : []string {},
76113 flagValues : fixtureFlagValues (func (flagValues map [string ]string ) {
77114 delete (flagValues , projectIdFlag )
78115 }),
@@ -112,6 +149,14 @@ func TestParseInput(t *testing.T) {
112149 }
113150 }
114151
152+ err = cmd .ValidateArgs (tt .argValues )
153+ if err != nil {
154+ if ! tt .isValid {
155+ return
156+ }
157+ t .Fatalf ("error validating args: %v" , err )
158+ }
159+
115160 err = cmd .ValidateRequiredFlags ()
116161 if err != nil {
117162 if ! tt .isValid {
@@ -120,7 +165,7 @@ func TestParseInput(t *testing.T) {
120165 t .Fatalf ("error validating flags: %v" , err )
121166 }
122167
123- model , err := parseInput (cmd )
168+ model , err := parseInput (cmd , tt . argValues )
124169 if err != nil {
125170 if ! tt .isValid {
126171 return
0 commit comments