/**
  * List failed jobs.
  *
  * @param  string $queueName only list failures for this queue
  * @cli
  */
 public function failuresCommand($queueName = null)
 {
     if ($queueName === null) {
         $failedJobs = $this->failedJobRepository->findAll();
     } else {
         $failedJobs = $this->failedJobRepository->findByQueueName($queueName);
     }
     foreach ($failedJobs as $failedJob) {
         $this->outputFormatted('Queue "%s" at %s', [$failedJob->getQueueName(), $failedJob->getCrdate()->format('d.m.Y H:i:s')]);
     }
 }
 /**
  * @test
  * @depends waitAndExecuteJobThrowsException
  */
 public function waitAndExecuteJobAttempsThreeTimes()
 {
     $attemps = 3;
     $this->extensionConfiguration->expects($this->any())->method('get')->will($this->returnValue($attemps));
     $job = $this->getMock(TestJob::class, array('execute'), array(), '', false);
     $job->expects($this->any())->method('execute')->will($this->returnValue(false));
     $this->jobManager->initializeObject();
     $this->jobManager->queue($this->queueName, $job);
     $this->failedJobRepository->expects($this->once())->method('add');
     for ($i = 0; $i < $attemps + 99; ++$i) {
         try {
             $queuedJob = $this->jobManager->waitAndExecute($this->queueName);
             if ($queuedJob === null) {
                 break;
             }
         } catch (JobQueueException $exception) {
             if ($i + 1 < $attemps) {
                 $this->assertEquals(1, $this->testQueue->count(), 'Job is not republished to queue!');
             }
         }
     }
     $this->assertEquals($attemps, $i, 'To many attemps!');
     $this->assertEquals(0, $this->testQueue->count(), 'Queue not empty!');
 }