Skip to content

Commit 4725975

Browse files
authored
refactor: centralize logic for parseInput tests (#1033)
1 parent 2e98c40 commit 4725975

File tree

480 files changed

+1480
-14225
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

480 files changed

+1480
-14225
lines changed

internal/cmd/affinity-groups/create/create.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ func NewCmd(params *params.CmdParams) *cobra.Command {
4040
"$ stackit affinity-group create --name AFFINITY_GROUP_NAME --policy soft-affinity",
4141
),
4242
),
43-
RunE: func(cmd *cobra.Command, _ []string) error {
43+
RunE: func(cmd *cobra.Command, args []string) error {
4444
ctx := context.Background()
45-
model, err := parseInput(params.Printer, cmd)
45+
model, err := parseInput(params.Printer, cmd, args)
4646
if err != nil {
4747
return err
4848
}
@@ -98,7 +98,7 @@ func buildRequest(ctx context.Context, model inputModel, apiClient *iaas.APIClie
9898
return req
9999
}
100100

101-
func parseInput(p *print.Printer, cmd *cobra.Command) (*inputModel, error) {
101+
func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) {
102102
globalFlags := globalflags.Parse(p, cmd)
103103
if globalFlags.ProjectId == "" {
104104
return nil, &errors.ProjectIdError{}

internal/cmd/affinity-groups/create/create_test.go

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/stackitcloud/stackit-cli/internal/cmd/params"
1111
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
1212
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
13+
"github.com/stackitcloud/stackit-cli/internal/pkg/testutils"
1314
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
1415
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
1516
)
@@ -80,6 +81,7 @@ func fixturePayload(mods ...func(payload *iaas.CreateAffinityGroupPayload)) iaas
8081
func TestParseInput(t *testing.T) {
8182
tests := []struct {
8283
description string
84+
argValues []string
8385
flagValues map[string]string
8486
isValid bool
8587
expectedModel *inputModel
@@ -120,43 +122,7 @@ func TestParseInput(t *testing.T) {
120122
}
121123
for _, tt := range tests {
122124
t.Run(tt.description, func(t *testing.T) {
123-
p := print.NewPrinter()
124-
cmd := NewCmd(&params.CmdParams{Printer: p})
125-
if err := globalflags.Configure(cmd.Flags()); err != nil {
126-
t.Fatalf("configure global flags: %v", err)
127-
}
128-
129-
for flag, value := range tt.flagValues {
130-
if err := cmd.Flags().Set(flag, value); err != nil {
131-
if !tt.isValid {
132-
return
133-
}
134-
t.Fatalf("setting flag --%s=%s: %v", flag, value, err)
135-
}
136-
}
137-
138-
if err := cmd.ValidateRequiredFlags(); err != nil {
139-
if !tt.isValid {
140-
return
141-
}
142-
t.Fatalf("error validating flags: %v", err)
143-
}
144-
145-
model, err := parseInput(p, cmd)
146-
if err != nil {
147-
if !tt.isValid {
148-
return
149-
}
150-
t.Fatalf("error parsing flags: %v", err)
151-
}
152-
153-
if !tt.isValid {
154-
t.Fatalf("did not fail on invalid input")
155-
}
156-
diff := cmp.Diff(model, tt.expectedModel)
157-
if diff != "" {
158-
t.Fatalf("Data does not match: %s", diff)
159-
}
125+
testutils.TestParseInput(t, NewCmd, parseInput, tt.expectedModel, tt.argValues, tt.flagValues, tt.isValid)
160126
})
161127
}
162128
}

internal/cmd/affinity-groups/list/list.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ func NewCmd(params *params.CmdParams) *cobra.Command {
4242
"$ stackit affinity-group list --limit=10",
4343
),
4444
),
45-
RunE: func(cmd *cobra.Command, _ []string) error {
45+
RunE: func(cmd *cobra.Command, args []string) error {
4646
ctx := context.Background()
47-
model, err := parseInput(params.Printer, cmd)
47+
model, err := parseInput(params.Printer, cmd, args)
4848
if err != nil {
4949
return err
5050
}
@@ -85,7 +85,7 @@ func buildRequest(ctx context.Context, model inputModel, apiClient *iaas.APIClie
8585
return apiClient.ListAffinityGroups(ctx, model.ProjectId)
8686
}
8787

88-
func parseInput(p *print.Printer, cmd *cobra.Command) (*inputModel, error) {
88+
func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) {
8989
globalFlags := globalflags.Parse(p, cmd)
9090
if globalFlags.ProjectId == "" {
9191
return nil, &errors.ProjectIdError{}

internal/cmd/affinity-groups/list/list_test.go

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/stackitcloud/stackit-cli/internal/cmd/params"
1212
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
1313
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
14+
"github.com/stackitcloud/stackit-cli/internal/pkg/testutils"
1415
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
1516
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
1617
)
@@ -63,6 +64,7 @@ func fixtureRequest(mods ...func(request *iaas.ApiListAffinityGroupsRequest)) ia
6364
func TestParseInput(t *testing.T) {
6465
tests := []struct {
6566
description string
67+
argValues []string
6668
flagValues map[string]string
6769
isValid bool
6870
expectedModel *inputModel
@@ -105,43 +107,7 @@ func TestParseInput(t *testing.T) {
105107
}
106108
for _, tt := range tests {
107109
t.Run(tt.description, func(t *testing.T) {
108-
p := print.NewPrinter()
109-
cmd := NewCmd(&params.CmdParams{Printer: p})
110-
if err := globalflags.Configure(cmd.Flags()); err != nil {
111-
t.Fatalf("configure global flags: %v", err)
112-
}
113-
114-
for flag, value := range tt.flagValues {
115-
if err := cmd.Flags().Set(flag, value); err != nil {
116-
if !tt.isValid {
117-
return
118-
}
119-
t.Fatalf("setting flag --%s=%s: %v", flag, value, err)
120-
}
121-
}
122-
123-
if err := cmd.ValidateRequiredFlags(); err != nil {
124-
if !tt.isValid {
125-
return
126-
}
127-
t.Fatalf("error validating flags: %v", err)
128-
}
129-
130-
model, err := parseInput(p, cmd)
131-
if err != nil {
132-
if !tt.isValid {
133-
return
134-
}
135-
t.Fatalf("error parsing flags: %v", err)
136-
}
137-
138-
if !tt.isValid {
139-
t.Fatalf("did not fail on invalid input")
140-
}
141-
diff := cmp.Diff(model, tt.expectedModel)
142-
if diff != "" {
143-
t.Fatalf("Data does not match: %s", diff)
144-
}
110+
testutils.TestParseInput(t, NewCmd, parseInput, tt.expectedModel, tt.argValues, tt.flagValues, tt.isValid)
145111
})
146112
}
147113
}

internal/cmd/auth/activate-service-account/activate_service_account.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,11 @@ func NewCmd(params *params.CmdParams) *cobra.Command {
5858
"$ stackit auth activate-service-account --service-account-token my-service-account-token --only-print-access-token",
5959
),
6060
),
61-
RunE: func(cmd *cobra.Command, _ []string) error {
62-
model := parseInput(params.Printer, cmd)
61+
RunE: func(cmd *cobra.Command, args []string) error {
62+
model, err := parseInput(params.Printer, cmd, args)
63+
if err != nil {
64+
return err
65+
}
6366

6467
tokenCustomEndpoint := viper.GetString(config.TokenCustomEndpointKey)
6568
if !model.OnlyPrintAccessToken {
@@ -113,7 +116,7 @@ func configureFlags(cmd *cobra.Command) {
113116
cmd.Flags().Bool(onlyPrintAccessTokenFlag, false, "If this is set to true the credentials are not stored in either the keyring or a file")
114117
}
115118

116-
func parseInput(p *print.Printer, cmd *cobra.Command) *inputModel {
119+
func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) {
117120
model := inputModel{
118121
ServiceAccountToken: flags.FlagToStringValue(p, cmd, serviceAccountTokenFlag),
119122
ServiceAccountKeyPath: flags.FlagToStringValue(p, cmd, serviceAccountKeyPathFlag),
@@ -122,7 +125,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command) *inputModel {
122125
}
123126

124127
p.DebugInputModel(model)
125-
return &model
128+
return &model, nil
126129
}
127130

128131
func storeCustomEndpoint(tokenCustomEndpoint string) error {

internal/cmd/auth/activate-service-account/activate_service_account_test.go

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,12 @@ package activateserviceaccount
33
import (
44
"testing"
55

6+
"github.com/stackitcloud/stackit-cli/internal/pkg/testutils"
7+
68
"github.com/spf13/viper"
7-
"github.com/stackitcloud/stackit-cli/internal/cmd/params"
89
"github.com/stackitcloud/stackit-cli/internal/pkg/auth"
910
"github.com/stackitcloud/stackit-cli/internal/pkg/config"
10-
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
11-
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
1211
"github.com/zalando/go-keyring"
13-
14-
"github.com/google/go-cmp/cmp"
1512
)
1613

1714
var testTokenCustomEndpoint = "token_url"
@@ -45,6 +42,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
4542
func TestParseInput(t *testing.T) {
4643
tests := []struct {
4744
description string
45+
argValues []string
4846
flagValues map[string]string
4947
tokenCustomEndpoint string
5048
isValid bool
@@ -106,32 +104,7 @@ func TestParseInput(t *testing.T) {
106104

107105
for _, tt := range tests {
108106
t.Run(tt.description, func(t *testing.T) {
109-
p := print.NewPrinter()
110-
cmd := NewCmd(&params.CmdParams{Printer: p})
111-
err := globalflags.Configure(cmd.Flags())
112-
if err != nil {
113-
t.Fatalf("configure global flags: %v", err)
114-
}
115-
116-
for flag, value := range tt.flagValues {
117-
err := cmd.Flags().Set(flag, value)
118-
if err != nil {
119-
if !tt.isValid {
120-
return
121-
}
122-
t.Fatalf("setting flag --%s=%s: %v", flag, value, err)
123-
}
124-
}
125-
126-
model := parseInput(p, cmd)
127-
128-
if !tt.isValid {
129-
t.Fatalf("did not fail on invalid input")
130-
}
131-
diff := cmp.Diff(model, tt.expectedModel)
132-
if diff != "" {
133-
t.Fatalf("Data does not match: %s", diff)
134-
}
107+
testutils.TestParseInput(t, NewCmd, parseInput, tt.expectedModel, tt.argValues, tt.flagValues, tt.isValid)
135108
})
136109
}
137110
}

internal/cmd/auth/get-access-token/get_access_token.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ func NewCmd(params *params.CmdParams) *cobra.Command {
2929
`Print a short-lived access token`,
3030
"$ stackit auth get-access-token"),
3131
),
32-
RunE: func(cmd *cobra.Command, _ []string) error {
33-
model, err := parseInput(params.Printer, cmd)
32+
RunE: func(cmd *cobra.Command, args []string) error {
33+
model, err := parseInput(params.Printer, cmd, args)
3434
if err != nil {
3535
return err
3636
}
@@ -70,7 +70,7 @@ func NewCmd(params *params.CmdParams) *cobra.Command {
7070
return cmd
7171
}
7272

73-
func parseInput(p *print.Printer, cmd *cobra.Command) (*inputModel, error) {
73+
func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) {
7474
globalFlags := globalflags.Parse(p, cmd)
7575

7676
model := inputModel{

internal/cmd/beta/alb/create/create.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ func NewCmd(params *params.CmdParams) *cobra.Command {
4646
`Create an application loadbalancer from a configuration file`,
4747
"$ stackit beta alb create --configuration my-loadbalancer.json"),
4848
),
49-
RunE: func(cmd *cobra.Command, _ []string) error {
49+
RunE: func(cmd *cobra.Command, args []string) error {
5050
ctx := context.Background()
51-
model, err := parseInput(params.Printer, cmd)
51+
model, err := parseInput(params.Printer, cmd, args)
5252
if err != nil {
5353
return err
5454
}
@@ -107,7 +107,7 @@ func configureFlags(cmd *cobra.Command) {
107107
cobra.CheckErr(err)
108108
}
109109

110-
func parseInput(p *print.Printer, cmd *cobra.Command) (*inputModel, error) {
110+
func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) {
111111
globalFlags := globalflags.Parse(p, cmd)
112112
if globalFlags.ProjectId == "" {
113113
return nil, &errors.ProjectIdError{}

internal/cmd/beta/alb/create/create_test.go

Lines changed: 3 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/stackitcloud/stackit-cli/internal/cmd/params"
1414
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
1515
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
16+
"github.com/stackitcloud/stackit-cli/internal/pkg/testutils"
1617
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
1718
"github.com/stackitcloud/stackit-sdk-go/services/alb"
1819
)
@@ -79,6 +80,7 @@ func fixtureRequest(mods ...func(request *alb.ApiCreateLoadBalancerRequest)) alb
7980
func TestParseInput(t *testing.T) {
8081
tests := []struct {
8182
description string
83+
argValues []string
8284
flagValues map[string]string
8385
isValid bool
8486
expectedModel *inputModel
@@ -134,46 +136,7 @@ func TestParseInput(t *testing.T) {
134136

135137
for _, tt := range tests {
136138
t.Run(tt.description, func(t *testing.T) {
137-
p := print.NewPrinter()
138-
cmd := NewCmd(&params.CmdParams{Printer: p})
139-
err := globalflags.Configure(cmd.Flags())
140-
if err != nil {
141-
t.Fatalf("configure global flags: %v", err)
142-
}
143-
144-
for flag, value := range tt.flagValues {
145-
err := cmd.Flags().Set(flag, value)
146-
if err != nil {
147-
if !tt.isValid {
148-
return
149-
}
150-
t.Fatalf("setting flag --%s=%s: %v", flag, value, err)
151-
}
152-
}
153-
154-
err = cmd.ValidateRequiredFlags()
155-
if err != nil {
156-
if !tt.isValid {
157-
return
158-
}
159-
t.Fatalf("error validating flags: %v", err)
160-
}
161-
162-
model, err := parseInput(p, cmd)
163-
if err != nil {
164-
if !tt.isValid {
165-
return
166-
}
167-
t.Fatalf("error parsing flags: %v", err)
168-
}
169-
170-
if !tt.isValid {
171-
t.Fatalf("did not fail on invalid input")
172-
}
173-
diff := cmp.Diff(model, tt.expectedModel)
174-
if diff != "" {
175-
t.Fatalf("Data does not match: %s", diff)
176-
}
139+
testutils.TestParseInput(t, NewCmd, parseInput, tt.expectedModel, tt.argValues, tt.flagValues, tt.isValid)
177140
})
178141
}
179142
}

0 commit comments

Comments
 (0)