1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
package tui
import (
"testing"
"codeberg.org/snonux/timr/internal/config"
"codeberg.org/snonux/timr/internal/worktime"
tea "github.com/charmbracelet/bubbletea"
)
func TestTimerModelToggleWorkLogin(t *testing.T) {
setupTimerStateForTUI(t)
dbDir := t.TempDir()
cfg := config.Default()
cfg.WorktimeDBDir = dbDir
cfg.Hostname = "host-a"
model, err := NewTimerModel("doom", cfg)
if err != nil {
t.Fatalf("NewTimerModel() error = %v", err)
}
if !model.work.enabled {
t.Fatal("work integration should be enabled")
}
modelAny, _ := model.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'l'}})
model = modelAny.(TimerModel)
if !model.work.loggedIn {
t.Fatal("work should be logged in after first l")
}
modelAny, _ = model.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'l'}})
model = modelAny.(TimerModel)
if model.work.loggedIn {
t.Fatal("work should be logged out after second l")
}
entries, err := worktime.LoadAll(dbDir)
if err != nil {
t.Fatalf("LoadAll() error = %v", err)
}
if len(entries) < 2 {
t.Fatalf("entries len = %d, want at least 2", len(entries))
}
}
func TestTimerModelFontCycling(t *testing.T) {
setupTimerStateForTUI(t)
model, err := NewTimerModel("doom", config.Default())
if err != nil {
t.Fatalf("NewTimerModel() error = %v", err)
}
originalFont := model.font
modelAny, _ := model.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'f'}})
model = modelAny.(TimerModel)
if model.font == originalFont {
t.Fatalf("font did not change after f: %q", model.font)
}
}
func TestTimerModelWorkToggleWhenDisabled(t *testing.T) {
setupTimerStateForTUI(t)
cfg := config.Default()
cfg.WorktimeDBDir = ""
model, err := NewTimerModel("doom", cfg)
if err != nil {
t.Fatalf("NewTimerModel() error = %v", err)
}
modelAny, _ := model.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'l'}})
model = modelAny.(TimerModel)
if model.work.status != "work integration disabled" {
t.Fatalf("workStatus = %q, want work integration disabled", model.work.status)
}
}
func setupTimerStateForTUI(t *testing.T) {
t.Helper()
tempDir := t.TempDir()
t.Setenv("XDG_CONFIG_HOME", tempDir)
t.Setenv("HOME", tempDir)
}
|