diff --git a/internal/cmd/service-account/create/create.go b/internal/cmd/service-account/create/create.go index 390e5a15b..eedf109aa 100644 --- a/internal/cmd/service-account/create/create.go +++ b/internal/cmd/service-account/create/create.go @@ -74,7 +74,7 @@ func NewCmd(p *print.Printer) *cobra.Command { return fmt.Errorf("create service account: %w", err) } - return outputResult(p, model, projectLabel, resp) + return outputResult(p, model.OutputFormat, projectLabel, resp) }, } configureFlags(cmd) @@ -119,8 +119,12 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *serviceacco return req } -func outputResult(p *print.Printer, model *inputModel, projectLabel string, serviceAccount *serviceaccount.ServiceAccount) error { - switch model.OutputFormat { +func outputResult(p *print.Printer, outputFormat, projectLabel string, serviceAccount *serviceaccount.ServiceAccount) error { + if serviceAccount == nil { + return fmt.Errorf("service account is nil") + } + + switch outputFormat { case print.JSONOutputFormat: details, err := json.MarshalIndent(serviceAccount, "", " ") if err != nil { diff --git a/internal/cmd/service-account/create/create_test.go b/internal/cmd/service-account/create/create_test.go index 5e8584495..d74e9ad3f 100644 --- a/internal/cmd/service-account/create/create_test.go +++ b/internal/cmd/service-account/create/create_test.go @@ -187,3 +187,38 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + projectLabel string + serviceAccount *serviceaccount.ServiceAccount + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: true, + }, + { + name: "empty service account", + args: args{ + serviceAccount: &serviceaccount.ServiceAccount{}, + }, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.projectLabel, tt.args.serviceAccount); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/service-account/get-jwks/get_jwks_test.go b/internal/cmd/service-account/get-jwks/get_jwks_test.go index 6ea2ee487..93b049d14 100644 --- a/internal/cmd/service-account/get-jwks/get_jwks_test.go +++ b/internal/cmd/service-account/get-jwks/get_jwks_test.go @@ -137,3 +137,43 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + serviceAccounts []serviceaccount.JWK + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + { + name: "empty service accounts slice", + args: args{ + serviceAccounts: []serviceaccount.JWK{}, + }, + wantErr: false, + }, + { + name: "empty service account in service accounts slice", + args: args{ + serviceAccounts: []serviceaccount.JWK{{}}, + }, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.serviceAccounts); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/service-account/key/describe/describe.go b/internal/cmd/service-account/key/describe/describe.go index ab7d6c367..61bc9af84 100644 --- a/internal/cmd/service-account/key/describe/describe.go +++ b/internal/cmd/service-account/key/describe/describe.go @@ -115,6 +115,10 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *serviceacco } func outputResult(p *print.Printer, key *serviceaccount.GetServiceAccountKeyResponse) error { + if key == nil { + return fmt.Errorf("key is nil") + } + marshaledKey, err := json.MarshalIndent(key, "", " ") if err != nil { return fmt.Errorf("marshal service account key: %w", err) diff --git a/internal/cmd/service-account/key/describe/describe_test.go b/internal/cmd/service-account/key/describe/describe_test.go index 8323ed679..18cd60082 100644 --- a/internal/cmd/service-account/key/describe/describe_test.go +++ b/internal/cmd/service-account/key/describe/describe_test.go @@ -229,3 +229,36 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + key *serviceaccount.GetServiceAccountKeyResponse + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: true, + }, + { + name: "empty key", + args: args{ + key: &serviceaccount.GetServiceAccountKeyResponse{}, + }, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.key); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/service-account/key/list/list_test.go b/internal/cmd/service-account/key/list/list_test.go index e6ec4b4e4..46933a70c 100644 --- a/internal/cmd/service-account/key/list/list_test.go +++ b/internal/cmd/service-account/key/list/list_test.go @@ -196,3 +196,44 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + keys []serviceaccount.ServiceAccountKeyListResponse + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + { + name: "empty keys slice", + args: args{ + keys: []serviceaccount.ServiceAccountKeyListResponse{}, + }, + wantErr: false, + }, + { + name: "empty key in keys slice", + args: args{ + keys: []serviceaccount.ServiceAccountKeyListResponse{{}}, + }, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.keys); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/service-account/list/list_test.go b/internal/cmd/service-account/list/list_test.go index 92d89b8ce..d212eabc8 100644 --- a/internal/cmd/service-account/list/list_test.go +++ b/internal/cmd/service-account/list/list_test.go @@ -186,3 +186,44 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + serviceAccounts []serviceaccount.ServiceAccount + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + { + name: "empty service accounts slice", + args: args{ + serviceAccounts: []serviceaccount.ServiceAccount{}, + }, + wantErr: false, + }, + { + name: "empty service account in service accounts slice", + args: args{ + serviceAccounts: []serviceaccount.ServiceAccount{{}}, + }, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.serviceAccounts); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/service-account/token/create/create.go b/internal/cmd/service-account/token/create/create.go index 19a52faee..8f96b4002 100644 --- a/internal/cmd/service-account/token/create/create.go +++ b/internal/cmd/service-account/token/create/create.go @@ -78,7 +78,7 @@ func NewCmd(p *print.Printer) *cobra.Command { return fmt.Errorf("create access token: %w", err) } - return outputResult(p, model, token) + return outputResult(p, model.OutputFormat, model.ServiceAccountEmail, token) }, } @@ -142,8 +142,12 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *serviceacco return req } -func outputResult(p *print.Printer, model *inputModel, token *serviceaccount.AccessToken) error { - switch model.OutputFormat { +func outputResult(p *print.Printer, outputFormat, serviceAccountEmail string, token *serviceaccount.AccessToken) error { + if token == nil { + return fmt.Errorf("token is nil") + } + + switch outputFormat { case print.JSONOutputFormat: details, err := json.MarshalIndent(token, "", " ") if err != nil { @@ -161,7 +165,7 @@ func outputResult(p *print.Printer, model *inputModel, token *serviceaccount.Acc return nil default: - p.Outputf("Created access token for service account %s. Token ID: %s\n\n", model.ServiceAccountEmail, utils.PtrString(token.Id)) + p.Outputf("Created access token for service account %s. Token ID: %s\n\n", serviceAccountEmail, utils.PtrString(token.Id)) p.Outputf("Valid until: %s\n", utils.PtrString(token.ValidUntil)) p.Outputf("Token: %s\n", utils.PtrString(token.Token)) return nil diff --git a/internal/cmd/service-account/token/create/create_test.go b/internal/cmd/service-account/token/create/create_test.go index 2cc8b55c9..d5d18e3e9 100644 --- a/internal/cmd/service-account/token/create/create_test.go +++ b/internal/cmd/service-account/token/create/create_test.go @@ -193,3 +193,38 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + serviceAccountEmail string + token *serviceaccount.AccessToken + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: true, + }, + { + name: "empty token", + args: args{ + token: &serviceaccount.AccessToken{}, + }, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.serviceAccountEmail, tt.args.token); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/service-account/token/list/list_test.go b/internal/cmd/service-account/token/list/list_test.go index 3ffed20f5..fc3f5b54b 100644 --- a/internal/cmd/service-account/token/list/list_test.go +++ b/internal/cmd/service-account/token/list/list_test.go @@ -196,3 +196,44 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + tokensMetadata []serviceaccount.AccessTokenMetadata + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + { + name: "empty tokens metadata slice", + args: args{ + tokensMetadata: []serviceaccount.AccessTokenMetadata{}, + }, + wantErr: false, + }, + { + name: "empty token metadata in tokens metadata slice", + args: args{ + tokensMetadata: []serviceaccount.AccessTokenMetadata{{}}, + }, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.tokensMetadata); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +}