Skip to content

Commit 11917c5

Browse files
authored
test: increase test coverage for pkg/version and slackdeps (#409)
* test: increase test coverage for internal/pkg/version and slackdeps * test: rename test functions to follow naming conventions * test: reorder os_test.go functions alphabetically * test: convert Test_Os_Setenv to table-driven tests * fix: handle Unsetenv error return in test cleanup
1 parent 34ac465 commit 11917c5

3 files changed

Lines changed: 225 additions & 0 deletions

File tree

internal/pkg/version/version_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,62 @@ func TestVersion(t *testing.T) {
2828
}
2929

3030
// Test overriding the Version with an environment variable
31+
func Test_Get(t *testing.T) {
32+
tests := map[string]struct {
33+
version string
34+
expected string
35+
}{
36+
"adds v prefix when missing": {
37+
version: "1.2.3",
38+
expected: "v1.2.3",
39+
},
40+
"keeps v prefix when present": {
41+
version: "v1.2.3",
42+
expected: "v1.2.3",
43+
},
44+
"handles empty string": {
45+
version: "",
46+
expected: "",
47+
},
48+
"handles version with pre-release": {
49+
version: "1.0.0-beta",
50+
expected: "v1.0.0-beta",
51+
},
52+
}
53+
for name, tc := range tests {
54+
t.Run(name, func(t *testing.T) {
55+
original := Version
56+
defer func() { Version = original }()
57+
Version = tc.version
58+
assert.Equal(t, tc.expected, Get())
59+
})
60+
}
61+
}
62+
63+
func Test_Raw(t *testing.T) {
64+
tests := map[string]struct {
65+
version string
66+
expected string
67+
}{
68+
"returns version unchanged with v prefix": {
69+
version: "v1.2.3",
70+
expected: "v1.2.3",
71+
},
72+
"returns version unchanged without v prefix": {
73+
version: "1.2.3",
74+
expected: "1.2.3",
75+
},
76+
}
77+
for name, tc := range tests {
78+
t.Run(name, func(t *testing.T) {
79+
original := Version
80+
defer func() { Version = original }()
81+
Version = tc.version
82+
assert.Equal(t, tc.expected, Raw())
83+
})
84+
}
85+
}
86+
3187
func Test_EnvTestVersion(t *testing.T) {
3288
// Setup
3389
var _EnvTestVersion = os.Getenv(EnvTestVersion)

internal/slackdeps/browser_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ import (
2424
"github.com/stretchr/testify/require"
2525
)
2626

27+
func Test_NewBrowser(t *testing.T) {
28+
t.Run("returns a GoBrowser with the provided writer", func(t *testing.T) {
29+
buff := bytes.Buffer{}
30+
b := NewBrowser(&buff)
31+
assert.NotNil(t, b)
32+
assert.Equal(t, &buff, b.out)
33+
})
34+
}
35+
2736
func TestBrowserOpenURL(t *testing.T) {
2837
t.Run("print the url if opening the browser fails", func(t *testing.T) {
2938
path := os.Getenv("PATH")

internal/slackdeps/os_test.go

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package slackdeps
1616

1717
import (
18+
"os"
1819
"testing"
1920

2021
"github.com/stretchr/testify/require"
@@ -81,3 +82,162 @@ func Test_Os_SetExecutionDir(t *testing.T) {
8182
})
8283
}
8384
}
85+
86+
func Test_Os_Getenv(t *testing.T) {
87+
tests := map[string]struct {
88+
key string
89+
value string
90+
expected string
91+
}{
92+
"returns set env var": {
93+
key: "SLACK_TEST_OS_GETENV",
94+
value: "hello",
95+
expected: "hello",
96+
},
97+
"returns empty for unset env var": {
98+
key: "SLACK_TEST_OS_GETENV_UNSET",
99+
expected: "",
100+
},
101+
}
102+
for name, tc := range tests {
103+
t.Run(name, func(t *testing.T) {
104+
o := NewOs()
105+
if tc.value != "" {
106+
t.Setenv(tc.key, tc.value)
107+
}
108+
require.Equal(t, tc.expected, o.Getenv(tc.key))
109+
})
110+
}
111+
}
112+
113+
func Test_Os_Getwd(t *testing.T) {
114+
o := NewOs()
115+
dir, err := o.Getwd()
116+
require.NoError(t, err)
117+
require.NotEmpty(t, dir)
118+
}
119+
120+
func Test_Os_Glob(t *testing.T) {
121+
o := NewOs()
122+
// Create a temp file to glob for
123+
tmpDir := t.TempDir()
124+
f, err := os.CreateTemp(tmpDir, "glob_test_*.txt")
125+
require.NoError(t, err)
126+
f.Close()
127+
128+
matches, err := o.Glob(tmpDir + "/*.txt")
129+
require.NoError(t, err)
130+
require.NotEmpty(t, matches)
131+
}
132+
133+
func Test_Os_IsNotExist(t *testing.T) {
134+
tests := map[string]struct {
135+
err error
136+
expected bool
137+
}{
138+
"returns true for os.ErrNotExist": {
139+
err: os.ErrNotExist,
140+
expected: true,
141+
},
142+
"returns false for other errors": {
143+
err: os.ErrPermission,
144+
expected: false,
145+
},
146+
"returns false for nil": {
147+
err: nil,
148+
expected: false,
149+
},
150+
}
151+
for name, tc := range tests {
152+
t.Run(name, func(t *testing.T) {
153+
o := NewOs()
154+
require.Equal(t, tc.expected, o.IsNotExist(tc.err))
155+
})
156+
}
157+
}
158+
159+
func Test_Os_LookupEnv(t *testing.T) {
160+
tests := map[string]struct {
161+
key string
162+
value string
163+
setValue bool
164+
expectedValue string
165+
expectedPresent bool
166+
}{
167+
"returns value and true for set env var": {
168+
key: "SLACK_TEST_OS_LOOKUPENV",
169+
value: "present",
170+
setValue: true,
171+
expectedValue: "present",
172+
expectedPresent: true,
173+
},
174+
"returns empty and false for unset env var": {
175+
key: "SLACK_TEST_OS_LOOKUPENV_UNSET",
176+
setValue: false,
177+
expectedValue: "",
178+
expectedPresent: false,
179+
},
180+
}
181+
for name, tc := range tests {
182+
t.Run(name, func(t *testing.T) {
183+
o := NewOs()
184+
if tc.setValue {
185+
t.Setenv(tc.key, tc.value)
186+
}
187+
val, present := o.LookupEnv(tc.key)
188+
require.Equal(t, tc.expectedValue, val)
189+
require.Equal(t, tc.expectedPresent, present)
190+
})
191+
}
192+
}
193+
194+
func Test_Os_Setenv(t *testing.T) {
195+
tests := map[string]struct {
196+
key string
197+
value string
198+
initialValue string
199+
expected string
200+
}{
201+
"sets a new env var": {
202+
key: "SLACK_TEST_OS_SETENV_NEW",
203+
value: "hello",
204+
expected: "hello",
205+
},
206+
"overwrites an existing env var": {
207+
key: "SLACK_TEST_OS_SETENV_OVERWRITE",
208+
value: "updated",
209+
initialValue: "original",
210+
expected: "updated",
211+
},
212+
"sets an empty value": {
213+
key: "SLACK_TEST_OS_SETENV_EMPTY",
214+
value: "",
215+
expected: "",
216+
},
217+
}
218+
for name, tc := range tests {
219+
t.Run(name, func(t *testing.T) {
220+
o := NewOs()
221+
if tc.initialValue != "" {
222+
t.Setenv(tc.key, tc.initialValue)
223+
}
224+
err := o.Setenv(tc.key, tc.value)
225+
require.NoError(t, err)
226+
require.Equal(t, tc.expected, o.Getenv(tc.key))
227+
t.Cleanup(func() { _ = o.Unsetenv(tc.key) })
228+
})
229+
}
230+
}
231+
232+
func Test_Os_Stdout(t *testing.T) {
233+
o := NewOs()
234+
stdout := o.Stdout()
235+
require.NotNil(t, stdout)
236+
}
237+
238+
func Test_Os_UserHomeDir(t *testing.T) {
239+
o := NewOs()
240+
home, err := o.UserHomeDir()
241+
require.NoError(t, err)
242+
require.NotEmpty(t, home)
243+
}

0 commit comments

Comments
 (0)