/**
  *  @expectedException LaterJob\Exception
  *  @expectedExceptionMessage SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2012-11-27 13:00:00' for key
  */
 public function testOnMonitorLockAlreadyHasException()
 {
     $date = new DateTime('27-11-2012 13:00:00');
     $transition_gateway = $this->getTransitionTableGateway();
     $monitor_gateway = $this->getMonitorTableGateway();
     $handler = new MonitorSubscriber($monitor_gateway, $transition_gateway);
     # create stats container for results of the monitoring event
     $stats = new Stats();
     $stats->setMonitorDate($date);
     $stats->setWorkerMaxThroughput(50);
     $stats_repeat = new Stats();
     $stats_repeat->setMonitorDate($date);
     $stats_repeat->setWorkerMaxThroughput(50);
     # create event object to pass to handle
     $event = new MonitoringEvent($stats);
     $event->setInterval('+ 5 hours');
     $event_repeat = new MonitoringEvent($stats_repeat);
     $event_repeat->setInterval('+ 5 hours');
     # first call work as normal
     $handler->onMonitorLock($event);
     $this->assertTrue($event->getResult());
     $this->assertEquals(1, $event->getStats()->getMonitorId(1));
     # lock in place should FAIL
     $handler->onMonitorLock($event_repeat);
 }
 public function testOnMonitorLock()
 {
     $date = new DateTime('10-12-2012 01:00:00');
     $transition_gateway = $this->getTransitionTableGateway();
     $monitor_gateway = $this->getMonitorTableGateway();
     $handler = new MonitorSubscriber($monitor_gateway, $transition_gateway);
     $stats = new Stats();
     $event = new MonitoringEvent($stats);
     $stats->setMonitorDate($date);
     $handler->onMonitorLock($event);
     $resulting_table = $this->getConnection()->createQueryTable("later_job_monitor", "SELECT * FROM later_job_monitor LIMIT 1");
     $expected_table = $this->createXmlDataSet(__DIR__ . DIRECTORY_SEPARATOR . 'Fixture' . DIRECTORY_SEPARATOR . "lock_handler_result.xml")->getTable("later_job_monitor");
     $this->assertEquals(true, $event->getResult());
     $this->assertTablesEqual($expected_table, $resulting_table);
 }