public function testScheduledExecutionInterval()
 {
     $test = new TestScheduledDataObject();
     $test->Title = 'Test execute at custom interval sizes';
     $test->write();
     $test->FirstExecution = '1980-09-22 09:15:00';
     $test->ExecuteEvery = 'Minute';
     $test->write();
     // should now have a job
     $this->assertTrue($test->ScheduledJobID > 0, 'Scheduled job has not been created');
     // should default the ExecuteInterval
     $this->assertEquals(1, $test->ExecuteInterval, 'ExecuteInterval did not default to 1');
     // should check the interval in code also
     $test->ExecuteInterval = 0;
     $test->write();
     $jobId = $test->ScheduledJobID;
     // execute said job
     $job = $test->ScheduledJob();
     $job->execute();
     // reload the test object and make sure its job has now changed
     $test = DataObject::get_by_id('TestScheduledDataObject', $test->ID);
     $this->assertNotEquals($test->ScheduledJobID, $jobId);
     $this->assertEquals('EXECUTED', $test->Message);
     $job = $test->ScheduledJob();
     // should reschedule in 1 minute time
     $expectedMinutes = date('i', time());
     $expectedMinutes = intval($expectedMinutes, 10);
     if ($expectedMinutes + 1 > 59) {
         // Wrap around the hour
         $expectedMinutes = $expectedMinutes - 59;
     }
     $scheduledMinutes = substr($job->StartAfter, 14, 2);
     $scheduledMinutes = intval($scheduledMinutes, 10);
     $this->assertEquals($expectedMinutes + 1, $scheduledMinutes, 'Did not reschedule 1 minute later');
     // test a custom interval of 3 minutes
     $test->ExecuteInterval = 3;
     $test->write();
     $job = $test->ScheduledJob();
     $job->execute();
     $test = DataObject::get_by_id('TestScheduledDataObject', $test->ID);
     $job = $test->ScheduledJob();
     // should reschedule in 3 minutes time
     $expectedMinutes = date('i', time());
     $expectedMinutes = intval($expectedMinutes, 10);
     if ($expectedMinutes + 3 > 59) {
         $expectedMinutes = $expectedMinutes - 59;
     }
     $scheduledMinutes = substr($job->StartAfter, 14, 2);
     $scheduledMinutes = intval($scheduledMinutes, 10);
     $this->assertEquals($expectedMinutes + 3, $scheduledMinutes, 'Did not reschedule 3 minutes later');
 }
 public function testScheduledExecutionTimes()
 {
     $test = new TestScheduledDataObject();
     $test->Title = 'Test execute of stuff';
     $test->write();
     $test->FirstExecution = '1980-09-22 09:15:00';
     $test->ExecuteEvery = 'Hour';
     $test->write();
     // should now have a job
     $this->assertTrue($test->ScheduledJobID > 0, 'Scheduled job has not been created');
     $jobId = $test->ScheduledJobID;
     // execute said job
     $job = $test->ScheduledJob();
     $job->execute();
     // reload the test object and make sure its job has now changed
     $test = DataObject::get_by_id('TestScheduledDataObject', $test->ID);
     $this->assertNotEquals($test->ScheduledJobID, $jobId);
     $this->assertEquals('EXECUTED', $test->Message);
 }