diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-03 22:48:26 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-03 22:48:26 +0200 |
| commit | 212182216ce42e51da21541f39d485ae11fe5c4c (patch) | |
| tree | cc3572b3d948aa73c1bb5954e7a01ebdcae47eb3 /internal/cli/timer_test.go | |
| parent | 0906167aaed5dfab38cefe3fd001187a9c44006e (diff) | |
Task 352: add timer cobra subcommands
Diffstat (limited to 'internal/cli/timer_test.go')
| -rw-r--r-- | internal/cli/timer_test.go | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/internal/cli/timer_test.go b/internal/cli/timer_test.go new file mode 100644 index 0000000..dead994 --- /dev/null +++ b/internal/cli/timer_test.go @@ -0,0 +1,84 @@ +package cli + +import ( + "bytes" + "path/filepath" + "strings" + "testing" + + timrTimer "codeberg.org/snonux/timr/internal/timer" +) + +func TestTimerStartAndStopCommands(t *testing.T) { + setupTimerState(t) + + var startOut bytes.Buffer + startCmd := NewRootCmd() + startCmd.SetOut(&startOut) + startCmd.SetErr(&startOut) + startCmd.SetArgs([]string{"timer", "start"}) + if err := startCmd.Execute(); err != nil { + t.Fatalf("timer start execute error = %v", err) + } + if !strings.Contains(startOut.String(), "Timer started.") { + t.Fatalf("timer start output = %q", startOut.String()) + } + + var stopOut bytes.Buffer + stopCmd := NewRootCmd() + stopCmd.SetOut(&stopOut) + stopCmd.SetErr(&stopOut) + stopCmd.SetArgs([]string{"timer", "stop"}) + if err := stopCmd.Execute(); err != nil { + t.Fatalf("timer stop execute error = %v", err) + } + if !strings.Contains(stopOut.String(), "Timer stopped.") { + t.Fatalf("timer stop output = %q", stopOut.String()) + } +} + +func TestTimerContinueAtZero(t *testing.T) { + setupTimerState(t) + + var out bytes.Buffer + cmd := NewRootCmd() + cmd.SetOut(&out) + cmd.SetErr(&out) + cmd.SetArgs([]string{"timer", "continue"}) + + if err := cmd.Execute(); err != nil { + t.Fatalf("timer continue execute error = %v", err) + } + + if !strings.Contains(out.String(), "Timer is at 0, cannot continue.") { + t.Fatalf("timer continue output = %q", out.String()) + } +} + +func TestTimerStatusFlagConflict(t *testing.T) { + setupTimerState(t) + + var out bytes.Buffer + cmd := NewRootCmd() + cmd.SetOut(&out) + cmd.SetErr(&out) + cmd.SetArgs([]string{"timer", "status", "--raw", "--raw-minutes"}) + + err := cmd.Execute() + if err == nil { + t.Fatal("timer status conflict error = nil, want error") + } + if !strings.Contains(err.Error(), "--raw") { + t.Fatalf("timer status conflict error = %v", err) + } +} + +func setupTimerState(t *testing.T) { + t.Helper() + + tempDir := t.TempDir() + timrTimer.SetStateFilePathOverride(filepath.Join(tempDir, ".timr_state")) + t.Cleanup(func() { + timrTimer.SetStateFilePathOverride("") + }) +} |
