Skip to content

Commit 604df3a

Browse files
committed
Refactor FirstNonEmptyBool to accept false values
1 parent f9bf8d8 commit 604df3a

File tree

5 files changed

+273
-203
lines changed

5 files changed

+273
-203
lines changed

cmd/logfile/logfile_test.go

Lines changed: 129 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -19,125 +19,142 @@ func TestLoadParams(t *testing.T) {
1919

2020
defer tmpFile.Close()
2121

22+
ctx := context.Background()
23+
24+
v := viper.New()
25+
v.Set("log-file", tmpFile.Name())
26+
v.Set("log-to-stdout", true)
27+
v.Set("metrics", true)
28+
v.Set("verbose", true)
29+
v.Set("send-diagnostics-on-errors", true)
30+
31+
params, err := logfile.LoadParams(ctx, v)
32+
require.NoError(t, err)
33+
34+
assert.True(t, params.Verbose)
35+
assert.True(t, params.Metrics)
36+
assert.True(t, params.ToStdout)
37+
assert.True(t, params.SendDiagsOnErrors)
38+
assert.Equal(t, tmpFile.Name(), params.File)
39+
}
40+
41+
func TestLoadParams_LogFile_FlagDeprecated(t *testing.T) {
42+
tmpFile, err := os.CreateTemp(t.TempDir(), "")
43+
require.NoError(t, err)
44+
45+
defer tmpFile.Close()
46+
47+
ctx := context.Background()
48+
49+
v := viper.New()
50+
v.Set("logfile", tmpFile.Name())
51+
52+
params, err := logfile.LoadParams(ctx, v)
53+
require.NoError(t, err)
54+
55+
assert.Equal(t, tmpFile.Name(), params.File)
56+
}
57+
58+
func TestLoadParams_LogFile_FromConfig(t *testing.T) {
59+
tmpFile, err := os.CreateTemp(t.TempDir(), "")
60+
require.NoError(t, err)
61+
62+
defer tmpFile.Close()
63+
64+
ctx := context.Background()
65+
66+
v := viper.New()
67+
v.Set("settings.log_file", tmpFile.Name())
68+
69+
params, err := logfile.LoadParams(ctx, v)
70+
require.NoError(t, err)
71+
72+
assert.Equal(t, tmpFile.Name(), params.File)
73+
}
74+
75+
func TestLoadParams_LogFile_FromEnvVar(t *testing.T) {
76+
tmpFile, err := os.CreateTemp(t.TempDir(), "")
77+
require.NoError(t, err)
78+
79+
defer tmpFile.Close()
80+
2281
dir, _ := filepath.Split(tmpFile.Name())
2382

24-
logFile, err := os.Create(filepath.Join(dir, "wakatime.log"))
83+
ctx := context.Background()
84+
85+
v := viper.New()
86+
t.Setenv("WAKATIME_HOME", dir)
87+
88+
params, err := logfile.LoadParams(ctx, v)
2589
require.NoError(t, err)
2690

27-
defer logFile.Close()
91+
assert.Equal(t, filepath.Join(dir, "wakatime.log"), params.File)
92+
}
2893

29-
home, err := os.UserHomeDir()
94+
func TestLoadParams_LogFile_FlagTakesPrecedence(t *testing.T) {
95+
tmpFile, err := os.CreateTemp(t.TempDir(), "")
3096
require.NoError(t, err)
3197

98+
defer tmpFile.Close()
99+
32100
ctx := context.Background()
33101

34-
tests := map[string]struct {
35-
EnvVar string
36-
ViperDebug bool
37-
ViperDebugConfig bool
38-
ViperLogFile string
39-
ViperLogFileConfig string
40-
ViperLogFileOld string
41-
ViperMetrics bool
42-
ViperMetricsConfig bool
43-
ViperToStdout bool
44-
Expected logfile.Params
45-
}{
46-
"verbose set": {
47-
ViperDebug: true,
48-
Expected: logfile.Params{
49-
File: filepath.Join(home, ".wakatime", "wakatime.log"),
50-
Verbose: true,
51-
},
52-
},
53-
"verbose from config": {
54-
ViperDebugConfig: true,
55-
Expected: logfile.Params{
56-
File: filepath.Join(home, ".wakatime", "wakatime.log"),
57-
Verbose: true,
58-
},
59-
},
60-
"log file flag takes precedence": {
61-
ViperLogFile: tmpFile.Name(),
62-
ViperLogFileConfig: "otherfolder/wakatime.config.log",
63-
ViperLogFileOld: "otherfolder/wakatime.old.log",
64-
Expected: logfile.Params{
65-
File: tmpFile.Name(),
66-
},
67-
},
68-
"log file deprecated flag takes precedence": {
69-
ViperLogFileConfig: "otherfolder/wakatime.config.log",
70-
ViperLogFileOld: tmpFile.Name(),
71-
Expected: logfile.Params{
72-
File: tmpFile.Name(),
73-
},
74-
},
75-
"log file from config": {
76-
ViperLogFileConfig: tmpFile.Name(),
77-
Expected: logfile.Params{
78-
File: tmpFile.Name(),
79-
},
80-
},
81-
"log file from WAKATIME_HOME": {
82-
EnvVar: dir,
83-
Expected: logfile.Params{
84-
File: filepath.Join(dir, "wakatime.log"),
85-
},
86-
},
87-
"log file from home dir": {
88-
Expected: logfile.Params{
89-
File: filepath.Join(home, ".wakatime", "wakatime.log"),
90-
},
91-
},
92-
"metrics set": {
93-
ViperMetrics: true,
94-
Expected: logfile.Params{
95-
File: filepath.Join(home, ".wakatime", "wakatime.log"),
96-
Metrics: true,
97-
},
98-
},
99-
"metrics from config": {
100-
ViperMetricsConfig: true,
101-
Expected: logfile.Params{
102-
File: filepath.Join(home, ".wakatime", "wakatime.log"),
103-
Metrics: true,
104-
},
105-
},
106-
"metrics flag takes precedence": {
107-
ViperMetrics: true,
108-
ViperMetricsConfig: false,
109-
Expected: logfile.Params{
110-
File: filepath.Join(home, ".wakatime", "wakatime.log"),
111-
Metrics: true,
112-
},
113-
},
114-
"log to stdout": {
115-
ViperToStdout: true,
116-
Expected: logfile.Params{
117-
File: filepath.Join(home, ".wakatime", "wakatime.log"),
118-
ToStdout: true,
119-
},
120-
},
121-
}
122-
123-
for name, test := range tests {
124-
t.Run(name, func(t *testing.T) {
125-
v := viper.New()
126-
v.Set("log-file", test.ViperLogFile)
127-
v.Set("logfile", test.ViperLogFileOld)
128-
v.Set("log-to-stdout", test.ViperToStdout)
129-
v.Set("metrics", test.ViperMetrics)
130-
v.Set("settings.metrics", test.ViperMetricsConfig)
131-
v.Set("settings.log_file", test.ViperLogFileConfig)
132-
v.Set("settings.debug", test.ViperDebug)
133-
v.Set("verbose", test.ViperDebugConfig)
134-
135-
t.Setenv("WAKATIME_HOME", test.EnvVar)
136-
137-
params, err := logfile.LoadParams(ctx, v)
138-
require.NoError(t, err)
139-
140-
assert.Equal(t, test.Expected, params)
141-
})
142-
}
102+
v := viper.New()
103+
v.Set("log-file", tmpFile.Name())
104+
v.Set("settings.log_file", "otherfolder/wakatime.config.log")
105+
106+
params, err := logfile.LoadParams(ctx, v)
107+
require.NoError(t, err)
108+
109+
assert.Equal(t, tmpFile.Name(), params.File)
110+
}
111+
112+
func TestLoadParams_Metrics_FromConfig(t *testing.T) {
113+
ctx := context.Background()
114+
115+
v := viper.New()
116+
v.Set("settings.metrics", true)
117+
118+
params, err := logfile.LoadParams(ctx, v)
119+
require.NoError(t, err)
120+
121+
assert.True(t, params.Metrics)
122+
}
123+
124+
func TestLoadParams_Metrics_FlagTakesPrecedence(t *testing.T) {
125+
ctx := context.Background()
126+
127+
v := viper.New()
128+
v.Set("metrics", false)
129+
v.Set("settings.metrics", true)
130+
131+
params, err := logfile.LoadParams(ctx, v)
132+
require.NoError(t, err)
133+
134+
assert.False(t, params.Metrics)
135+
}
136+
137+
func TestLoadParams_Verbose_FromConfig(t *testing.T) {
138+
ctx := context.Background()
139+
140+
v := viper.New()
141+
v.Set("settings.debug", true)
142+
143+
params, err := logfile.LoadParams(ctx, v)
144+
require.NoError(t, err)
145+
146+
assert.True(t, params.Verbose)
147+
}
148+
149+
func TestLoadParams_Verbose_FlagTakesPrecedence(t *testing.T) {
150+
ctx := context.Background()
151+
152+
v := viper.New()
153+
v.Set("verbose", false)
154+
v.Set("settings.debug", true)
155+
156+
params, err := logfile.LoadParams(ctx, v)
157+
require.NoError(t, err)
158+
159+
assert.False(t, params.Verbose)
143160
}

cmd/params/params.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ func LoadHeartbeatParams(ctx context.Context, v *viper.Viper) (Heartbeat, error)
388388
return Heartbeat{}, errors.New("failed to retrieve entity")
389389
}
390390

391-
entityExpanded, err := homedir.Expand(entity)
391+
entity, err := homedir.Expand(entity)
392392
if err != nil {
393393
return Heartbeat{}, fmt.Errorf("failed expanding entity: %s", err)
394394
}
@@ -463,7 +463,7 @@ func LoadHeartbeatParams(ctx context.Context, v *viper.Viper) (Heartbeat, error)
463463
return Heartbeat{
464464
Category: category,
465465
CursorPosition: cursorPosition,
466-
Entity: entityExpanded,
466+
Entity: entity,
467467
ExtraHeartbeats: extraHeartbeats,
468468
EntityType: entityType,
469469
GuessLanguage: vipertools.FirstNonEmptyBool(v, "guess-language", "settings.guess_language"),

0 commit comments

Comments
 (0)