Skip to content

Commit 3e96fcd

Browse files
committed
(refactor) make dev-server, login, and sourcemaps commands testable via CallCmd()
Wire NewStartServerCmd, NewLoginCmd, and NewSourcemapsCmd through the existing APIClients struct instead of constructing hardcoded real clients inline. Add dev_server.MockClient and three tests for start_server.go.
1 parent 9b40133 commit 3e96fcd

File tree

3 files changed

+81
-3
lines changed

3 files changed

+81
-3
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package dev_server_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
"github.com/stretchr/testify/require"
8+
9+
"github.com/launchdarkly/ldcli/cmd"
10+
"github.com/launchdarkly/ldcli/internal/analytics"
11+
"github.com/launchdarkly/ldcli/internal/dev_server"
12+
)
13+
14+
func TestStartServerCmd(t *testing.T) {
15+
baseArgs := []string{
16+
"dev-server", "start",
17+
"--access-token", "test-token",
18+
"--project", "test-proj",
19+
"--source", "staging",
20+
}
21+
22+
t.Run("calls RunServer with parsed context JSON", func(t *testing.T) {
23+
mockClient := &dev_server.MockClient{}
24+
_, err := cmd.CallCmd(
25+
t,
26+
cmd.APIClients{DevClient: mockClient},
27+
analytics.NoopClientFn{}.Tracker(),
28+
append(baseArgs, "--context", `{"kind":"user","key":"test-user"}`),
29+
)
30+
31+
require.NoError(t, err)
32+
assert.True(t, mockClient.RunServerCalled)
33+
require.NotNil(t, mockClient.RunServerParams.InitialProjectSettings.Context)
34+
assert.Equal(t, "test-user", mockClient.RunServerParams.InitialProjectSettings.Context.Key())
35+
})
36+
37+
t.Run("calls RunServer with parsed override JSON", func(t *testing.T) {
38+
mockClient := &dev_server.MockClient{}
39+
_, err := cmd.CallCmd(
40+
t,
41+
cmd.APIClients{DevClient: mockClient},
42+
analytics.NoopClientFn{}.Tracker(),
43+
append(baseArgs, "--override", `{"my-flag": true}`),
44+
)
45+
46+
require.NoError(t, err)
47+
assert.True(t, mockClient.RunServerCalled)
48+
assert.Len(t, mockClient.RunServerParams.InitialProjectSettings.Overrides, 1)
49+
})
50+
51+
t.Run("returns error for malformed context JSON", func(t *testing.T) {
52+
mockClient := &dev_server.MockClient{}
53+
_, err := cmd.CallCmd(
54+
t,
55+
cmd.APIClients{DevClient: mockClient},
56+
analytics.NoopClientFn{}.Tracker(),
57+
append(baseArgs, "--context", `not-valid-json`),
58+
)
59+
60+
require.Error(t, err)
61+
assert.False(t, mockClient.RunServerCalled)
62+
})
63+
}

cmd/root.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,10 @@ func NewRootCommand(
201201
configCmd := configcmd.NewConfigCmd(configService, analyticsTrackerFn)
202202
cmd.AddCommand(configCmd.Cmd())
203203
cmd.AddCommand(NewQuickStartCmd(analyticsTrackerFn, clients.EnvironmentsClient, clients.FlagsClient))
204-
cmd.AddCommand(logincmd.NewLoginCmd(resources.NewClient(version)))
204+
cmd.AddCommand(logincmd.NewLoginCmd(clients.ResourcesClient))
205205
cmd.AddCommand(resourcecmd.NewResourcesCmd())
206-
cmd.AddCommand(devcmd.NewDevServerCmd(resources.NewClient(version), analyticsTrackerFn, dev_server.NewClient(version)))
207-
cmd.AddCommand(sourcemapscmd.NewSourcemapsCmd(resources.NewClient(version), analyticsTrackerFn))
206+
cmd.AddCommand(devcmd.NewDevServerCmd(clients.ResourcesClient, analyticsTrackerFn, clients.DevClient))
207+
cmd.AddCommand(sourcemapscmd.NewSourcemapsCmd(clients.ResourcesClient, analyticsTrackerFn))
208208
resourcecmd.AddAllResourceCmds(cmd, clients.ResourcesClient, analyticsTrackerFn)
209209

210210
// add non-generated commands

internal/dev_server/mock_client.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev_server
2+
3+
import "context"
4+
5+
type MockClient struct {
6+
RunServerCalled bool
7+
RunServerParams ServerParams
8+
}
9+
10+
var _ Client = &MockClient{}
11+
12+
func (c *MockClient) RunServer(ctx context.Context, params ServerParams) {
13+
c.RunServerCalled = true
14+
c.RunServerParams = params
15+
}

0 commit comments

Comments
 (0)