public void Initialize()
        {
            FakeScheduledTask scheduledTask = new FakeScheduledTask();

            this.Repository.ScheduledTasks.Add(scheduledTask);

            this.DateTimeProvider.UtcNow = DateTime.UtcNow;

            this.Scheduler.Initialize();

            scheduledTask.Schedule.AssertMethodCallOnceWithArguments(s => s.CalculateNextExecutionTime(this.DateTimeProvider.UtcNow));
        }
        public void ProcessScheduledTask()
        {
            FakeScheduledTask scheduledTask = new FakeScheduledTask();

            this.Repository.ScheduledTasks.Add(scheduledTask);

            this.DateTimeProvider.UtcNow = DateTime.UtcNow.AddMinutes(-1);

            scheduledTask.Schedule.PredefineMethodCall(
                s => s.CalculateNextExecutionTime(this.DateTimeProvider.UtcNow),
                () => scheduledTask.Schedule.NextExecutionTimeUtc = DateTime.UtcNow);

            this.Scheduler.Initialize();

            scheduledTask.Schedule.RecordedMethodCalls.Clear();

            this.DateTimeProvider.UtcNow = DateTime.UtcNow.AddMinutes(1);

            scheduledTask.PredefineMethodCall(s => s.PrepareNextTask(), () =>
            {
                scheduledTask.NextTask         = new FakeTask();
                scheduledTask.NextTaskPriority = TaskPriority.Low;
                scheduledTask.NextTaskSummary  = new StringTaskSummary("Hello");
            });

            /* scheduledTask.Schedule.PredefineMethodCall(
             *  s => s.CalculateNextExecutionTime(this.DateTimeProvider.UtcNow),
             *  () => scheduledTask.Schedule.NextExecutionTimeUtc = DateTime.UtcNow); */

            this.Scheduler.Process();

            scheduledTask.AssertMethodCallOnce(s => s.PrepareNextTask());

            this.TaskProcessorFacade.AssertMethodCallOnceWithArguments(f => f.SubmitTask(scheduledTask.NextTask, scheduledTask.NextTaskSummary, scheduledTask.NextTaskPriority));

            scheduledTask.Schedule.AssertMethodCallOnceWithArguments(s => s.CalculateNextExecutionTime(this.DateTimeProvider.UtcNow));
        }