Skip to content

Commit a33e838

Browse files
authored
Merge pull request #1155 from wakatime/bugfix/flag-takes-precedence
2 parents f9bf8d8 + a31a539 commit a33e838

File tree

5 files changed

+358
-262
lines changed

5 files changed

+358
-262
lines changed

cmd/logfile/logfile_test.go

Lines changed: 130 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -19,125 +19,143 @@ 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+
87+
t.Setenv("WAKATIME_HOME", dir)
88+
89+
params, err := logfile.LoadParams(ctx, v)
2590
require.NoError(t, err)
2691

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

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

99+
defer tmpFile.Close()
100+
32101
ctx := context.Background()
33102

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-
}
103+
v := viper.New()
104+
v.Set("log-file", tmpFile.Name())
105+
v.Set("settings.log_file", "otherfolder/wakatime.config.log")
106+
107+
params, err := logfile.LoadParams(ctx, v)
108+
require.NoError(t, err)
109+
110+
assert.Equal(t, tmpFile.Name(), params.File)
111+
}
112+
113+
func TestLoadParams_Metrics_FromConfig(t *testing.T) {
114+
ctx := context.Background()
115+
116+
v := viper.New()
117+
v.Set("settings.metrics", true)
118+
119+
params, err := logfile.LoadParams(ctx, v)
120+
require.NoError(t, err)
121+
122+
assert.True(t, params.Metrics)
123+
}
124+
125+
func TestLoadParams_Metrics_FlagTakesPrecedence(t *testing.T) {
126+
ctx := context.Background()
127+
128+
v := viper.New()
129+
v.Set("metrics", false)
130+
v.Set("settings.metrics", true)
131+
132+
params, err := logfile.LoadParams(ctx, v)
133+
require.NoError(t, err)
134+
135+
assert.False(t, params.Metrics)
136+
}
137+
138+
func TestLoadParams_Verbose_FromConfig(t *testing.T) {
139+
ctx := context.Background()
140+
141+
v := viper.New()
142+
v.Set("settings.debug", true)
143+
144+
params, err := logfile.LoadParams(ctx, v)
145+
require.NoError(t, err)
146+
147+
assert.True(t, params.Verbose)
148+
}
149+
150+
func TestLoadParams_Verbose_FlagTakesPrecedence(t *testing.T) {
151+
ctx := context.Background()
152+
153+
v := viper.New()
154+
v.Set("verbose", false)
155+
v.Set("settings.debug", true)
156+
157+
params, err := logfile.LoadParams(ctx, v)
158+
require.NoError(t, err)
159+
160+
assert.False(t, params.Verbose)
143161
}

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)