From 7eedbde4ab809d940328ae9a1c147d40ede1c0a0 Mon Sep 17 00:00:00 2001 From: richjohnrambo Date: Tue, 13 Oct 2026 17:05:53 +0800 Subject: [PATCH] fix: parse configured dispatch delay strings --- internal/store/tasks.go | 5 +++++ internal/store/tasks_test.go | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/internal/store/tasks.go b/internal/store/tasks.go index 18a5339..64cafbd 100644 --- a/internal/store/tasks.go +++ b/internal/store/tasks.go @@ -8,6 +8,8 @@ import ( "errors" "fmt" "math/big" + "strconv" + "strings" "time" "github.com/jmoiron/sqlx" @@ -457,6 +459,9 @@ func jsonInt(value any) (int, bool) { case json.Number: parsed, err := typed.Int64() return int(parsed), err == nil + case string: + parsed, err := strconv.Atoi(strings.TrimSpace(typed)) + return parsed, err == nil default: return 0, false } diff --git a/internal/store/tasks_test.go b/internal/store/tasks_test.go index f366bdb..b680fec 100644 --- a/internal/store/tasks_test.go +++ b/internal/store/tasks_test.go @@ -2,6 +2,28 @@ package store import "testing" +func TestJSONInt(t *testing.T) { + tests := []struct { + name string + value any + want int + ok bool + }{ + {name: "number", value: float64(900), want: 900, ok: true}, + {name: "numeric string", value: "1200", want: 1200, ok: true}, + {name: "trimmed numeric string", value: " 900 ", want: 900, ok: true}, + {name: "invalid string", value: "15 minutes", ok: false}, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + got, ok := jsonInt(test.value) + if got != test.want || ok != test.ok { + t.Fatalf("jsonInt(%v) = (%d, %v), want (%d, %v)", test.value, got, ok, test.want, test.ok) + } + }) + } +} + func TestRandomDelaySeconds(t *testing.T) { for index := 0; index < 100; index++ { value := randomDelaySeconds(900, 1200)