Passed
Branch master (aecce8)
by Brice
05:03
created

WorkerTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 4
dl 0
loc 77
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testConsumeErroneousTask() 0 16 1
A testConsume() 0 16 1
A setUpBeforeClass() 0 10 1
A tearDownAfterClass() 0 9 1
1
<?php
2
3
namespace JobQueue\Tests\Application;
4
5
use JobQueue\Application\Console\WorkerApplication;
6
use JobQueue\Domain\Task\Profile;
7
use JobQueue\Domain\Task\Status;
8
use JobQueue\Domain\Task\Task;
9
use JobQueue\Infrastructure\ServiceContainer;
10
use JobQueue\Tests\Domain\Job;
11
use PHPUnit\Framework\TestCase;
12
use Symfony\Component\Console\Tester\CommandTester;
13
14
final class WorkerTest extends TestCase
15
{
16
    /**
17
     *
18
     * @var
19
     */
20
    private static $worker;
21
22
    /**
23
     *
24
     * @var Task
25
     */
26
    private static $testTask;
27
28
    /**
29
     *
30
     * @var Task
31
     */
32
    private static $erroneousTask;
33
34
    public static function setUpBeforeClass()
35
    {
36
        self::$worker = new WorkerApplication;
37
38
        self::$testTask = new Task(new Profile('test'), new Job\DummyJob);
39
        self::$erroneousTask = new Task(new Profile('test'), new Job\ErroneousJob);
40
41
        ServiceContainer::getInstance()
42
            ->queue
43
            ->add(self::$testTask, self::$erroneousTask);
44
    }
45
46
    public function testConsume()
47
    {
48
        $commandTester = new CommandTester($command = self::$worker->get('consume'));
49
        $commandTester->execute([
50
            'profile' => 'test',
51
            '--name' => 'foobar',
52
            '--quantity' => 1,
53
        ], ['decorated' => false]);
54
55
        $this->assertContains('Worker foobar is done', $commandTester->getDisplay());
56
57
        $task = ServiceContainer::getInstance()
58
            ->queue
59
            ->find((string) self::$testTask->getIdentifier());
60
61
        $this->assertEquals((string) $task->getStatus(), Status::FINISHED);
62
    }
63
64
    public function testConsumeErroneousTask()
65
    {
66
        $commandTester = new CommandTester($command = self::$worker->get('consume'));
67
        $commandTester->execute([
68
            'profile' => 'test',
69
            '--name' => 'foobar',
70
            '--quantity' => 1,
71
        ], ['decorated' => false]);
72
73
        $this->assertContains('Worker foobar is done', $commandTester->getDisplay());
74
75
        $task = ServiceContainer::getInstance()
76
            ->queue
77
            ->find((string) self::$erroneousTask->getIdentifier());
78
79
        $this->assertEquals((string) $task->getStatus(), Status::FAILED);
80
    }
81
82
    public static function tearDownAfterClass()
83
    {
84
        ServiceContainer::getInstance()
85
            ->queue
86
            ->delete((string) self::$testTask->getIdentifier());
87
88
        ServiceContainer::getInstance()
89
            ->queue
90
            ->delete((string) self::$erroneousTask->getIdentifier());
91
    }
92
}
93