Skip to content

Commit 818bc53

Browse files
FabienTregannywilken
authored andcommitted
Break out test into subtests. (#540)
This allow the test tools to show individuals reports. * Breaks out TestConfigure into subtests. * Breaks out TestPathType into subtests. * Breaks out TestNewRequestSetsDefaultHeaders into subtests. * Breaks out TestIsUpToDate into subtests. * Breaks out TestUpgrade into subtests. * Breaks out TestVersionUpdateCheck into subtests. * Breaks out TestQuestion into subtests. * Breaks out TestSelectionPick into subtests. * Breaks out TestTrackIgnoreString into subtests. * Breaks out TestNormalizeWorkspace into subtests. * Breaks out TestSolutionString into subtests There is currently no description for the tests: only in and expected out values, * Breaks out TestNewTransmission into subtests. * Breaks out TestLocateErrors into subtests. * Breaks out TestDownload into subtests. * Refactors TestDownload.
1 parent eb19ecd commit 818bc53

15 files changed

+281
-206
lines changed

api/client_test.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,20 @@ func TestNewRequestSetsDefaultHeaders(t *testing.T) {
1818

1919
UserAgent = "BogusAgent"
2020

21-
tests := []struct {
21+
testCases := []struct {
22+
desc string
2223
client *Client
2324
auth string
2425
contentType string
2526
}{
2627
{
27-
// Use defaults.
28+
desc: "User defaults",
2829
client: &Client{},
2930
auth: "",
3031
contentType: "application/json",
3132
},
3233
{
33-
// Override defaults.
34+
desc: "Override defaults",
3435
client: &Client{
3536
UserConfig: &config.UserConfig{Token: "abc123"},
3637
ContentType: "bogus",
@@ -40,12 +41,14 @@ func TestNewRequestSetsDefaultHeaders(t *testing.T) {
4041
},
4142
}
4243

43-
for _, test := range tests {
44-
req, err := test.client.NewRequest("GET", ts.URL, nil)
45-
assert.NoError(t, err)
46-
assert.Equal(t, "BogusAgent", req.Header.Get("User-Agent"))
47-
assert.Equal(t, test.contentType, req.Header.Get("Content-Type"))
48-
assert.Equal(t, test.auth, req.Header.Get("Authorization"))
44+
for _, tc := range testCases {
45+
t.Run(tc.desc, func(t *testing.T) {
46+
req, err := tc.client.NewRequest("GET", ts.URL, nil)
47+
assert.NoError(t, err)
48+
assert.Equal(t, "BogusAgent", req.Header.Get("User-Agent"))
49+
assert.Equal(t, tc.contentType, req.Header.Get("Content-Type"))
50+
assert.Equal(t, tc.auth, req.Header.Get("Authorization"))
51+
})
4952
}
5053
}
5154

cli/cli_test.go

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,46 +10,49 @@ import (
1010
)
1111

1212
func TestIsUpToDate(t *testing.T) {
13-
tests := []struct {
13+
testCases := []struct {
14+
desc string
1415
cliVersion string
1516
releaseTag string
1617
ok bool
1718
}{
1819
{
19-
// It returns false for versions less than release.
20+
desc: "It returns false for versions less than release.",
2021
cliVersion: "1.0.0",
2122
releaseTag: "v1.0.1",
2223
ok: false,
2324
},
2425
{
25-
// It returns false for pre-release versions of release.
26+
desc: "It returns false for pre-release versions of release.",
2627
cliVersion: "1.0.1-alpha.1",
2728
releaseTag: "v1.0.1",
2829
ok: false,
2930
},
3031
{
31-
// It returns true for versions equal to release.
32+
desc: "It returns true for versions equal to release.",
3233
cliVersion: "2.0.1",
3334
releaseTag: "v2.0.1",
3435
ok: true,
3536
},
3637
{
37-
// It returns true for versions greater than release.
38+
desc: "It returns true for versions greater than release.",
3839
cliVersion: "2.0.2",
3940
releaseTag: "v2.0.1",
4041
ok: true,
4142
},
4243
}
4344

44-
for _, test := range tests {
45-
c := &CLI{
46-
Version: test.cliVersion,
47-
LatestRelease: &Release{TagName: test.releaseTag},
48-
}
45+
for _, tc := range testCases {
46+
t.Run(tc.desc, func(t *testing.T) {
47+
c := &CLI{
48+
Version: tc.cliVersion,
49+
LatestRelease: &Release{TagName: tc.releaseTag},
50+
}
4951

50-
ok, err := c.IsUpToDate()
51-
assert.NoError(t, err)
52-
assert.Equal(t, test.ok, ok, test.cliVersion)
52+
ok, err := c.IsUpToDate()
53+
assert.NoError(t, err)
54+
assert.Equal(t, tc.ok, ok, tc.cliVersion)
55+
})
5356
}
5457
}
5558

cmd/configure_test.go

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,76 +7,85 @@ import (
77
"github.com/stretchr/testify/assert"
88
)
99

10+
type testCase struct {
11+
desc string
12+
args []string
13+
existingUsrCfg *config.UserConfig
14+
expectedUsrCfg *config.UserConfig
15+
existingAPICfg *config.APIConfig
16+
expectedAPICfg *config.APIConfig
17+
}
18+
1019
func TestConfigure(t *testing.T) {
11-
tests := []struct {
12-
desc string
13-
args []string
14-
existingUsrCfg *config.UserConfig
15-
expectedUsrCfg *config.UserConfig
16-
existingAPICfg *config.APIConfig
17-
expectedAPICfg *config.APIConfig
18-
}{
19-
{
20+
testCases := []testCase{
21+
testCase{
2022
desc: "It writes the flags when there is no config file.",
2123
args: []string{"fakeapp", "configure", "--token", "a", "--workspace", "/a", "--api", "http://example.com"},
2224
existingUsrCfg: nil,
2325
expectedUsrCfg: &config.UserConfig{Token: "a", Workspace: "/a"},
2426
existingAPICfg: nil,
2527
expectedAPICfg: &config.APIConfig{BaseURL: "http://example.com"},
2628
},
27-
{
29+
testCase{
2830
desc: "It overwrites the flags in the config file.",
2931
args: []string{"fakeapp", "configure", "--token", "b", "--workspace", "/b", "--api", "http://example.com/v2"},
3032
existingUsrCfg: &config.UserConfig{Token: "token-b", Workspace: "/workspace-b"},
3133
expectedUsrCfg: &config.UserConfig{Token: "b", Workspace: "/b"},
3234
existingAPICfg: &config.APIConfig{BaseURL: "http://example.com/v1"},
3335
expectedAPICfg: &config.APIConfig{BaseURL: "http://example.com/v2"},
3436
},
35-
{
37+
testCase{
3638
desc: "It overwrites the flags that are passed, without losing the ones that are not.",
3739
args: []string{"fakeapp", "configure", "--token", "c"},
3840
existingUsrCfg: &config.UserConfig{Token: "token-c", Workspace: "/workspace-c"},
3941
expectedUsrCfg: &config.UserConfig{Token: "c", Workspace: "/workspace-c"},
4042
},
41-
{
43+
testCase{
4244
desc: "It gets the default API base URL.",
4345
args: []string{"fakeapp", "configure"},
4446
existingAPICfg: &config.APIConfig{},
4547
expectedAPICfg: &config.APIConfig{BaseURL: "https://v2.exercism.io/api/v1"},
4648
},
4749
}
4850

49-
for _, test := range tests {
51+
for _, tc := range testCases {
52+
t.Run(tc.desc, makeTest(tc))
53+
}
54+
}
55+
56+
func makeTest(tc testCase) func(*testing.T) {
57+
58+
return func(t *testing.T) {
5059
cmdTest := &CommandTest{
5160
Cmd: configureCmd,
5261
InitFn: initConfigureCmd,
53-
Args: test.args,
62+
Args: tc.args,
5463
}
5564
cmdTest.Setup(t)
5665
defer cmdTest.Teardown(t)
5766

58-
if test.existingUsrCfg != nil {
67+
if tc.existingUsrCfg != nil {
5968
// Write a fake config.
6069
cfg := config.NewEmptyUserConfig()
61-
cfg.Token = test.existingUsrCfg.Token
62-
cfg.Workspace = test.existingUsrCfg.Workspace
70+
cfg.Token = tc.existingUsrCfg.Token
71+
cfg.Workspace = tc.existingUsrCfg.Workspace
6372
err := cfg.Write()
64-
assert.NoError(t, err, test.desc)
73+
assert.NoError(t, err, tc.desc)
6574
}
6675

6776
cmdTest.App.Execute()
6877

69-
if test.expectedUsrCfg != nil {
78+
if tc.expectedUsrCfg != nil {
7079
usrCfg, err := config.NewUserConfig()
71-
assert.NoError(t, err, test.desc)
72-
assert.Equal(t, test.expectedUsrCfg.Token, usrCfg.Token, test.desc)
73-
assert.Equal(t, test.expectedUsrCfg.Workspace, usrCfg.Workspace, test.desc)
80+
assert.NoError(t, err, tc.desc)
81+
assert.Equal(t, tc.expectedUsrCfg.Token, usrCfg.Token, tc.desc)
82+
assert.Equal(t, tc.expectedUsrCfg.Workspace, usrCfg.Workspace, tc.desc)
7483
}
7584

76-
if test.expectedAPICfg != nil {
85+
if tc.expectedAPICfg != nil {
7786
apiCfg, err := config.NewAPIConfig()
78-
assert.NoError(t, err, test.desc)
79-
assert.Equal(t, test.expectedAPICfg.BaseURL, apiCfg.BaseURL, test.desc)
87+
assert.NoError(t, err, tc.desc)
88+
assert.Equal(t, tc.expectedAPICfg.BaseURL, apiCfg.BaseURL, tc.desc)
8089
}
8190
}
8291
}

0 commit comments

Comments
 (0)