summaryrefslogtreecommitdiff
path: root/internal/cli/timer_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-03 22:48:26 +0200
committerPaul Buetow <paul@buetow.org>2026-03-03 22:48:26 +0200
commit212182216ce42e51da21541f39d485ae11fe5c4c (patch)
treecc3572b3d948aa73c1bb5954e7a01ebdcae47eb3 /internal/cli/timer_test.go
parent0906167aaed5dfab38cefe3fd001187a9c44006e (diff)
Task 352: add timer cobra subcommands
Diffstat (limited to 'internal/cli/timer_test.go')
-rw-r--r--internal/cli/timer_test.go84
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("")
+ })
+}