Skip to content

Commit 03ca810

Browse files
authored
fix(objectstorage): print valid JSON/YAML for list cmds (#1041)
relates to STACKITCLI-267 / #893
1 parent 71b3950 commit 03ca810

File tree

15 files changed

+144
-152
lines changed

15 files changed

+144
-152
lines changed

internal/cmd/object-storage/bucket/create/create_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ import (
1515
"github.com/stackitcloud/stackit-sdk-go/services/objectstorage"
1616
)
1717

18-
var projectIdFlag = globalflags.ProjectIdFlag
19-
var regionFlag = globalflags.RegionFlag
20-
2118
type testCtxKey struct{}
2219

2320
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
2421
var testClient = &objectstorage.APIClient{}
2522
var testProjectId = uuid.NewString()
26-
var testRegion = "eu01"
27-
var testBucketName = "my-bucket"
23+
24+
const (
25+
testRegion = "eu01"
26+
testBucketName = "my-bucket"
27+
)
2828

2929
func fixtureArgValues(mods ...func(argValues []string)) []string {
3030
argValues := []string{
@@ -38,8 +38,8 @@ func fixtureArgValues(mods ...func(argValues []string)) []string {
3838

3939
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
4040
flagValues := map[string]string{
41-
projectIdFlag: testProjectId,
42-
regionFlag: testRegion,
41+
globalflags.ProjectIdFlag: testProjectId,
42+
globalflags.RegionFlag: testRegion,
4343
}
4444
for _, mod := range mods {
4545
mod(flagValues)
@@ -107,23 +107,23 @@ func TestParseInput(t *testing.T) {
107107
description: "project id missing",
108108
argValues: fixtureArgValues(),
109109
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
110-
delete(flagValues, projectIdFlag)
110+
delete(flagValues, globalflags.ProjectIdFlag)
111111
}),
112112
isValid: false,
113113
},
114114
{
115115
description: "project id invalid 1",
116116
argValues: fixtureArgValues(),
117117
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
118-
flagValues[projectIdFlag] = ""
118+
flagValues[globalflags.ProjectIdFlag] = ""
119119
}),
120120
isValid: false,
121121
},
122122
{
123123
description: "project id invalid 2",
124124
argValues: fixtureArgValues(),
125125
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
126-
flagValues[projectIdFlag] = "invalid-uuid"
126+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
127127
}),
128128
isValid: false,
129129
},

internal/cmd/object-storage/bucket/delete/delete_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ import (
1313
"github.com/stackitcloud/stackit-sdk-go/services/objectstorage"
1414
)
1515

16-
var projectIdFlag = globalflags.ProjectIdFlag
17-
var regionFlag = globalflags.RegionFlag
18-
1916
type testCtxKey struct{}
2017

2118
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
2219
var testClient = &objectstorage.APIClient{}
2320
var testProjectId = uuid.NewString()
24-
var testRegion = "eu01"
25-
var testBucketName = "my-bucket"
21+
22+
const (
23+
testRegion = "eu01"
24+
testBucketName = "my-bucket"
25+
)
2626

2727
func fixtureArgValues(mods ...func(argValues []string)) []string {
2828
argValues := []string{
@@ -36,8 +36,8 @@ func fixtureArgValues(mods ...func(argValues []string)) []string {
3636

3737
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
3838
flagValues := map[string]string{
39-
projectIdFlag: testProjectId,
40-
regionFlag: testRegion,
39+
globalflags.ProjectIdFlag: testProjectId,
40+
globalflags.RegionFlag: testRegion,
4141
}
4242
for _, mod := range mods {
4343
mod(flagValues)
@@ -105,23 +105,23 @@ func TestParseInput(t *testing.T) {
105105
description: "project id missing",
106106
argValues: fixtureArgValues(),
107107
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
108-
delete(flagValues, projectIdFlag)
108+
delete(flagValues, globalflags.ProjectIdFlag)
109109
}),
110110
isValid: false,
111111
},
112112
{
113113
description: "project id invalid 1",
114114
argValues: fixtureArgValues(),
115115
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
116-
flagValues[projectIdFlag] = ""
116+
flagValues[globalflags.ProjectIdFlag] = ""
117117
}),
118118
isValid: false,
119119
},
120120
{
121121
description: "project id invalid 2",
122122
argValues: fixtureArgValues(),
123123
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
124-
flagValues[projectIdFlag] = "invalid-uuid"
124+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
125125
}),
126126
isValid: false,
127127
},

internal/cmd/object-storage/bucket/describe/describe_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ import (
1515
"github.com/stackitcloud/stackit-sdk-go/services/objectstorage"
1616
)
1717

18-
var projectIdFlag = globalflags.ProjectIdFlag
19-
var regionFlag = globalflags.RegionFlag
20-
2118
type testCtxKey struct{}
2219

2320
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
2421
var testClient = &objectstorage.APIClient{}
2522
var testProjectId = uuid.NewString()
26-
var testRegion = "eu01"
27-
var testBucketName = "my-bucket"
23+
24+
const (
25+
testRegion = "eu01"
26+
testBucketName = "my-bucket"
27+
)
2828

2929
func fixtureArgValues(mods ...func(argValues []string)) []string {
3030
argValues := []string{
@@ -38,8 +38,8 @@ func fixtureArgValues(mods ...func(argValues []string)) []string {
3838

3939
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
4040
flagValues := map[string]string{
41-
projectIdFlag: testProjectId,
42-
regionFlag: testRegion,
41+
globalflags.ProjectIdFlag: testProjectId,
42+
globalflags.RegionFlag: testRegion,
4343
}
4444
for _, mod := range mods {
4545
mod(flagValues)
@@ -107,23 +107,23 @@ func TestParseInput(t *testing.T) {
107107
description: "project id missing",
108108
argValues: fixtureArgValues(),
109109
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
110-
delete(flagValues, projectIdFlag)
110+
delete(flagValues, globalflags.ProjectIdFlag)
111111
}),
112112
isValid: false,
113113
},
114114
{
115115
description: "project id invalid 1",
116116
argValues: fixtureArgValues(),
117117
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
118-
flagValues[projectIdFlag] = ""
118+
flagValues[globalflags.ProjectIdFlag] = ""
119119
}),
120120
isValid: false,
121121
},
122122
{
123123
description: "project id invalid 2",
124124
argValues: fixtureArgValues(),
125125
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
126-
flagValues[projectIdFlag] = "invalid-uuid"
126+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
127127
}),
128128
isValid: false,
129129
},

internal/cmd/object-storage/bucket/list/list.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,23 +64,20 @@ func NewCmd(params *params.CmdParams) *cobra.Command {
6464
if err != nil {
6565
return fmt.Errorf("get Object Storage buckets: %w", err)
6666
}
67-
if resp.Buckets == nil || len(*resp.Buckets) == 0 {
68-
projectLabel, err := projectname.GetProjectName(ctx, params.Printer, params.CliVersion, cmd)
69-
if err != nil {
70-
params.Printer.Debug(print.ErrorLevel, "get project name: %v", err)
71-
projectLabel = model.ProjectId
72-
}
73-
params.Printer.Info("No buckets found for project %s\n", projectLabel)
74-
return nil
67+
buckets := resp.GetBuckets()
68+
69+
projectLabel, err := projectname.GetProjectName(ctx, params.Printer, params.CliVersion, cmd)
70+
if err != nil {
71+
params.Printer.Debug(print.ErrorLevel, "get project name: %v", err)
72+
projectLabel = model.ProjectId
7573
}
76-
buckets := *resp.Buckets
7774

7875
// Truncate output
7976
if model.Limit != nil && len(buckets) > int(*model.Limit) {
8077
buckets = buckets[:*model.Limit]
8178
}
8279

83-
return outputResult(params.Printer, model.OutputFormat, buckets)
80+
return outputResult(params.Printer, model.OutputFormat, projectLabel, buckets)
8481
},
8582
}
8683

@@ -120,12 +117,17 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *objectstora
120117
return req
121118
}
122119

123-
func outputResult(p *print.Printer, outputFormat string, buckets []objectstorage.Bucket) error {
120+
func outputResult(p *print.Printer, outputFormat, projectLabel string, buckets []objectstorage.Bucket) error {
124121
if buckets == nil {
125122
return fmt.Errorf("buckets is empty")
126123
}
127124

128125
return p.OutputResult(outputFormat, buckets, func() error {
126+
if len(buckets) == 0 {
127+
p.Outputf("No buckets found for project %s\n", projectLabel)
128+
return nil
129+
}
130+
129131
table := tables.NewTable()
130132
table.SetHeader("NAME", "REGION", "URL (PATH STYLE)", "URL (VIRTUAL HOSTED STYLE)")
131133
for i := range buckets {

internal/cmd/object-storage/bucket/list/list_test.go

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ import (
1616
"github.com/stackitcloud/stackit-sdk-go/services/objectstorage"
1717
)
1818

19-
var projectIdFlag = globalflags.ProjectIdFlag
20-
var regionFlag = globalflags.RegionFlag
21-
2219
type testCtxKey struct{}
2320

2421
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -28,9 +25,9 @@ var testRegion = "eu01"
2825

2926
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
3027
flagValues := map[string]string{
31-
projectIdFlag: testProjectId,
32-
limitFlag: "10",
33-
regionFlag: testRegion,
28+
globalflags.ProjectIdFlag: testProjectId,
29+
limitFlag: "10",
30+
globalflags.RegionFlag: testRegion,
3431
}
3532
for _, mod := range mods {
3633
mod(flagValues)
@@ -83,21 +80,21 @@ func TestParseInput(t *testing.T) {
8380
{
8481
description: "project id missing",
8582
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
86-
delete(flagValues, projectIdFlag)
83+
delete(flagValues, globalflags.ProjectIdFlag)
8784
}),
8885
isValid: false,
8986
},
9087
{
9188
description: "project id invalid 1",
9289
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
93-
flagValues[projectIdFlag] = ""
90+
flagValues[globalflags.ProjectIdFlag] = ""
9491
}),
9592
isValid: false,
9693
},
9794
{
9895
description: "project id invalid 2",
9996
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
100-
flagValues[projectIdFlag] = "invalid-uuid"
97+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
10198
}),
10299
isValid: false,
103100
},
@@ -155,6 +152,7 @@ func TestBuildRequest(t *testing.T) {
155152
func TestOutputResult(t *testing.T) {
156153
type args struct {
157154
outputFormat string
155+
projectLabel string
158156
buckets []objectstorage.Bucket
159157
}
160158
tests := []struct {
@@ -179,7 +177,7 @@ func TestOutputResult(t *testing.T) {
179177
p.Cmd = NewCmd(&params.CmdParams{Printer: p})
180178
for _, tt := range tests {
181179
t.Run(tt.name, func(t *testing.T) {
182-
if err := outputResult(p, tt.args.outputFormat, tt.args.buckets); (err != nil) != tt.wantErr {
180+
if err := outputResult(p, tt.args.outputFormat, tt.args.projectLabel, tt.args.buckets); (err != nil) != tt.wantErr {
183181
t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr)
184182
}
185183
})

internal/cmd/object-storage/credentials-group/create/create_test.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,22 @@ import (
1616
"github.com/stackitcloud/stackit-sdk-go/services/objectstorage"
1717
)
1818

19-
var projectIdFlag = globalflags.ProjectIdFlag
20-
var regionFlag = globalflags.RegionFlag
21-
2219
type testCtxKey struct{}
2320

2421
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
2522
var testClient = &objectstorage.APIClient{}
2623
var testProjectId = uuid.NewString()
27-
var testCredentialsGroupName = "test-name"
28-
var testRegion = "eu01"
24+
25+
const (
26+
testCredentialsGroupName = "test-name"
27+
testRegion = "eu01"
28+
)
2929

3030
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
3131
flagValues := map[string]string{
32-
projectIdFlag: testProjectId,
33-
credentialsGroupNameFlag: testCredentialsGroupName,
34-
regionFlag: testRegion,
32+
globalflags.ProjectIdFlag: testProjectId,
33+
credentialsGroupNameFlag: testCredentialsGroupName,
34+
globalflags.RegionFlag: testRegion,
3535
}
3636
for _, mod := range mods {
3737
mod(flagValues)
@@ -95,21 +95,21 @@ func TestParseInput(t *testing.T) {
9595
{
9696
description: "project id missing",
9797
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
98-
delete(flagValues, projectIdFlag)
98+
delete(flagValues, globalflags.ProjectIdFlag)
9999
}),
100100
isValid: false,
101101
},
102102
{
103103
description: "project id invalid 1",
104104
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
105-
flagValues[projectIdFlag] = ""
105+
flagValues[globalflags.ProjectIdFlag] = ""
106106
}),
107107
isValid: false,
108108
},
109109
{
110110
description: "project id invalid 2",
111111
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
112-
flagValues[projectIdFlag] = "invalid-uuid"
112+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
113113
}),
114114
isValid: false,
115115
},

0 commit comments

Comments
 (0)