diff --git a/internal/commands/members/members.go b/internal/commands/members/members.go index 1746a93..8ec677e 100644 --- a/internal/commands/members/members.go +++ b/internal/commands/members/members.go @@ -419,8 +419,7 @@ func deleteMember(ctx context.Context, cmd *cli.Command) error { return fmt.Errorf("delete member: %w", err) } - message.Success(appCtx.StatusOutput, "Member deleted") - return nil + return renderDeleteMemberResult(appCtx) } func parseMembershipStatus(value string) (sumup.MembershipStatus, error) { @@ -494,6 +493,15 @@ func renderMember(w io.Writer, member *sumup.Member) error { return display.DataList(w, details) } +func renderDeleteMemberResult(appCtx *app.Context) error { + if appCtx.JSONOutput { + return display.PrintJSON(appCtx.Output, map[string]string{"status": "deleted"}) + } + + message.Success(appCtx.StatusOutput, "Member deleted") + return nil +} + func memberNickname(member *sumup.Member) string { if member != nil && member.User != nil && member.User.Nickname != nil && *member.User.Nickname != "" { return *member.User.Nickname diff --git a/internal/commands/members/members_output_test.go b/internal/commands/members/members_output_test.go new file mode 100644 index 0000000..6e0badc --- /dev/null +++ b/internal/commands/members/members_output_test.go @@ -0,0 +1,42 @@ +package members + +import ( + "bytes" + "strings" + "testing" + + "github.com/sumup/sumup-cli/internal/app" +) + +func TestRenderDeleteMemberResultPrintsJSONWhenRequested(t *testing.T) { + var out bytes.Buffer + + appCtx := &app.Context{ + JSONOutput: true, + Output: &out, + } + + if err := renderDeleteMemberResult(appCtx); err != nil { + t.Fatalf("renderDeleteMemberResult() error = %v", err) + } + + if !strings.Contains(out.String(), `"status": "deleted"`) { + t.Fatalf("renderDeleteMemberResult() output = %q, want deleted acknowledgement", out.String()) + } +} + +func TestRenderDeleteMemberResultWritesStatusMessageInHumanMode(t *testing.T) { + var statusOut bytes.Buffer + + appCtx := &app.Context{ + StatusOutput: &statusOut, + } + + if err := renderDeleteMemberResult(appCtx); err != nil { + t.Fatalf("renderDeleteMemberResult() error = %v", err) + } + + if !strings.Contains(statusOut.String(), "Member deleted") { + t.Fatalf("renderDeleteMemberResult() status output = %q, want delete message", statusOut.String()) + } +} diff --git a/internal/commands/transactions/transactions.go b/internal/commands/transactions/transactions.go index 19664e6..254d399 100644 --- a/internal/commands/transactions/transactions.go +++ b/internal/commands/transactions/transactions.go @@ -15,6 +15,7 @@ import ( "github.com/sumup/sumup-cli/internal/currency" "github.com/sumup/sumup-cli/internal/display" "github.com/sumup/sumup-cli/internal/display/attribute" + "github.com/sumup/sumup-cli/internal/display/message" ) func NewCommand() *cli.Command { @@ -216,11 +217,7 @@ func refundTransaction(ctx context.Context, cmd *cli.Command) error { return fmt.Errorf("refund transaction: %w", err) } - if appCtx.JSONOutput { - return display.PrintJSON(appCtx.Output, map[string]string{"status": "refunded"}) - } - - return nil + return renderRefundResult(appCtx) } func renderTransactionDetails(appCtx *app.Context, transaction *sumup.TransactionFull) error { @@ -246,6 +243,15 @@ func renderTransactionDetails(appCtx *app.Context, transaction *sumup.Transactio }) } +func renderRefundResult(appCtx *app.Context) error { + if appCtx.JSONOutput { + return display.PrintJSON(appCtx.Output, map[string]string{"status": "refunded"}) + } + + message.Success(appCtx.StatusOutput, "Transaction refunded") + return nil +} + func transactionCardLabel(card *sumup.CardResponse) string { if card == nil { return "-" diff --git a/internal/commands/transactions/transactions_output_test.go b/internal/commands/transactions/transactions_output_test.go new file mode 100644 index 0000000..489919b --- /dev/null +++ b/internal/commands/transactions/transactions_output_test.go @@ -0,0 +1,42 @@ +package transactions + +import ( + "bytes" + "strings" + "testing" + + "github.com/sumup/sumup-cli/internal/app" +) + +func TestRenderRefundResultWritesStatusMessageInHumanMode(t *testing.T) { + var statusOut bytes.Buffer + + appCtx := &app.Context{ + StatusOutput: &statusOut, + } + + if err := renderRefundResult(appCtx); err != nil { + t.Fatalf("renderRefundResult() error = %v", err) + } + + if !strings.Contains(statusOut.String(), "Transaction refunded") { + t.Fatalf("renderRefundResult() status output = %q, want refund message", statusOut.String()) + } +} + +func TestRenderRefundResultPrintsJSONWhenRequested(t *testing.T) { + var out bytes.Buffer + + appCtx := &app.Context{ + JSONOutput: true, + Output: &out, + } + + if err := renderRefundResult(appCtx); err != nil { + t.Fatalf("renderRefundResult() error = %v", err) + } + + if !strings.Contains(out.String(), `"status": "refunded"`) { + t.Fatalf("renderRefundResult() output = %q, want refunded JSON acknowledgement", out.String()) + } +}