From 7e6b2e4c2ba957899b12dac7e0ea9f7c29a9a7b3 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 3 Mar 2026 23:43:48 +0200 Subject: worktime: use sentinel login state errors Replace string matching in timer sync with errors.Is and add regression tests. --- internal/cli/timer.go | 2 +- internal/cli/timer_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) (limited to 'internal/cli') diff --git a/internal/cli/timer.go b/internal/cli/timer.go index 78d6d8d..46292ad 100644 --- a/internal/cli/timer.go +++ b/internal/cli/timer.go @@ -242,7 +242,7 @@ func syncWorktimeWithTimer(start bool) error { } // Avoid failing timer commands on no-op state sync mismatches. - if strings.Contains(err.Error(), "already logged in") || strings.Contains(err.Error(), "not logged in") { + if errors.Is(err, worktime.ErrAlreadyLoggedIn) || errors.Is(err, worktime.ErrNotLoggedIn) { return nil } diff --git a/internal/cli/timer_test.go b/internal/cli/timer_test.go index 25f9618..32b9b8b 100644 --- a/internal/cli/timer_test.go +++ b/internal/cli/timer_test.go @@ -5,6 +5,7 @@ import ( "path/filepath" "strings" "testing" + "time" timrTimer "codeberg.org/snonux/timr/internal/timer" "codeberg.org/snonux/timr/internal/worktime" @@ -113,6 +114,32 @@ func TestTimerAutoWorktimeSync(t *testing.T) { } } +func TestTimerAutoWorktimeSyncIgnoresAlreadyLoggedIn(t *testing.T) { + setupTimerState(t) + + dbDir := t.TempDir() + if _, err := worktime.Login(dbDir, "host-auto", "work", time.Unix(100, 0), "seed"); err != nil { + t.Fatalf("seed Login() error = %v", err) + } + + cfgPath := writeWorkConfigWithAuto(t, dbDir, "host-auto", true) + out, err := runRootCommand("--config", cfgPath, "timer", "start") + if err != nil { + t.Fatalf("timer start error = %v (output: %q)", err, out) + } +} + +func TestTimerAutoWorktimeSyncIgnoresNotLoggedInOnStop(t *testing.T) { + setupTimerState(t) + + dbDir := t.TempDir() + cfgPath := writeWorkConfigWithAuto(t, dbDir, "host-auto", true) + out, err := runRootCommand("--config", cfgPath, "timer", "stop") + if err != nil { + t.Fatalf("timer stop error = %v (output: %q)", err, out) + } +} + func setupTimerState(t *testing.T) { t.Helper() -- cgit v1.2.3