summaryrefslogtreecommitdiff
path: root/internal/timer/operations_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/timer/operations_test.go')
-rw-r--r--internal/timer/operations_test.go137
1 files changed, 137 insertions, 0 deletions
diff --git a/internal/timer/operations_test.go b/internal/timer/operations_test.go
new file mode 100644
index 0000000..39029b0
--- /dev/null
+++ b/internal/timer/operations_test.go
@@ -0,0 +1,137 @@
+package timer
+
+import (
+ "path/filepath"
+ "testing"
+ "time"
+)
+
+// setup sets up a temporary state file for testing.
+func setup(t *testing.T) {
+ t.Helper()
+ tempDir := t.TempDir()
+ stateFilePathOverride = filepath.Join(tempDir, ".timr_state")
+ t.Cleanup(func() {
+ stateFilePathOverride = ""
+ })
+}
+
+func TestStartTimer(t *testing.T) {
+ setup(t)
+
+ // Start the timer
+ msg, err := StartTimer()
+ if err != nil {
+ t.Fatalf("StartTimer() error = %v", err)
+ }
+ if msg != "Timer started." {
+ t.Errorf("StartTimer() msg = %v, want %v", msg, "Timer started.")
+ }
+
+ // Check the state
+ state, err := LoadState()
+ if err != nil {
+ t.Fatalf("LoadState() error = %v", err)
+ }
+ if !state.Running {
+ t.Error("state.Running = false, want true")
+ }
+
+ // Try to start again
+ msg, err = StartTimer()
+ if err != nil {
+ t.Fatalf("StartTimer() error = %v", err)
+ }
+ if msg != "Timer is already running." {
+ t.Errorf("StartTimer() msg = %v, want %v", msg, "Timer is already running.")
+ }
+}
+
+func TestStopTimer(t *testing.T) {
+ setup(t)
+
+ // Stop before starting
+ msg, err := StopTimer()
+ if err != nil {
+ t.Fatalf("StopTimer() error = %v", err)
+ }
+ if msg != "Timer is not running." {
+ t.Errorf("StopTimer() msg = %v, want %v", msg, "Timer is not running.")
+ }
+
+ // Start and then stop the timer
+ _, _ = StartTimer()
+ time.Sleep(10 * time.Millisecond) // Simulate work
+ msg, err = StopTimer()
+ if err != nil {
+ t.Fatalf("StopTimer() error = %v", err)
+ }
+ if msg != "Timer stopped." {
+ t.Errorf("StopTimer() msg = %v, want %v", msg, "Timer stopped.")
+ }
+
+ // Check the state
+ state, err := LoadState()
+ if err != nil {
+ t.Fatalf("LoadState() error = %v", err)
+ }
+ if state.Running {
+ t.Error("state.Running = true, want false")
+ }
+ if state.ElapsedTime == 0 {
+ t.Error("state.ElapsedTime = 0, want > 0")
+ }
+}
+
+func TestGetStatus(t *testing.T) {
+ setup(t)
+
+ // Status when stopped
+ msg, err := GetStatus()
+ if err != nil {
+ t.Fatalf("GetStatus() error = %v", err)
+ }
+ want := "Status: Stopped\nElapsed Time: 0s"
+ if msg != want {
+ t.Errorf("GetStatus() msg = %q, want %q", msg, want)
+ }
+
+ // Status when running
+ _, _ = StartTimer()
+ msg, err = GetStatus()
+ if err != nil {
+ t.Fatalf("GetStatus() error = %v", err)
+ }
+ want = "Status: Running\nElapsed Time: 0s"
+ if msg != want {
+ t.Errorf("GetStatus() msg = %q, want %q", msg, want)
+ }
+}
+
+func TestResetTimer(t *testing.T) {
+ setup(t)
+
+ // Start timer to create a state file
+ _, _ = StartTimer()
+
+ // Reset the timer
+ msg, err := ResetTimer()
+ if err != nil {
+ t.Fatalf("ResetTimer() error = %v", err)
+ }
+ if msg != "Timer reset." {
+ t.Errorf("ResetTimer() msg = %v, want %v", msg, "Timer reset.")
+ }
+
+ // Check the state
+ state, err := LoadState()
+ if err != nil {
+ t.Fatalf("LoadState() error = %v", err)
+ }
+ if state.Running {
+ t.Error("state.Running = true, want false")
+ }
+ if state.ElapsedTime != 0 {
+ t.Errorf("state.ElapsedTime = %v, want 0", state.ElapsedTime)
+ }
+}