nomadcode/services/core/internal/scheduler/stale_test.go
toki 6d4553bdc9 feat: m-plane-origin-authoring-roundtrip-sync G07-G08 progress and core scheduler improvements
- Add code review and plan logs for cloud G07, G08 subtasks
- Add stale task detection to scheduler
- Update OpenAI client config and tests
- Fix core services Makefile, README, docker-compose, and run script
2026-06-20 18:33:39 +09:00

81 lines
2.5 KiB
Go

package scheduler
import (
"testing"
"time"
"github.com/nomadcode/nomadcode-core/internal/workflow"
)
func TestIsAuthoringStaleReturnsTrueWhenExpired(t *testing.T) {
old := time.Now().Add(-2000 * time.Second)
if !IsAuthoringStale(old, 1200) {
t.Fatal("expected stale for timestamp older than threshold")
}
}
func TestIsAuthoringStaleReturnsFalseWhenRecent(t *testing.T) {
recent := time.Now().Add(-60 * time.Second)
if IsAuthoringStale(recent, 1200) {
t.Fatal("expected not stale for recent timestamp")
}
}
func TestIsAuthoringStaleReturnsFalseForZeroTime(t *testing.T) {
if IsAuthoringStale(time.Time{}, 1200) {
t.Fatal("expected false for zero time")
}
}
func TestIsAuthoringStaleReturnsFalseForNonPositiveThreshold(t *testing.T) {
old := time.Now().Add(-9999 * time.Second)
if IsAuthoringStale(old, 0) {
t.Fatal("expected false when threshold is zero (feature disabled)")
}
if IsAuthoringStale(old, -1) {
t.Fatal("expected false when threshold is negative")
}
}
func TestParseAuthoringRunUpdatedAtReturnsTimeFromMeta(t *testing.T) {
now := time.Now().UTC().Truncate(time.Second)
meta := map[string]any{
workflow.MetadataKeyAuthoringRunUpdatedAt: now.Format(time.RFC3339),
}
got := ParseAuthoringRunUpdatedAt(meta)
if !got.Equal(now) {
t.Fatalf("got %v, want %v", got, now)
}
}
func TestParseAuthoringRunUpdatedAtReturnsZeroOnMissing(t *testing.T) {
if !ParseAuthoringRunUpdatedAt(map[string]any{}).IsZero() {
t.Fatal("expected zero time when key is absent")
}
}
func TestParseAuthoringRunUpdatedAtReturnsZeroOnBadFormat(t *testing.T) {
meta := map[string]any{
workflow.MetadataKeyAuthoringRunUpdatedAt: "not-a-date",
}
if !ParseAuthoringRunUpdatedAt(meta).IsZero() {
t.Fatal("expected zero time for unparseable date")
}
}
// TestIsAuthoringStaleAppliesToQueueWait verifies that the stale helper can be
// applied to task.UpdatedAt for queue-waiting authoring tasks: if a task has
// been queued for longer than AUTHORING_STALE_AFTER_SEC it is considered stale.
func TestIsAuthoringStaleAppliesToQueueWait(t *testing.T) {
// Simulate a task queued 25 minutes ago (threshold default 1200s = 20min).
queuedAt := time.Now().Add(-25 * time.Minute)
if !IsAuthoringStale(queuedAt, 1200) {
t.Fatal("expected stale for task queued longer than threshold")
}
// A task queued 10 minutes ago is not yet stale.
recent := time.Now().Add(-10 * time.Minute)
if IsAuthoringStale(recent, 1200) {
t.Fatal("expected not stale for task queued less than threshold")
}
}