Passed
Pull Request — master (#57)
by Matthew
08:14
created

RunCommandTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 11

Importance

Changes 0
Metric Value
wmc 3
lcom 1
cbo 11
dl 0
loc 61
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Dtc\QueueBundle\Tests\Command;
4
5
use Dtc\QueueBundle\Command\RunCommand;
6
use PHPUnit\Framework\TestCase;
7
use Dtc\QueueBundle\ODM\JobManager;
8
use Dtc\QueueBundle\EventDispatcher\EventDispatcher;
9
use Dtc\QueueBundle\Manager\WorkerManager;
10
use Dtc\QueueBundle\Tests\FibonacciWorker;
11
use Dtc\QueueBundle\Run\Loop;
12
use Symfony\Component\Console\Input\ArrayInput;
13
use Symfony\Component\Console\Tests\Fixtures\DummyOutput;
14
use Symfony\Component\DependencyInjection\Container;
15
16
class RunCommandTest extends TestCase
17
{
18
    use CommandTrait;
19
20
    public function testORMRun()
21
    {
22
        \Dtc\QueueBundle\Tests\ORM\JobManagerTest::setUpBeforeClass();
23
24
        /** @var JobManager $jobManager */
25
        $jobManager = \Dtc\QueueBundle\Tests\ORM\JobManagerTest::$jobManager;
26
        $runManager = \Dtc\QueueBundle\Tests\ORM\JobManagerTest::$runManager;
27
        $eventDispatcher = new EventDispatcher();
28
        $workerManager = new WorkerManager($jobManager, $eventDispatcher);
29
        $worker = new FibonacciWorker();
30
        $workerManager->addWorker($worker);
31
        $worker->setJobManager($jobManager);
32
33
        $loop = new Loop($workerManager, $jobManager, $runManager);
34
        $container = new Container();
35
        $container->set('dtc_queue.run.loop', $loop);
36
        $container->set('dtc_queue.manager.run', $runManager);
37
        $worker->later()->fibonacci(1);
38
39
        $this->runRunCommand($loop, $container, [], 1);
40
41
        $startTime = time();
42
        $this->runRunCommand($loop, $container, ['-d' => 2], 0);
43
        self::assertGreaterThanOrEqual(2, time() - $startTime);
44
45
        $worker->later()->fibonacci(1);
46
        $worker->later()->fibonacci(1);
47
48
        $this->runRunCommand($loop, $container, ['-m' => 4], 2);
49
50
        $worker->later()->fibonacci(1);
51
        $worker->later()->fibonacci(2);
52
53
        $this->runRunCommand($loop, $container, ['-m' => 1], 1);
54
        $this->runRunCommand($loop, $container, ['-m' => 1], 1);
55
56
        $runCommand = new RunCommand();
57
        $runCommand->setContainer($container);
58
        $input = new ArrayInput(['-m' => 0, '-d' => 0]);
59
        $output = new DummyOutput();
60
        $failed = false;
61
        try {
62
            $runCommand->run($input, $output);
63
            $failed = true;
64
        } catch (\Exception $exception) {
65
            self::assertTrue(true);
66
        }
67
        static::assertFalse($failed);
68
    }
69
70
    protected function runRunCommand(Loop $loop, Container $container, $params, $amountProcessed)
71
    {
72
        $command = RunCommand::class;
73
        $this->runCommand($command, $container, $params);
74
        self::assertEquals($amountProcessed, $loop->getLastRun()->getProcessed());
75
    }
76
}
77