+func TestSchedulesCheckTheClockAfterItsWaitLimit(t *testing.T) {
+ synctest.Test(t, func(t *testing.T) {
+ whatsapp, _, _ := whatsappStartTest(t, t.TempDir(), newTestClock())
+ loop, events := newTestIdleTurnLoop(t, whatsapp)
+ clock := &ScheduleTestClock{now: time.Now()}
+ schedules, err := openSchedules(filepath.Join(t.TempDir(), scheduleFileName), "OneChat", clock.Now, discardLog())
+ require.NoError(t, err)
+
+ _, err = schedules.Set("Check the clock.", new(clock.Now().Add(5*time.Minute).Format(scheduleAtLayout)), nil)
+ require.NoError(t, err)
+
+ ctx, cancel := context.WithCancel(t.Context())
+ defer cancel()
+
+ done := make(chan error, 1)
+ go func() {
+ done <- schedules.Run(ctx, loop)
+ }()
+
+ synctest.Wait()
+ require.Zero(t, loop.memory.Len())
+ clock.Set(clock.Now().Add(5 * time.Minute))
+ time.Sleep(scheduleClockWaitTimeout)
+ synctest.Wait()
+ require.Equal(t, 1, loop.memory.Len())
+ require.Contains(t, events.Last("work"), "Check the clock.")
+ cancel()
+ require.NoError(t, <-done)
+ })
+}
+