diff options
Diffstat (limited to 'internal/timer')
| -rw-r--r-- | internal/timer/operations.go | 28 | ||||
| -rw-r--r-- | internal/timer/operations_test.go | 70 |
2 files changed, 98 insertions, 0 deletions
diff --git a/internal/timer/operations.go b/internal/timer/operations.go index 2b50e9e..6bb825d 100644 --- a/internal/timer/operations.go +++ b/internal/timer/operations.go @@ -74,6 +74,34 @@ func ResetTimer() (string, error) { return "Timer reset.", nil } +func GetRawStatus() (string, error) { + state, err := LoadState() + if err != nil { + return "", fmt.Errorf("error loading state: %w", err) + } + + elapsed := state.ElapsedTime + if state.Running { + elapsed += time.Since(state.StartTime) + } + + return fmt.Sprintf("%d", int(elapsed.Seconds())), nil +} + +func GetRawMinutesStatus() (string, error) { + state, err := LoadState() + if err != nil { + return "", fmt.Errorf("error loading state: %w", err) + } + + elapsed := state.ElapsedTime + if state.Running { + elapsed += time.Since(state.StartTime) + } + + return fmt.Sprintf("%d", int(elapsed.Minutes())), nil +} + func GetPromptStatus() (string, error) { state, err := LoadState() if err != nil { diff --git a/internal/timer/operations_test.go b/internal/timer/operations_test.go index 39029b0..dc06941 100644 --- a/internal/timer/operations_test.go +++ b/internal/timer/operations_test.go @@ -108,6 +108,76 @@ func TestGetStatus(t *testing.T) { } } +func TestGetRawStatus(t *testing.T) { + setup(t) + + // Raw status when stopped + msg, err := GetRawStatus() + if err != nil { + t.Fatalf("GetRawStatus() error = %v", err) + } + want := "0" + if msg != want { + t.Errorf("GetRawStatus() msg = %q, want %q", msg, want) + } + + // Raw status when running + state, err := LoadState() + if err != nil { + t.Fatalf("LoadState() error = %v", err) + } + state.Running = true + state.StartTime = time.Now().Add(-2 * time.Second) // Set start time 2 seconds ago + state.ElapsedTime = 0 // Reset elapsed time for this specific test + if err := state.Save(); err != nil { + t.Fatalf("Save() error = %v", err) + } + + msg, err = GetRawStatus() + if err != nil { + t.Fatalf("GetRawStatus() error = %v", err) + } + want = "2" + if msg != want { + t.Errorf("GetRawStatus() msg = %q, want %q", msg, want) + } +} + +func TestGetRawMinutesStatus(t *testing.T) { + setup(t) + + // Raw minutes status when stopped + msg, err := GetRawMinutesStatus() + if err != nil { + t.Fatalf("GetRawMinutesStatus() error = %v", err) + } + want := "0" + if msg != want { + t.Errorf("GetRawMinutesStatus() msg = %q, want %q", msg, want) + } + + // Raw minutes status when running (simulating 2 minutes) + state, err := LoadState() + if err != nil { + t.Fatalf("LoadState() error = %v", err) + } + state.Running = true + state.StartTime = time.Now().Add(-2 * time.Minute) // Set start time 2 minutes ago + state.ElapsedTime = 0 // Reset elapsed time for this specific test + if err := state.Save(); err != nil { + t.Fatalf("Save() error = %v", err) + } + + msg, err = GetRawMinutesStatus() + if err != nil { + t.Fatalf("GetRawMinutesStatus() error = %v", err) + } + want = "2" + if msg != want { + t.Errorf("GetRawMinutesStatus() msg = %q, want %q", msg, want) + } +} + func TestResetTimer(t *testing.T) { setup(t) |
