Skip to content

Commit 2935546

Browse files
s-interrubenhoenle
authored andcommitted
refactor(secrets-manager): refactor flag requirements to use cobra built-in validtion
1 parent c2b2f81 commit 2935546

File tree

2 files changed

+28
-73
lines changed

2 files changed

+28
-73
lines changed

internal/cmd/secrets-manager/instance/update/update.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ func configureFlags(cmd *cobra.Command) {
112112

113113
cmd.MarkFlagsRequiredTogether(kmsKeyIdFlag, kmsKeyringIdFlag, kmsKeyVersionFlag, kmsServiceAccountEmailFlag)
114114
cmd.MarkFlagsMutuallyExclusive(aclFlag, kmsKeyIdFlag)
115+
cmd.MarkFlagsOneRequired(aclFlag, kmsKeyIdFlag)
115116
}
116117

117118
func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inputModel, error) {
@@ -123,11 +124,6 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu
123124
}
124125

125126
acls := flags.FlagToStringSlicePointer(p, cmd, aclFlag)
126-
kmsKeyId := flags.FlagToStringPointer(p, cmd, kmsKeyIdFlag)
127-
128-
if acls == nil && kmsKeyId == nil {
129-
return nil, &cliErr.EmptyUpdateError{}
130-
}
131127

132128
model := inputModel{
133129
GlobalFlagModel: globalFlags,

internal/cmd/secrets-manager/instance/update/update_test.go

Lines changed: 27 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@ import (
44
"context"
55
"testing"
66

7-
"github.com/stackitcloud/stackit-cli/internal/pkg/types"
8-
97
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
10-
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
8+
"github.com/stackitcloud/stackit-cli/internal/pkg/testutils"
119
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
1210

1311
"github.com/google/go-cmp/cmp"
@@ -111,13 +109,7 @@ func TestParseInput(t *testing.T) {
111109
isValid: false,
112110
},
113111
{
114-
description: "no flag values",
115-
argValues: fixtureArgValues(),
116-
flagValues: map[string]string{},
117-
isValid: false,
118-
},
119-
{
120-
description: "required flags only (no values to update)",
112+
description: "no update flags",
121113
argValues: fixtureArgValues(),
122114
flagValues: map[string]string{
123115
projectIdFlag: testProjectId,
@@ -172,6 +164,28 @@ func TestParseInput(t *testing.T) {
172164
flagValues: fixtureFlagValues(),
173165
isValid: false,
174166
},
167+
{
168+
description: "kms key id without other required kms flags",
169+
argValues: fixtureArgValues(),
170+
flagValues: map[string]string{
171+
projectIdFlag: testProjectId,
172+
kmsKeyIdFlag: "key-id",
173+
},
174+
isValid: false,
175+
},
176+
{
177+
description: "acl flag conflicts with kms flags",
178+
argValues: fixtureArgValues(),
179+
flagValues: map[string]string{
180+
projectIdFlag: testProjectId,
181+
aclFlag: testACL1,
182+
kmsKeyIdFlag: "key-id",
183+
kmsKeyringIdFlag: "keyring-id",
184+
kmsKeyVersionFlag: "1",
185+
kmsServiceAccountEmailFlag: "svc@example.com",
186+
},
187+
isValid: false,
188+
},
175189
{
176190
description: "repeated acl flags",
177191
argValues: fixtureArgValues(),
@@ -199,64 +213,9 @@ func TestParseInput(t *testing.T) {
199213

200214
for _, tt := range tests {
201215
t.Run(tt.description, func(t *testing.T) {
202-
p := print.NewPrinter()
203-
cmd := NewCmd(&types.CmdParams{Printer: p})
204-
err := globalflags.Configure(cmd.Flags())
205-
if err != nil {
206-
t.Fatalf("configure global flags: %v", err)
207-
}
208-
209-
for flag, value := range tt.flagValues {
210-
err := cmd.Flags().Set(flag, value)
211-
if err != nil {
212-
if !tt.isValid {
213-
return
214-
}
215-
t.Fatalf("setting flag --%s=%s: %v", flag, value, err)
216-
}
217-
}
218-
219-
for _, value := range tt.aclValues {
220-
err := cmd.Flags().Set(aclFlag, value)
221-
if err != nil {
222-
if !tt.isValid {
223-
return
224-
}
225-
t.Fatalf("setting flag --%s=%s: %v", aclFlag, value, err)
226-
}
227-
}
228-
229-
err = cmd.ValidateArgs(tt.argValues)
230-
if err != nil {
231-
if !tt.isValid {
232-
return
233-
}
234-
t.Fatalf("error validating args: %v", err)
235-
}
236-
237-
err = cmd.ValidateRequiredFlags()
238-
if err != nil {
239-
if !tt.isValid {
240-
return
241-
}
242-
t.Fatalf("error validating flags: %v", err)
243-
}
244-
245-
model, err := parseInput(p, cmd, tt.argValues)
246-
if err != nil {
247-
if !tt.isValid {
248-
return
249-
}
250-
t.Fatalf("error parsing flags: %v", err)
251-
}
252-
253-
if !tt.isValid {
254-
t.Fatalf("did not fail on invalid input")
255-
}
256-
diff := cmp.Diff(model, tt.expectedModel)
257-
if diff != "" {
258-
t.Fatalf("Data does not match: %s", diff)
259-
}
216+
testutils.TestParseInputWithAdditionalFlags(t, NewCmd, parseInput, tt.expectedModel, tt.argValues, tt.flagValues, map[string][]string{
217+
aclFlag: tt.aclValues,
218+
}, tt.isValid)
260219
})
261220
}
262221
}

0 commit comments

Comments
 (0)