Author: Fabrizio Branca
Inheritance: extends Mage_Cron_Model_Observer
 /**
  * @test
  */
 public function scheduleJobAndRunCron()
 {
     $sameRequest = false;
     if ($sameRequest) {
         // dispatch event
         $event = new Varien_Event_Observer(array('include_groups' => array($this->groups['groupA'])));
         $observer = new Aoe_Scheduler_Model_Observer();
         $observer->dispatch($event);
     } else {
         $this->exec('cd ' . Mage::getBaseDir() . '/shell && /usr/bin/php scheduler.php --action cron --mode always --includeGroups ' . $this->groups['groupA']);
     }
     $schedulesJobWithGroupA = Mage::getModel('cron/schedule')->getCollection()->addFieldToFilter('job_code', $this->jobs['jobWithGroupA']->getJobCode());
     $this->assertCount(1, $schedulesJobWithGroupA);
     foreach ($schedulesJobWithGroupA as $schedule) {
         /* @var $schedule Aoe_Scheduler_Model_Schedule */
         $this->assertEquals(Aoe_Scheduler_Model_Schedule::STATUS_SUCCESS, $schedule->getStatus());
     }
     $schedulesJobWithGroupB = Mage::getModel('cron/schedule')->getCollection()->addFieldToFilter('job_code', $this->jobs['jobWithGroupB']->getJobCode());
     $this->assertCount(0, $schedulesJobWithGroupB);
     $schedulesJobWithGroupAandB = Mage::getModel('cron/schedule')->getCollection()->addFieldToFilter('job_code', $this->jobs['jobWithGroupAandB']->getJobCode());
     $this->assertCount(1, $schedulesJobWithGroupAandB);
     foreach ($schedulesJobWithGroupAandB as $schedule) {
         /* @var $schedule Aoe_Scheduler_Model_Schedule */
         $this->assertEquals(Aoe_Scheduler_Model_Schedule::STATUS_SUCCESS, $schedule->getStatus());
     }
 }
 /**
  * @test
  */
 public function scheduleJobAndRunCron()
 {
     foreach ($this->schedules as $schedule) {
         /* @var $schedule Aoe_Scheduler_Model_Schedule */
         $this->assertEquals(Aoe_Scheduler_Model_Schedule::STATUS_PENDING, $schedule->refresh()->getStatus());
         // echo "Job code: {$schedule->getJobCode()}, Id: {$schedule->getId()}, Groups: " . $schedule->getJob()->getGroups() . "\n";
     }
     // check if the new jobs show up in the "groups to jobs map"
     $helper = Mage::helper('aoe_scheduler');
     /* @var $helper Aoe_Scheduler_Helper_Data */
     $map = $helper->getGroupsToJobsMap();
     foreach ($this->groups as $group) {
         $this->assertArrayHasKey($group, $map);
     }
     $this->assertTrue(in_array($this->schedules['jobWithGroupA']->getJobCode(), $map[$this->groups['groupA']]));
     $this->assertTrue(in_array($this->schedules['jobWithGroupB']->getJobCode(), $map[$this->groups['groupB']]));
     $this->assertTrue(in_array($this->schedules['jobWithGroupAandB']->getJobCode(), $map[$this->groups['groupA']]));
     $this->assertTrue(in_array($this->schedules['jobWithGroupAandB']->getJobCode(), $map[$this->groups['groupB']]));
     $includeJobs = $helper->addGroupJobs(array(), array($this->groups['groupA']));
     $this->assertTrue(in_array($this->schedules['jobWithGroupA']->getJobCode(), $includeJobs));
     $this->assertTrue(in_array($this->schedules['jobWithGroupAandB']->getJobCode(), $includeJobs));
     $includeJobs = $helper->addGroupJobs(array(), array($this->groups['groupB']));
     $this->assertTrue(in_array($this->schedules['jobWithGroupB']->getJobCode(), $includeJobs));
     $this->assertTrue(in_array($this->schedules['jobWithGroupAandB']->getJobCode(), $includeJobs));
     $sameRequest = false;
     if ($sameRequest) {
         // dispatch event
         $event = new Varien_Event_Observer(array('include_groups' => array($this->groups['groupA'])));
         $observer = new Aoe_Scheduler_Model_Observer();
         $observer->dispatch($event);
     } else {
         $this->exec('cd ' . Mage::getBaseDir() . '/shell && /usr/bin/php scheduler.php --action cron --mode default --includeGroups ' . $this->groups['groupA']);
     }
     //$this->exec('cd ' . Mage::getBaseDir() . '/shell && /usr/bin/php scheduler.php --action wait');
     $this->assertEquals(Aoe_Scheduler_Model_Schedule::STATUS_SUCCESS, $this->schedules['jobWithGroupA']->refresh()->getStatus());
     $this->assertEquals(Aoe_Scheduler_Model_Schedule::STATUS_PENDING, $this->schedules['jobWithGroupB']->refresh()->getStatus());
     $this->assertEquals(Aoe_Scheduler_Model_Schedule::STATUS_SUCCESS, $this->schedules['jobWithGroupAandB']->refresh()->getStatus());
 }