Skip to content

Commit baedf27

Browse files
authored
test: align package boundaries and assertions (#61)
1 parent d83d436 commit baedf27

17 files changed

+409
-443
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package context
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
"github.com/stretchr/testify/require"
8+
sumup "github.com/sumup/sumup-go"
9+
)
10+
11+
func TestModelUpdate(t *testing.T) {
12+
t.Run("ignores stale search results", func(t *testing.T) {
13+
currentItems := []sumup.Membership{{Resource: sumup.MembershipResource{ID: "current"}}}
14+
m := model{
15+
currentLevel: navigationLevel{memberships: currentItems},
16+
displayed: currentItems,
17+
loading: true,
18+
activeSearchID: 2,
19+
}
20+
21+
updated, cmd := m.Update(searchResultMsg{
22+
requestID: 1,
23+
memberships: []sumup.Membership{{Resource: sumup.MembershipResource{ID: "stale"}}},
24+
})
25+
26+
assert.Nil(t, cmd)
27+
28+
got, ok := updated.(model)
29+
require.True(t, ok)
30+
assert.True(t, got.loading)
31+
require.NotEmpty(t, got.displayed)
32+
assert.Equal(t, "current", got.displayed[0].Resource.ID)
33+
})
34+
35+
t.Run("applies active search results", func(t *testing.T) {
36+
m := model{
37+
currentLevel: navigationLevel{},
38+
displayed: nil,
39+
loading: true,
40+
activeSearchID: 3,
41+
}
42+
43+
updated, cmd := m.Update(searchResultMsg{
44+
requestID: 3,
45+
memberships: []sumup.Membership{{Resource: sumup.MembershipResource{ID: "fresh"}}},
46+
})
47+
48+
assert.Nil(t, cmd)
49+
50+
got, ok := updated.(model)
51+
require.True(t, ok)
52+
assert.False(t, got.loading)
53+
require.Len(t, got.displayed, 1)
54+
assert.Equal(t, "fresh", got.displayed[0].Resource.ID)
55+
})
56+
}

internal/commands/context/context_test.go

Lines changed: 0 additions & 58 deletions
This file was deleted.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package members
2+
3+
import (
4+
"bytes"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
"github.com/stretchr/testify/require"
9+
"github.com/sumup/sumup-cli/internal/app"
10+
)
11+
12+
func TestRenderDeleteMemberResult(t *testing.T) {
13+
t.Run("prints json acknowledgement when requested", func(t *testing.T) {
14+
var out bytes.Buffer
15+
16+
appCtx := &app.Context{
17+
JSONOutput: true,
18+
Output: &out,
19+
}
20+
21+
err := renderDeleteMemberResult(appCtx)
22+
23+
require.NoError(t, err)
24+
assert.Contains(t, out.String(), `"status": "deleted"`)
25+
})
26+
27+
t.Run("writes status message in human mode", func(t *testing.T) {
28+
var statusOut bytes.Buffer
29+
30+
appCtx := &app.Context{StatusOutput: &statusOut}
31+
32+
err := renderDeleteMemberResult(appCtx)
33+
34+
require.NoError(t, err)
35+
assert.Contains(t, statusOut.String(), "Member deleted")
36+
})
37+
}

internal/commands/members/members_output_test.go

Lines changed: 0 additions & 42 deletions
This file was deleted.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package merchants
2+
3+
import (
4+
"bytes"
5+
"testing"
6+
"time"
7+
8+
"github.com/stretchr/testify/assert"
9+
"github.com/stretchr/testify/require"
10+
sumup "github.com/sumup/sumup-go"
11+
12+
"github.com/sumup/sumup-cli/internal/app"
13+
)
14+
15+
func TestRenderMerchant(t *testing.T) {
16+
t.Run("renders merchant and business profile details", func(t *testing.T) {
17+
var out bytes.Buffer
18+
createdAt := time.Date(2026, time.March, 27, 10, 0, 0, 0, time.UTC)
19+
updatedAt := createdAt.Add(2 * time.Hour)
20+
alias := "Main account"
21+
businessName := "Example Shop"
22+
businessEmail := "shop@example.com"
23+
businessWebsite := "https://example.com"
24+
sandbox := true
25+
26+
err := renderMerchant(&app.Context{Output: &out, ExactTimestamps: true}, &sumup.Merchant{
27+
MerchantCode: "M123",
28+
Alias: &alias,
29+
Country: "DE",
30+
DefaultCurrency: "EUR",
31+
DefaultLocale: "de-DE",
32+
Sandbox: &sandbox,
33+
CreatedAt: createdAt,
34+
UpdatedAt: updatedAt,
35+
BusinessProfile: &sumup.BusinessProfile{
36+
Name: &businessName,
37+
Email: &businessEmail,
38+
Website: &businessWebsite,
39+
},
40+
})
41+
42+
require.NoError(t, err)
43+
44+
rendered := out.String()
45+
for _, want := range []string{"M123", "Main account", "Example Shop", "shop@example.com", "https://example.com"} {
46+
assert.Contains(t, rendered, want)
47+
}
48+
})
49+
}

internal/commands/merchants/merchants_test.go

Lines changed: 0 additions & 48 deletions
This file was deleted.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package readers
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
"github.com/stretchr/testify/require"
8+
sumup "github.com/sumup/sumup-go"
9+
"github.com/urfave/cli/v3"
10+
)
11+
12+
func TestNewCommand(t *testing.T) {
13+
t.Run("reader context-aware commands do not require merchant code", func(t *testing.T) {
14+
cmd := NewCommand()
15+
16+
for _, name := range []string{"get", "update", "terminate"} {
17+
subcommand := findSubcommand(t, cmd, name)
18+
flag := findStringFlag(t, subcommand, "merchant-code")
19+
assert.False(t, flag.Required, "%s merchant-code flag should allow context fallback", name)
20+
}
21+
})
22+
}
23+
24+
func TestFormatCreateReaderError(t *testing.T) {
25+
t.Run("wraps sparse problem responses without panicking", func(t *testing.T) {
26+
err := formatCreateReaderError(&sumup.Problem{})
27+
28+
require.Error(t, err)
29+
assert.Contains(t, err.Error(), "create reader:")
30+
})
31+
}
32+
33+
func findSubcommand(t *testing.T, cmd *cli.Command, name string) *cli.Command {
34+
t.Helper()
35+
36+
for _, subcommand := range cmd.Commands {
37+
if subcommand.Name == name {
38+
return subcommand
39+
}
40+
}
41+
42+
require.Failf(t, "subcommand not found", "subcommand %q not found", name)
43+
return nil
44+
}
45+
46+
func findStringFlag(t *testing.T, cmd *cli.Command, name string) *cli.StringFlag {
47+
t.Helper()
48+
49+
for _, flag := range cmd.Flags {
50+
stringFlag, ok := flag.(*cli.StringFlag)
51+
if ok && stringFlag.Name == name {
52+
return stringFlag
53+
}
54+
}
55+
56+
require.Failf(t, "string flag not found", "string flag %q not found on %s", name, cmd.Name)
57+
return nil
58+
}

0 commit comments

Comments
 (0)