diff --git a/internal/cmd/organization/member/add/add.go b/internal/cmd/organization/member/add/add.go index 523c6ad22..b03ae495f 100644 --- a/internal/cmd/organization/member/add/add.go +++ b/internal/cmd/organization/member/add/add.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/spf13/cobra" "github.com/stackitcloud/stackit-cli/internal/pkg/args" "github.com/stackitcloud/stackit-cli/internal/pkg/examples" "github.com/stackitcloud/stackit-cli/internal/pkg/flags" @@ -11,8 +12,6 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/print" "github.com/stackitcloud/stackit-cli/internal/pkg/services/authorization/client" "github.com/stackitcloud/stackit-cli/internal/pkg/utils" - - "github.com/spf13/cobra" "github.com/stackitcloud/stackit-sdk-go/services/authorization" ) diff --git a/internal/cmd/organization/member/list/list.go b/internal/cmd/organization/member/list/list.go index 65f38a490..e3376d584 100644 --- a/internal/cmd/organization/member/list/list.go +++ b/internal/cmd/organization/member/list/list.go @@ -7,6 +7,7 @@ import ( "sort" "github.com/goccy/go-yaml" + "github.com/spf13/cobra" "github.com/stackitcloud/stackit-cli/internal/pkg/args" "github.com/stackitcloud/stackit-cli/internal/pkg/errors" "github.com/stackitcloud/stackit-cli/internal/pkg/examples" @@ -16,8 +17,6 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/services/authorization/client" "github.com/stackitcloud/stackit-cli/internal/pkg/tables" "github.com/stackitcloud/stackit-cli/internal/pkg/utils" - - "github.com/spf13/cobra" "github.com/stackitcloud/stackit-sdk-go/services/authorization" ) @@ -86,7 +85,7 @@ func NewCmd(p *print.Printer) *cobra.Command { members = members[:*model.Limit] } - return outputResult(p, model, members) + return outputResult(p, model.OutputFormat, model.SortBy, members) }, } configureFlags(cmd) @@ -144,9 +143,9 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *authorizati return req } -func outputResult(p *print.Printer, model *inputModel, members []authorization.Member) error { +func outputResult(p *print.Printer, outputFormat, sortBy string, members []authorization.Member) error { sortFn := func(i, j int) bool { - switch model.SortBy { + switch sortBy { case "subject": return *members[i].Subject < *members[j].Subject case "role": @@ -157,7 +156,7 @@ func outputResult(p *print.Printer, model *inputModel, members []authorization.M } sort.SliceStable(members, sortFn) - switch model.OutputFormat { + switch outputFormat { case print.JSONOutputFormat: // Show details details, err := json.MarshalIndent(members, "", " ") @@ -187,9 +186,9 @@ func outputResult(p *print.Printer, model *inputModel, members []authorization.M table.AddRow(utils.PtrString(m.Subject), utils.PtrString(m.Role)) } - if model.SortBy == "subject" { + if sortBy == "subject" { table.EnableAutoMergeOnColumns(1) - } else if model.SortBy == "role" { + } else if sortBy == "role" { table.EnableAutoMergeOnColumns(2) } diff --git a/internal/cmd/organization/member/list/list_test.go b/internal/cmd/organization/member/list/list_test.go index a740b961c..2c73681c0 100644 --- a/internal/cmd/organization/member/list/list_test.go +++ b/internal/cmd/organization/member/list/list_test.go @@ -204,3 +204,45 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + sortBy string + members []authorization.Member + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + { + name: "set empty members slice", + args: args{ + members: []authorization.Member{}, + }, + wantErr: false, + }, + { + name: "set empty role in roles slice", + args: args{ + members: []authorization.Member{{}}, + }, + 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.sortBy, tt.args.members); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/organization/role/list/list.go b/internal/cmd/organization/role/list/list.go index 5818142ff..c9e175323 100644 --- a/internal/cmd/organization/role/list/list.go +++ b/internal/cmd/organization/role/list/list.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/goccy/go-yaml" + "github.com/spf13/cobra" "github.com/stackitcloud/stackit-cli/internal/pkg/args" "github.com/stackitcloud/stackit-cli/internal/pkg/errors" "github.com/stackitcloud/stackit-cli/internal/pkg/examples" @@ -15,8 +16,6 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/services/authorization/client" "github.com/stackitcloud/stackit-cli/internal/pkg/tables" "github.com/stackitcloud/stackit-cli/internal/pkg/utils" - - "github.com/spf13/cobra" "github.com/stackitcloud/stackit-sdk-go/services/authorization" ) @@ -153,16 +152,18 @@ func outputRolesResult(p *print.Printer, outputFormat string, roles []authorizat table.SetHeader("ROLE NAME", "ROLE DESCRIPTION", "PERMISSION NAME", "PERMISSION DESCRIPTION") for i := range roles { r := roles[i] - for j := range *r.Permissions { - p := (*r.Permissions)[j] - table.AddRow( - utils.PtrString(r.Name), - utils.PtrString(r.Description), - utils.PtrString(p.Name), - utils.PtrString(p.Description), - ) + if r.Permissions != nil { + for j := range *r.Permissions { + p := (*r.Permissions)[j] + table.AddRow( + utils.PtrString(r.Name), + utils.PtrString(r.Description), + utils.PtrString(p.Name), + utils.PtrString(p.Description), + ) + } + table.AddSeparator() } - table.AddSeparator() } table.EnableAutoMergeOnColumns(1, 2) err := table.Display(p) diff --git a/internal/cmd/organization/role/list/list_test.go b/internal/cmd/organization/role/list/list_test.go index 684ea2e26..1268fb039 100644 --- a/internal/cmd/organization/role/list/list_test.go +++ b/internal/cmd/organization/role/list/list_test.go @@ -167,3 +167,44 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + roles []authorization.Role + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + { + name: "set empty roles slice", + args: args{ + roles: []authorization.Role{}, + }, + wantErr: false, + }, + { + name: "set empty role in roles slice", + args: args{ + roles: []authorization.Role{{}}, + }, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputRolesResult(p, tt.args.outputFormat, tt.args.roles); (err != nil) != tt.wantErr { + t.Errorf("outputRolesResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +}