Skip to content

Commit 390b969

Browse files
chore: add uncovered test cases for config.WriteFile
Signed-off-by: Sourya Vatsyayan <sourya@deepsource.io>
1 parent 1aa98c9 commit 390b969

2 files changed

Lines changed: 123 additions & 7 deletions

File tree

config/config.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@ import (
1010
)
1111

1212
var (
13-
configDirFn = os.UserHomeDir
14-
readFileFn = os.ReadFile
13+
configDirFn = os.UserHomeDir
14+
readFileFn = os.ReadFile
15+
tomlMarshalFn = toml.Marshal
16+
osMkdirAllFn = os.MkdirAll
17+
osWriteFileFn = os.WriteFile
1518
)
1619

1720
const (
@@ -102,7 +105,7 @@ func GetConfig() (*CLIConfig, error) {
102105

103106
// WriteFile writes the CLI config to file.
104107
func (cfg *CLIConfig) WriteFile() error {
105-
data, err := toml.Marshal(cfg)
108+
data, err := tomlMarshalFn(cfg)
106109
if err != nil {
107110
return err
108111
}
@@ -112,7 +115,7 @@ func (cfg *CLIConfig) WriteFile() error {
112115
return err
113116
}
114117

115-
if err := os.MkdirAll(configDir, configDirPermissions); err != nil {
118+
if err := osMkdirAllFn(configDir, configDirPermissions); err != nil {
116119
return err
117120
}
118121

@@ -123,7 +126,7 @@ func (cfg *CLIConfig) WriteFile() error {
123126

124127
// Write file with restricted permissions
125128
const configFilePermissions os.FileMode = 0600
126-
return os.WriteFile(path, data, configFilePermissions)
129+
return osWriteFileFn(path, data, configFilePermissions)
127130
}
128131

129132
// Deletes the config during logging out user

config/config_test.go

Lines changed: 115 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package config
22

33
import (
4+
"os"
45
"testing"
56
"time"
67

@@ -69,6 +70,118 @@ func TestVerifyAuthentication(t *testing.T) {
6970
}
7071

7172
func TestConfigWriteFile(t *testing.T) {
72-
err := cfg.WriteFile()
73-
assert.Nil(t, err)
73+
t.Run("successful write", func(t *testing.T) {
74+
testCfg := CLIConfig{
75+
Host: "deepsource.io",
76+
User: "test",
77+
Token: "test_token",
78+
}
79+
err := testCfg.WriteFile()
80+
assert.Nil(t, err)
81+
})
82+
83+
t.Run("error when tomlMarshal fails", func(t *testing.T) {
84+
// Save original function
85+
originalTomlMarshalFn := tomlMarshalFn
86+
defer func() { tomlMarshalFn = originalTomlMarshalFn }()
87+
88+
// Mock tomlMarshalFn to return an error
89+
tomlMarshalFn = func(v interface{}) ([]byte, error) {
90+
return nil, assert.AnError
91+
}
92+
93+
testCfg := CLIConfig{
94+
Host: "deepsource.io",
95+
User: "test",
96+
Token: "test_token",
97+
}
98+
err := testCfg.WriteFile()
99+
assert.NotNil(t, err)
100+
assert.Equal(t, assert.AnError, err)
101+
})
102+
103+
t.Run("error when configDir fails", func(t *testing.T) {
104+
// Save original function
105+
originalConfigDirFn := configDirFn
106+
defer func() { configDirFn = originalConfigDirFn }()
107+
108+
// Mock configDirFn to return an error
109+
configDirFn = func() (string, error) {
110+
return "", assert.AnError
111+
}
112+
113+
testCfg := CLIConfig{
114+
Host: "deepsource.io",
115+
User: "test",
116+
Token: "test_token",
117+
}
118+
err := testCfg.WriteFile()
119+
assert.NotNil(t, err)
120+
assert.Equal(t, assert.AnError, err)
121+
})
122+
123+
t.Run("error when MkdirAll fails", func(t *testing.T) {
124+
// Save original functions
125+
originalOsMkdirAllFn := osMkdirAllFn
126+
defer func() { osMkdirAllFn = originalOsMkdirAllFn }()
127+
128+
// Mock osMkdirAllFn to return an error
129+
osMkdirAllFn = func(path string, perm os.FileMode) error {
130+
return assert.AnError
131+
}
132+
133+
testCfg := CLIConfig{
134+
Host: "deepsource.io",
135+
User: "test",
136+
Token: "test_token",
137+
}
138+
err := testCfg.WriteFile()
139+
assert.NotNil(t, err)
140+
assert.Equal(t, assert.AnError, err)
141+
})
142+
143+
t.Run("error when configPath fails after MkdirAll", func(t *testing.T) {
144+
// Save original function
145+
originalConfigDirFn := configDirFn
146+
defer func() { configDirFn = originalConfigDirFn }()
147+
148+
// Mock configDirFn to succeed first time (for configDir) but fail second time (for configPath)
149+
callCount := 0
150+
configDirFn = func() (string, error) {
151+
callCount++
152+
if callCount == 1 {
153+
return t.TempDir(), nil
154+
}
155+
return "", assert.AnError
156+
}
157+
158+
testCfg := CLIConfig{
159+
Host: "deepsource.io",
160+
User: "test",
161+
Token: "test_token",
162+
}
163+
err := testCfg.WriteFile()
164+
assert.NotNil(t, err)
165+
assert.Equal(t, assert.AnError, err)
166+
})
167+
168+
t.Run("error when WriteFile fails", func(t *testing.T) {
169+
// Save original function
170+
originalOsWriteFileFn := osWriteFileFn
171+
defer func() { osWriteFileFn = originalOsWriteFileFn }()
172+
173+
// Mock osWriteFileFn to return an error
174+
osWriteFileFn = func(name string, data []byte, perm os.FileMode) error {
175+
return assert.AnError
176+
}
177+
178+
testCfg := CLIConfig{
179+
Host: "deepsource.io",
180+
User: "test",
181+
Token: "test_token",
182+
}
183+
err := testCfg.WriteFile()
184+
assert.NotNil(t, err)
185+
assert.Equal(t, assert.AnError, err)
186+
})
74187
}

0 commit comments

Comments
 (0)