Skip to content

Commit 2238a6d

Browse files
committed
fix(dns): print valid JSON/YAML output for list cmds
relates to STACKITCLI-266 / #893
1 parent 99f4d2d commit 2238a6d

File tree

13 files changed

+169
-184
lines changed

13 files changed

+169
-184
lines changed

internal/cmd/dns/record-set/create/create_test.go

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ import (
1717
"github.com/stackitcloud/stackit-sdk-go/services/dns"
1818
)
1919

20-
var projectIdFlag = globalflags.ProjectIdFlag
21-
2220
type testCtxKey struct{}
2321

2422
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -34,13 +32,13 @@ var recordTxtOver255Char = []string{
3432

3533
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
3634
flagValues := map[string]string{
37-
projectIdFlag: testProjectId,
38-
zoneIdFlag: testZoneId,
39-
commentFlag: "comment",
40-
nameFlag: "example.com",
41-
recordFlag: "1.1.1.1",
42-
ttlFlag: "3600",
43-
typeFlag: "SOA", // Non-default value
35+
globalflags.ProjectIdFlag: testProjectId,
36+
zoneIdFlag: testZoneId,
37+
commentFlag: "comment",
38+
nameFlag: "example.com",
39+
recordFlag: "1.1.1.1",
40+
ttlFlag: "3600",
41+
typeFlag: "SOA", // Non-default value
4442
}
4543
for _, mod := range mods {
4644
mod(flagValues)
@@ -107,10 +105,10 @@ func TestParseInput(t *testing.T) {
107105
{
108106
description: "required fields only",
109107
flagValues: map[string]string{
110-
projectIdFlag: testProjectId,
111-
zoneIdFlag: testZoneId,
112-
nameFlag: "example.com",
113-
recordFlag: "1.1.1.1",
108+
globalflags.ProjectIdFlag: testProjectId,
109+
zoneIdFlag: testZoneId,
110+
nameFlag: "example.com",
111+
recordFlag: "1.1.1.1",
114112
},
115113
isValid: true,
116114
expectedModel: &inputModel{
@@ -127,12 +125,12 @@ func TestParseInput(t *testing.T) {
127125
{
128126
description: "zero values",
129127
flagValues: map[string]string{
130-
projectIdFlag: testProjectId,
131-
zoneIdFlag: testZoneId,
132-
commentFlag: "",
133-
nameFlag: "",
134-
recordFlag: "1.1.1.1",
135-
ttlFlag: "0",
128+
globalflags.ProjectIdFlag: testProjectId,
129+
zoneIdFlag: testZoneId,
130+
commentFlag: "",
131+
nameFlag: "",
132+
recordFlag: "1.1.1.1",
133+
ttlFlag: "0",
136134
},
137135
isValid: true,
138136
expectedModel: &inputModel{
@@ -151,21 +149,21 @@ func TestParseInput(t *testing.T) {
151149
{
152150
description: "project id missing",
153151
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
154-
delete(flagValues, projectIdFlag)
152+
delete(flagValues, globalflags.ProjectIdFlag)
155153
}),
156154
isValid: false,
157155
},
158156
{
159157
description: "project id invalid 1",
160158
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
161-
flagValues[projectIdFlag] = ""
159+
flagValues[globalflags.ProjectIdFlag] = ""
162160
}),
163161
isValid: false,
164162
},
165163
{
166164
description: "project id invalid 2",
167165
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
168-
flagValues[projectIdFlag] = "invalid-uuid"
166+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
169167
}),
170168
isValid: false,
171169
},

internal/cmd/dns/record-set/delete/delete_test.go

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

16-
var projectIdFlag = globalflags.ProjectIdFlag
17-
1816
type testCtxKey struct{}
1917

2018
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -35,8 +33,8 @@ func fixtureArgValues(mods ...func(argValues []string)) []string {
3533

3634
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
3735
flagValues := map[string]string{
38-
projectIdFlag: testProjectId,
39-
zoneIdFlag: testZoneId,
36+
globalflags.ProjectIdFlag: testProjectId,
37+
zoneIdFlag: testZoneId,
4038
}
4139
for _, mod := range mods {
4240
mod(flagValues)
@@ -104,23 +102,23 @@ func TestParseInput(t *testing.T) {
104102
description: "project id missing",
105103
argValues: fixtureArgValues(),
106104
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
107-
delete(flagValues, projectIdFlag)
105+
delete(flagValues, globalflags.ProjectIdFlag)
108106
}),
109107
isValid: false,
110108
},
111109
{
112110
description: "project id invalid 1",
113111
argValues: fixtureArgValues(),
114112
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
115-
flagValues[projectIdFlag] = ""
113+
flagValues[globalflags.ProjectIdFlag] = ""
116114
}),
117115
isValid: false,
118116
},
119117
{
120118
description: "project id invalid 2",
121119
argValues: fixtureArgValues(),
122120
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
123-
flagValues[projectIdFlag] = "invalid-uuid"
121+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
124122
}),
125123
isValid: false,
126124
},

internal/cmd/dns/record-set/describe/describe_test.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ import (
1414
"github.com/stackitcloud/stackit-sdk-go/services/dns"
1515
)
1616

17-
var projectIdFlag = globalflags.ProjectIdFlag
18-
1917
type testCtxKey struct{}
2018

2119
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -36,8 +34,8 @@ func fixtureArgValues(mods ...func(argValues []string)) []string {
3634

3735
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
3836
flagValues := map[string]string{
39-
projectIdFlag: testProjectId,
40-
zoneIdFlag: testZoneId,
37+
globalflags.ProjectIdFlag: testProjectId,
38+
zoneIdFlag: testZoneId,
4139
}
4240
for _, mod := range mods {
4341
mod(flagValues)
@@ -105,23 +103,23 @@ func TestParseInput(t *testing.T) {
105103
description: "project id missing",
106104
argValues: fixtureArgValues(),
107105
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
108-
delete(flagValues, projectIdFlag)
106+
delete(flagValues, globalflags.ProjectIdFlag)
109107
}),
110108
isValid: false,
111109
},
112110
{
113111
description: "project id invalid 1",
114112
argValues: fixtureArgValues(),
115113
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
116-
flagValues[projectIdFlag] = ""
114+
flagValues[globalflags.ProjectIdFlag] = ""
117115
}),
118116
isValid: false,
119117
},
120118
{
121119
description: "project id invalid 2",
122120
argValues: fixtureArgValues(),
123121
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
124-
flagValues[projectIdFlag] = "invalid-uuid"
122+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
125123
}),
126124
isValid: false,
127125
},

internal/cmd/dns/record-set/list/list.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,14 @@ func NewCmd(params *params.CmdParams) *cobra.Command {
9090
if err != nil {
9191
return err
9292
}
93-
if len(recordSets) == 0 {
94-
zoneLabel, err := dnsUtils.GetZoneName(ctx, apiClient, model.ProjectId, model.ZoneId)
95-
if err != nil {
96-
params.Printer.Debug(print.ErrorLevel, "get zone name: %v", err)
97-
zoneLabel = model.ZoneId
98-
}
99-
params.Printer.Info("No record sets found for zone %s matching the criteria\n", zoneLabel)
100-
return nil
93+
94+
zoneLabel, err := dnsUtils.GetZoneName(ctx, apiClient, model.ProjectId, model.ZoneId)
95+
if err != nil {
96+
params.Printer.Debug(print.ErrorLevel, "get zone name: %v", err)
97+
zoneLabel = model.ZoneId
10198
}
102-
return outputResult(params.Printer, model.OutputFormat, recordSets)
99+
100+
return outputResult(params.Printer, model.OutputFormat, zoneLabel, recordSets)
103101
},
104102
}
105103

@@ -239,8 +237,13 @@ func fetchRecordSets(ctx context.Context, model *inputModel, apiClient dnsClient
239237
return recordSets, nil
240238
}
241239

242-
func outputResult(p *print.Printer, outputFormat string, recordSets []dns.RecordSet) error {
240+
func outputResult(p *print.Printer, outputFormat, zoneLabel string, recordSets []dns.RecordSet) error {
243241
return p.OutputResult(outputFormat, recordSets, func() error {
242+
if len(recordSets) == 0 {
243+
p.Outputf("No record sets found for zone %s matching the criteria\n", zoneLabel)
244+
return nil
245+
}
246+
244247
table := tables.NewTable()
245248
table.SetHeader("ID", "NAME", "STATUS", "TTL", "TYPE", "RECORD DATA")
246249
for i := range recordSets {

internal/cmd/dns/record-set/list/list_test.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ import (
2020
"github.com/stackitcloud/stackit-sdk-go/services/dns"
2121
)
2222

23-
var projectIdFlag = globalflags.ProjectIdFlag
24-
2523
type testCtxKey struct{}
2624

2725
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -31,10 +29,10 @@ var testZoneId = uuid.NewString()
3129

3230
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
3331
flagValues := map[string]string{
34-
projectIdFlag: testProjectId,
35-
zoneIdFlag: testZoneId,
36-
nameLikeFlag: "some-pattern",
37-
orderByNameFlag: "asc",
32+
globalflags.ProjectIdFlag: testProjectId,
33+
zoneIdFlag: testZoneId,
34+
nameLikeFlag: "some-pattern",
35+
orderByNameFlag: "asc",
3836
}
3937
for _, mod := range mods {
4038
mod(flagValues)
@@ -130,8 +128,8 @@ func TestParseInput(t *testing.T) {
130128
{
131129
description: "required fields only",
132130
flagValues: map[string]string{
133-
projectIdFlag: testProjectId,
134-
zoneIdFlag: testZoneId,
131+
globalflags.ProjectIdFlag: testProjectId,
132+
zoneIdFlag: testZoneId,
135133
},
136134
isValid: true,
137135
expectedModel: &inputModel{
@@ -146,21 +144,21 @@ func TestParseInput(t *testing.T) {
146144
{
147145
description: "project id missing",
148146
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
149-
delete(flagValues, projectIdFlag)
147+
delete(flagValues, globalflags.ProjectIdFlag)
150148
}),
151149
isValid: false,
152150
},
153151
{
154152
description: "project id invalid 1",
155153
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
156-
flagValues[projectIdFlag] = ""
154+
flagValues[globalflags.ProjectIdFlag] = ""
157155
}),
158156
isValid: false,
159157
},
160158
{
161159
description: "project id invalid 2",
162160
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
163-
flagValues[projectIdFlag] = "invalid-uuid"
161+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
164162
}),
165163
isValid: false,
166164
},
@@ -468,6 +466,7 @@ func TestFetchRecordSets(t *testing.T) {
468466
func TestOutputResult(t *testing.T) {
469467
type args struct {
470468
outputFormat string
469+
zoneLabel string
471470
recordSets []dns.RecordSet
472471
}
473472
tests := []struct {
@@ -485,7 +484,7 @@ func TestOutputResult(t *testing.T) {
485484
p.Cmd = NewCmd(&params.CmdParams{Printer: p})
486485
for _, tt := range tests {
487486
t.Run(tt.name, func(t *testing.T) {
488-
if err := outputResult(p, tt.args.outputFormat, tt.args.recordSets); (err != nil) != tt.wantErr {
487+
if err := outputResult(p, tt.args.outputFormat, tt.args.zoneLabel, tt.args.recordSets); (err != nil) != tt.wantErr {
489488
t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr)
490489
}
491490
})

internal/cmd/dns/record-set/update/update_test.go

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

19-
var projectIdFlag = globalflags.ProjectIdFlag
20-
2119
type testCtxKey struct{}
2220

2321
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -45,12 +43,12 @@ func fixtureArgValues(mods ...func(argValues []string)) []string {
4543

4644
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
4745
flagValues := map[string]string{
48-
projectIdFlag: testProjectId,
49-
zoneIdFlag: testZoneId,
50-
commentFlag: "comment",
51-
nameFlag: "example.com",
52-
recordFlag: "1.1.1.1",
53-
ttlFlag: "3600",
46+
globalflags.ProjectIdFlag: testProjectId,
47+
zoneIdFlag: testZoneId,
48+
commentFlag: "comment",
49+
nameFlag: "example.com",
50+
recordFlag: "1.1.1.1",
51+
ttlFlag: "3600",
5452
}
5553
for _, mod := range mods {
5654
mod(flagValues)
@@ -132,8 +130,8 @@ func TestParseInput(t *testing.T) {
132130
description: "required flags only (no values to update)",
133131
argValues: fixtureArgValues(),
134132
flagValues: map[string]string{
135-
projectIdFlag: testProjectId,
136-
zoneIdFlag: testZoneId,
133+
globalflags.ProjectIdFlag: testProjectId,
134+
zoneIdFlag: testZoneId,
137135
},
138136
isValid: false,
139137
expectedModel: &inputModel{
@@ -149,12 +147,12 @@ func TestParseInput(t *testing.T) {
149147
description: "zero values",
150148
argValues: fixtureArgValues(),
151149
flagValues: map[string]string{
152-
projectIdFlag: testProjectId,
153-
zoneIdFlag: testZoneId,
154-
commentFlag: "",
155-
nameFlag: "",
156-
recordFlag: "1.1.1.1",
157-
ttlFlag: "0",
150+
globalflags.ProjectIdFlag: testProjectId,
151+
zoneIdFlag: testZoneId,
152+
commentFlag: "",
153+
nameFlag: "",
154+
recordFlag: "1.1.1.1",
155+
ttlFlag: "0",
158156
},
159157
isValid: true,
160158
expectedModel: &inputModel{
@@ -174,23 +172,23 @@ func TestParseInput(t *testing.T) {
174172
description: "project id missing",
175173
argValues: fixtureArgValues(),
176174
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
177-
delete(flagValues, projectIdFlag)
175+
delete(flagValues, globalflags.ProjectIdFlag)
178176
}),
179177
isValid: false,
180178
},
181179
{
182180
description: "project id invalid 1",
183181
argValues: fixtureArgValues(),
184182
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
185-
flagValues[projectIdFlag] = ""
183+
flagValues[globalflags.ProjectIdFlag] = ""
186184
}),
187185
isValid: false,
188186
},
189187
{
190188
description: "project id invalid 2",
191189
argValues: fixtureArgValues(),
192190
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
193-
flagValues[projectIdFlag] = "invalid-uuid"
191+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
194192
}),
195193
isValid: false,
196194
},

0 commit comments

Comments
 (0)