Skip to content

Commit b79dc00

Browse files
authored
fix(sqlserverflex): print valid JSON/YAML output for list cmds (#1044)
relates to STACKITCLI-272 / #893
1 parent fd2b406 commit b79dc00

File tree

6 files changed

+54
-41
lines changed

6 files changed

+54
-41
lines changed

internal/cmd/beta/sqlserverflex/database/list/list.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,23 +66,20 @@ func NewCmd(params *params.CmdParams) *cobra.Command {
6666
if err != nil {
6767
return fmt.Errorf("get SQLServer Flex databases: %w", err)
6868
}
69-
if resp.Databases == nil || len(*resp.Databases) == 0 {
70-
projectLabel, err := projectname.GetProjectName(ctx, params.Printer, params.CliVersion, cmd)
71-
if err != nil {
72-
params.Printer.Debug(print.ErrorLevel, "get project name: %v", err)
73-
projectLabel = model.ProjectId
74-
}
75-
params.Printer.Info("No databases found for instance %s on project %s\n", model.InstanceId, projectLabel)
76-
return nil
69+
databases := resp.GetDatabases()
70+
71+
projectLabel, err := projectname.GetProjectName(ctx, params.Printer, params.CliVersion, cmd)
72+
if err != nil {
73+
params.Printer.Debug(print.ErrorLevel, "get project name: %v", err)
74+
projectLabel = model.ProjectId
7775
}
78-
databases := *resp.Databases
7976

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

85-
return outputResult(params.Printer, model.OutputFormat, databases)
82+
return outputResult(params.Printer, model.OutputFormat, model.InstanceId, projectLabel, databases)
8683
},
8784
}
8885

@@ -127,8 +124,13 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *sqlserverfl
127124
return req
128125
}
129126

130-
func outputResult(p *print.Printer, outputFormat string, databases []sqlserverflex.Database) error {
127+
func outputResult(p *print.Printer, outputFormat, instanceId, projectLabel string, databases []sqlserverflex.Database) error {
131128
return p.OutputResult(outputFormat, databases, func() error {
129+
if len(databases) == 0 {
130+
p.Outputf("No databases found for instance %s on project %s\n", instanceId, projectLabel)
131+
return nil
132+
}
133+
132134
table := tables.NewTable()
133135
table.SetHeader("ID", "NAME")
134136
for i := range databases {

internal/cmd/beta/sqlserverflex/database/list/list_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
2121
var testClient = &sqlserverflex.APIClient{}
2222
var testProjectId = uuid.NewString()
2323
var testInstanceId = uuid.NewString()
24-
var testRegion = "eu01"
24+
25+
const testRegion = "eu01"
2526

2627
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
2728
flagValues := map[string]string{
@@ -175,6 +176,8 @@ func TestBuildRequest(t *testing.T) {
175176
func TestOutputResult(t *testing.T) {
176177
type args struct {
177178
outputFormat string
179+
instanceId string
180+
projectLabel string
178181
databases []sqlserverflex.Database
179182
}
180183
tests := []struct {
@@ -199,7 +202,7 @@ func TestOutputResult(t *testing.T) {
199202
p.Cmd = NewCmd(&params.CmdParams{Printer: p})
200203
for _, tt := range tests {
201204
t.Run(tt.name, func(t *testing.T) {
202-
if err := outputResult(p, tt.args.outputFormat, tt.args.databases); (err != nil) != tt.wantErr {
205+
if err := outputResult(p, tt.args.outputFormat, tt.args.instanceId, tt.args.projectLabel, tt.args.databases); (err != nil) != tt.wantErr {
203206
t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr)
204207
}
205208
})

internal/cmd/beta/sqlserverflex/instance/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 SQLServer Flex instances: %w", err)
6666
}
67-
if resp.Items == nil || len(*resp.Items) == 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 instances found for project %q\n", projectLabel)
74-
return nil
67+
instances := resp.GetItems()
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-
instances := *resp.Items
7774

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

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

@@ -120,8 +117,13 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *sqlserverfl
120117
return req
121118
}
122119

123-
func outputResult(p *print.Printer, outputFormat string, instances []sqlserverflex.InstanceListInstance) error {
120+
func outputResult(p *print.Printer, outputFormat, projectLabel string, instances []sqlserverflex.InstanceListInstance) error {
124121
return p.OutputResult(outputFormat, instances, func() error {
122+
if len(instances) == 0 {
123+
p.Outputf("No instances found for project %q\n", projectLabel)
124+
return nil
125+
}
126+
125127
table := tables.NewTable()
126128
table.SetHeader("ID", "NAME", "STATUS")
127129
for i := range instances {

internal/cmd/beta/sqlserverflex/instance/list/list_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ type testCtxKey struct{}
2020
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
2121
var testClient = &sqlserverflex.APIClient{}
2222
var testProjectId = uuid.NewString()
23-
var testRegion = "eu01"
23+
24+
const testRegion = "eu01"
2425

2526
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
2627
flagValues := map[string]string{
@@ -151,6 +152,7 @@ func TestBuildRequest(t *testing.T) {
151152
func TestOutputResult(t *testing.T) {
152153
type args struct {
153154
outputFormat string
155+
projectLabel string
154156
instances []sqlserverflex.InstanceListInstance
155157
}
156158
tests := []struct {
@@ -175,7 +177,7 @@ func TestOutputResult(t *testing.T) {
175177
p.Cmd = NewCmd(&params.CmdParams{Printer: p})
176178
for _, tt := range tests {
177179
t.Run(tt.name, func(t *testing.T) {
178-
if err := outputResult(p, tt.args.outputFormat, tt.args.instances); (err != nil) != tt.wantErr {
180+
if err := outputResult(p, tt.args.outputFormat, tt.args.projectLabel, tt.args.instances); (err != nil) != tt.wantErr {
179181
t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr)
180182
}
181183
})

internal/cmd/beta/sqlserverflex/user/list/list.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,23 +67,20 @@ func NewCmd(params *params.CmdParams) *cobra.Command {
6767
if err != nil {
6868
return fmt.Errorf("get SQLServer Flex users: %w", err)
6969
}
70-
if resp.Items == nil || len(*resp.Items) == 0 {
71-
instanceLabel, err := sqlserverflexUtils.GetInstanceName(ctx, apiClient, model.ProjectId, *model.InstanceId, model.Region)
72-
if err != nil {
73-
params.Printer.Debug(print.ErrorLevel, "get instance name: %v", err)
74-
instanceLabel = *model.InstanceId
75-
}
76-
params.Printer.Info("No users found for instance %q\n", instanceLabel)
77-
return nil
70+
users := resp.GetItems()
71+
72+
instanceLabel, err := sqlserverflexUtils.GetInstanceName(ctx, apiClient, model.ProjectId, *model.InstanceId, model.Region)
73+
if err != nil {
74+
params.Printer.Debug(print.ErrorLevel, "get instance name: %v", err)
75+
instanceLabel = *model.InstanceId
7876
}
79-
users := *resp.Items
8077

8178
// Truncate output
8279
if model.Limit != nil && len(users) > int(*model.Limit) {
8380
users = users[:*model.Limit]
8481
}
8582

86-
return outputResult(params.Printer, model.OutputFormat, users)
83+
return outputResult(params.Printer, model.OutputFormat, instanceLabel, users)
8784
},
8885
}
8986

@@ -128,8 +125,13 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *sqlserverfl
128125
return req
129126
}
130127

131-
func outputResult(p *print.Printer, outputFormat string, users []sqlserverflex.InstanceListUser) error {
128+
func outputResult(p *print.Printer, outputFormat, instanceLabel string, users []sqlserverflex.InstanceListUser) error {
132129
return p.OutputResult(outputFormat, users, func() error {
130+
if len(users) == 0 {
131+
p.Outputf("No users found for instance %q\n", instanceLabel)
132+
return nil
133+
}
134+
133135
table := tables.NewTable()
134136
table.SetHeader("ID", "USERNAME")
135137
for i := range users {

internal/cmd/beta/sqlserverflex/user/list/list_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
2121
var testClient = &sqlserverflex.APIClient{}
2222
var testProjectId = uuid.NewString()
2323
var testInstanceId = uuid.NewString()
24-
var testRegion = "eu01"
24+
25+
const testRegion = "eu01"
2526

2627
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
2728
flagValues := map[string]string{
@@ -167,8 +168,9 @@ func TestBuildRequest(t *testing.T) {
167168

168169
func TestOutputResult(t *testing.T) {
169170
type args struct {
170-
outputFormat string
171-
users []sqlserverflex.InstanceListUser
171+
outputFormat string
172+
instanceLabel string
173+
users []sqlserverflex.InstanceListUser
172174
}
173175
tests := []struct {
174176
name string
@@ -192,7 +194,7 @@ func TestOutputResult(t *testing.T) {
192194
p.Cmd = NewCmd(&params.CmdParams{Printer: p})
193195
for _, tt := range tests {
194196
t.Run(tt.name, func(t *testing.T) {
195-
if err := outputResult(p, tt.args.outputFormat, tt.args.users); (err != nil) != tt.wantErr {
197+
if err := outputResult(p, tt.args.outputFormat, tt.args.instanceLabel, tt.args.users); (err != nil) != tt.wantErr {
196198
t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr)
197199
}
198200
})

0 commit comments

Comments
 (0)