/ * */ class Cron_Test_IndexControllerTest extends ModuleControllerTest { /** * Test index action. */ public function testIndexAction() { $this->utility->impersonate('anonymous'); // remember the current hour, we will use it later to check which cron tasks // should be triggered by the following cron runs $currentHour = date('H'); // verify that cron is accessible $this->dispatch('/cron'); $this->assertModule('cron', 'Expected module for dispatching /cron action.'); $this->assertController('index', 'Expected controller for dispatching /cron action.'); $this->assertAction('index', 'Expected action for dispatching /cron action.'); // verify json output $body = $this->response->getBody(); $data = Zend_Json::decode($body); $this->assertSame( array( 'hourly' => 'executed', 'daily' => 'executed', 'weekly' => 'executed', 'monthly' => 'executed' ), $data, 'Expected all cron frequencies have been executed.' ); // dispatch again and verify that no cron tasks were executed $this->resetRequest() ->resetResponse(); $this->dispatch('/cron'); $this->assertModule('cron', 'Expected module for dispatching /cron action.'); $this->assertController('index', 'Expected controller for dispatching /cron action.'); $this->assertAction('index', 'Expected action for dispatching /cron action.'); // verify json output; in most cases no cron tasks should be executed, // however we have to be careful as we might be in an unlikely situation // when the hour/day/week or month crossed between this and the previous // cron run if (date('H') !== $currentHour) { // this means that there is a possibility that the hour crossed between the // last two cron executions, however we are not certain as the first cron // run might have been executed in this hour also - skip the test $this->markTestSkipped("Skipped cron test due to possible hour cross."); } $body = $this->response->getBody(); $data = Zend_Json::decode($body); $this->assertSame( array( 'hourly' => 'skipped', 'daily' => 'skipped', 'weekly' => 'skipped', 'monthly' => 'skipped' ), $data, 'Expected no cron frequencies have been executed.' ); } }