Files
galaxy-game/gamemaster/internal/service/scheduler/service_test.go
T
2026-05-03 07:59:03 +02:00

64 lines
2.1 KiB
Go

package scheduler_test
import (
"testing"
"time"
"galaxy/gamemaster/internal/service/scheduler"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestComputeNextHappyPathWithoutSkip(t *testing.T) {
service := scheduler.New()
after := time.Date(2026, time.April, 30, 12, 0, 0, 0, time.UTC)
next, skipConsumed, err := service.ComputeNext("0 18 * * *", after, false)
require.NoError(t, err)
assert.False(t, skipConsumed)
expected := time.Date(2026, time.April, 30, 18, 0, 0, 0, time.UTC)
assert.Equal(t, expected, next)
assert.Equal(t, time.UTC, next.Location())
}
func TestComputeNextConsumesSkip(t *testing.T) {
service := scheduler.New()
after := time.Date(2026, time.April, 30, 12, 0, 0, 0, time.UTC)
next, skipConsumed, err := service.ComputeNext("0 18 * * *", after, true)
require.NoError(t, err)
assert.True(t, skipConsumed)
expected := time.Date(2026, time.May, 1, 18, 0, 0, 0, time.UTC)
assert.Equal(t, expected, next)
}
func TestComputeNextEveryQuarterHourSkip(t *testing.T) {
service := scheduler.New()
after := time.Date(2026, time.April, 30, 12, 0, 0, 0, time.UTC)
first, _, err := service.ComputeNext("*/15 * * * *", after, false)
require.NoError(t, err)
skipped, _, err := service.ComputeNext("*/15 * * * *", after, true)
require.NoError(t, err)
assert.Equal(t, first.Add(15*time.Minute), skipped, "skip advances by exactly one cron step")
}
func TestComputeNextRejectsInvalidCron(t *testing.T) {
service := scheduler.New()
_, _, err := service.ComputeNext("not-a-cron", time.Now().UTC(), false)
require.Error(t, err)
}
func TestComputeNextTrimsWhitespace(t *testing.T) {
service := scheduler.New()
after := time.Date(2026, time.April, 30, 12, 0, 0, 0, time.UTC)
next, _, err := service.ComputeNext(" 0 18 * * * ", after, false)
require.NoError(t, err)
expected := time.Date(2026, time.April, 30, 18, 0, 0, 0, time.UTC)
assert.Equal(t, expected, next)
}
func TestNilServiceRejected(t *testing.T) {
var service *scheduler.Service
_, _, err := service.ComputeNext("0 18 * * *", time.Now().UTC(), false)
require.Error(t, err)
}