WorkerTest::tearDownAfterClass()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 0
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\Queue;
8
use JobQueue\Domain\Task\Status;
9
use JobQueue\Domain\Task\Task;
10
use JobQueue\Infrastructure\ServiceContainer;
11
use JobQueue\Tests\Domain\Job;
12
use PHPUnit\Framework\TestCase;
13
use Symfony\Component\Console\Tester\CommandTester;
14
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
15
16
final class WorkerTest extends TestCase
17
{
18
    /**
19
     *
20
     * @var Queue
21
     */
22
    private static $queue;
23
24
    /**
25
     *
26
     * @var EventDispatcherInterface
27
     */
28
    private static $eventDispatcher;
29
30
    /**
31
     *
32
     * @var
33
     */
34
    private static $worker;
35
36
    /**
37
     *
38
     * @var Task
39
     */
40
    private static $testTask;
41
42
    /**
43
     *
44
     * @var Task
45
     */
46
    private static $erroneousTask;
47
48
    public static function setUpBeforeClass()
49
    {
50
        self::$queue = ServiceContainer::getInstance()->queue;
51
        self::$eventDispatcher = ServiceContainer::getInstance()->dispatcher;
52
        self::$worker = new WorkerApplication(self::$queue, self::$eventDispatcher);
53
54
        self::$testTask = new Task(new Profile('test'), new Job\DummyJob);
55
        self::$erroneousTask = new Task(new Profile('test'), new Job\ErroneousJob);
56
        self::$queue->add(self::$testTask, self::$erroneousTask);
57
    }
58
59
    public function testConsume()
60
    {
61
        $commandTester = new CommandTester($command = self::$worker->get('consume'));
62
        $commandTester->execute([
63
            'profile' => 'test',
64
            '--name' => 'foobar',
65
            '--quantity' => 1,
66
        ], ['decorated' => false]);
67
68
        $this->assertContains('Worker foobar is done', $commandTester->getDisplay());
69
70
        $task = ServiceContainer::getInstance()
71
            ->queue
72
            ->find((string) self::$testTask->getIdentifier());
73
74
        $this->assertEquals((string) $task->getStatus(), Status::FINISHED);
75
    }
76
77
    public function testConsumeErroneousTask()
78
    {
79
        $commandTester = new CommandTester($command = self::$worker->get('consume'));
80
        $commandTester->execute([
81
            'profile' => 'test',
82
            '--name' => 'foobar',
83
            '--quantity' => 1,
84
        ], ['decorated' => false]);
85
86
        $this->assertContains('Worker foobar is done', $commandTester->getDisplay());
87
88
        $task = ServiceContainer::getInstance()
89
            ->queue
90
            ->find((string) self::$erroneousTask->getIdentifier());
91
92
        $this->assertEquals((string) $task->getStatus(), Status::FAILED);
93
    }
94
95
    public static function tearDownAfterClass()
96
    {
97
        ServiceContainer::getInstance()
98
            ->queue
99
            ->delete((string) self::$testTask->getIdentifier());
100
101
        ServiceContainer::getInstance()
102
            ->queue
103
            ->delete((string) self::$erroneousTask->getIdentifier());
104
    }
105
}
106