diff options
Diffstat (limited to 'internal/timer/operations_test.go')
| -rw-r--r-- | internal/timer/operations_test.go | 137 |
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) + } +} |
