feat: gamemaster
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user