Passed
Push — v2 ( 1cd5a7...0b44bc )
by Brice
02:47
created

ManagerTest::testEditCommand()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 8
nc 1
nop 1
1
<?php
2
3
namespace JobQueue\Tests\Application;
4
5
use JobQueue\Application\Manager\Console;
6
use JobQueue\Domain\Task\Status;
7
use JobQueue\Infrastructure\ServiceContainer;
8
use PHPUnit\Framework\TestCase;
9
use Ramsey\Uuid\Uuid;
10
use Symfony\Component\Console\Tester\CommandTester;
11
12
final class ManagerTest extends TestCase
13
{
14
    /**
15
16
     * @var Console
17
     */
18
    private static $manager;
19
20
    public static function setUpBeforeClass()
21
    {
22
        self::$manager = new Console;
23
    }
24
25
    /**
26
     *
27
     * @return string
28
     */
29
    public function testAddCommand(): string
30
    {
31
        $commandTester = new CommandTester($command = self::$manager->get('add'));
32
        $commandTester->execute([
33
            'command' => $command->getName(),
34
            'profile' => 'foo',
35
            'job' => 'JobQueue\Tests\Domain\Job\DummyJob'
36
        ], ['decorated' => false]);
37
38
        $uuidPattern = rtrim(ltrim(Uuid::VALID_PATTERN, '^'), '$');
39
40
        $this->assertEquals(1, preg_match("/Identifier +: ($uuidPattern)/", $commandTester->getDisplay(), $matches));
41
42
        return $matches[1];
43
    }
44
45
    /**
46
     *
47
     * @depends testAddCommand
48
     * @param string $identifier
49
     */
50
    public function testShowCommand(string $identifier)
51
    {
52
        $commandTester = new CommandTester($command = self::$manager->get('show'));
53
        $commandTester->execute([
54
            'command' => $command->getName(),
55
            'identifier' => $identifier,
56
        ], ['decorated' => false]);
57
58
        $this->assertEquals(1, preg_match("/Identifier +: $identifier/", $commandTester->getDisplay(), $matches));
59
    }
60
61
    /**
62
     *
63
     * @depends testAddCommand
64
     * @param string $identifier
65
     */
66
    public function testListCommand(string $identifier)
67
    {
68
        $commandTester = new CommandTester($command = self::$manager->get('list'));
69
        $commandTester->execute([
70
            'command' => $command->getName(),
71
        ], ['decorated' => false]);
72
73
        $this->assertEquals(1, preg_match("/$identifier/", $commandTester->getDisplay(), $matches));
74
    }
75
76
    /**
77
     *
78
     * @depends testAddCommand
79
     * @param string $identifier
80
     */
81
    public function testEditCommand(string $identifier)
82
    {
83
        $commandTester = new CommandTester($command = self::$manager->get('edit'));
84
        $commandTester->execute([
85
            'command' => $command->getName(),
86
            'identifier' => $identifier,
87
            'status' => $status = Status::FINISHED,
88
        ], ['decorated' => false]);
89
90
        $this->assertEquals(1, preg_match("/Identifier +: $identifier/", $commandTester->getDisplay(), $matches));
91
        $this->assertEquals(1, preg_match("/Status +: $status/", $commandTester->getDisplay(), $matches));
92
    }
93
94
    /**
95
     *
96
     * @depends testEditCommand
97
     */
98
    public function testRestoreCommand()
99
    {
100
        $commandTester = new CommandTester($command = self::$manager->get('restore'));
101
        $commandTester->execute([
102
            'command' => $command->getName(),
103
            '--force' => true,
104
        ], ['decorated' => false]);
105
106
        $tasks = ServiceContainer::getInstance()
107
            ->queue
108
            ->dump();
109
110
        foreach ($tasks as $task) {
111
            $this->assertEquals(Status::WAITING, (string) $task->getStatus());
112
        }
113
    }
114
115
    /**
116
     *
117
     * @depends testRestoreCommand
118
     */
119
    public function testFlushCommand()
120
    {
121
        $commandTester = new CommandTester($command = self::$manager->get('flush'));
122
        $commandTester->execute([
123
            'command' => $command->getName(),
124
            '--force' => true,
125
        ], ['decorated' => false]);
126
127
        $tasks = ServiceContainer::getInstance()
128
            ->queue
129
            ->dump();
130
131
        $this->assertTrue(empty($tasks));
132
    }
133
}
134