Completed
Pull Request — master (#20)
by Wachter
07:09 queued 04:45
created

RunCommandTest::testExecute()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 43
Code Lines 29

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 43
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 29
nc 1
nop 0
1
<?php
2
3
/*
4
 * This file is part of php-task library.
5
 *
6
 * (c) php-task
7
 *
8
 * This source file is subject to the MIT license that is bundled
9
 * with this source code in the file LICENSE.
10
 */
11
12
namespace Task\TaskBundle\Tests\Functional\Command;
13
14
use Cron\CronExpression;
15
use Task\Execution\TaskExecutionInterface;
16
use Task\TaskBundle\Command\RunCommand;
17
use Task\TaskBundle\Tests\Functional\BaseCommandTestCase;
18
use Task\TaskBundle\Tests\Functional\FailTestHandler;
19
use Task\TaskBundle\Tests\Functional\TestHandler;
20
use Task\TaskStatus;
21
22
/**
23
 * Tests for RunCommand.
24
 */
25
class RunCommandTest extends BaseCommandTestCase
26
{
27
    public function testExecute()
28
    {
29
        $singleTask = $this->createTask('Test workload 1');
30
        $laterTask = $this->createTask('Test workload 2');
31
        $intervalTask = $this->createTask('Test workload 3', CronExpression::factory('@daily'));
32
33
        /** @var TaskExecutionInterface[] $executions */
34
        $executions = [
35
            $this->createTaskExecution($singleTask, new \DateTime('-1 hour')),
36
            $this->createTaskExecution($laterTask, new \DateTime('+1 hour')),
37
            $this->createTaskExecution($intervalTask, new \DateTime('-2 hour')),
38
        ];
39
40
        $this->commandTester->execute(
41
            [
42
                'command' => $this->command->getName(),
43
            ]
44
        );
45
46
        $this->assertEquals(TaskStatus::COMPLETE, $executions[0]->getStatus());
47
        $this->assertEquals(strrev('Test workload 1'), $executions[0]->getResult());
48
        $this->assertGreaterThan(0, $executions[0]->getDuration());
49
        $this->assertGreaterThanOrEqual($executions[0]->getStartTime(), $executions[0]->getEndTime());
50
51
        $this->assertEquals(TaskStatus::PLANNED, $executions[1]->getStatus());
52
        $this->assertNull($executions[1]->getResult());
53
        $this->assertNull($executions[1]->getDuration());
54
        $this->assertNull($executions[1]->getStartTime());
55
        $this->assertNull($executions[1]->getEndTime());
56
57
        $this->assertEquals(TaskStatus::COMPLETE, $executions[2]->getStatus());
58
        $this->assertEquals(strrev('Test workload 3'), $executions[2]->getResult());
59
        $this->assertGreaterThan(0, $executions[2]->getDuration());
60
        $this->assertGreaterThanOrEqual($executions[2]->getStartTime(), $executions[2]->getEndTime());
61
62
        $result = $this->taskExecutionRepository->findAll(2, 3);
63
        $this->assertCount(1, $result);
64
65
        $this->assertEquals($intervalTask, $result[0]->getTask());
66
        $this->assertEquals(TaskStatus::PLANNED, $result[0]->getStatus());
67
        $this->assertEquals(TestHandler::class, $result[0]->getHandlerClass());
68
        $this->assertEquals('Test workload 3', $result[0]->getWorkload());
69
    }
70
71
    public function testExecuteWithFail()
72
    {
73
        $singleTask = $this->createTask('Test workload 1', null, FailTestHandler::class);
74
        $laterTask = $this->createTask('Test workload 2', null, FailTestHandler::class);
75
        $intervalTask = $this->createTask('Test workload 3', CronExpression::factory('@daily'), FailTestHandler::class);
76
77
        /** @var TaskExecutionInterface[] $executions */
78
        $executions = [
79
            $this->createTaskExecution($singleTask, new \DateTime('-1 hour')),
80
            $this->createTaskExecution($laterTask, new \DateTime('+1 hour')),
81
            $this->createTaskExecution($intervalTask, new \DateTime('-2 hour')),
82
        ];
83
84
        $this->commandTester->execute(
85
            [
86
                'command' => $this->command->getName(),
87
            ]
88
        );
89
90
        $this->assertEquals(TaskStatus::FAILED, $executions[0]->getStatus());
91
        $this->assertNull($executions[0]->getResult());
92
        $this->assertGreaterThan(0, $executions[0]->getDuration());
93
        $this->assertGreaterThanOrEqual($executions[0]->getStartTime(), $executions[0]->getEndTime());
94
95
        $this->assertEquals(TaskStatus::PLANNED, $executions[1]->getStatus());
96
        $this->assertNull($executions[1]->getResult());
97
        $this->assertNull($executions[1]->getDuration());
98
        $this->assertNull($executions[1]->getStartTime());
99
        $this->assertNull($executions[1]->getEndTime());
100
101
        $this->assertEquals(TaskStatus::FAILED, $executions[2]->getStatus());
102
        $this->assertNull($executions[2]->getResult());
103
        $this->assertGreaterThan(0, $executions[2]->getDuration());
104
        $this->assertGreaterThanOrEqual($executions[2]->getStartTime(), $executions[2]->getEndTime());
105
106
        $result = $this->taskExecutionRepository->findAll(2, 3);
107
        $this->assertCount(1, $result);
108
109
        $this->assertEquals($intervalTask, $result[0]->getTask());
110
        $this->assertEquals(TaskStatus::PLANNED, $result[0]->getStatus());
111
        $this->assertEquals(FailTestHandler::class, $result[0]->getHandlerClass());
112
        $this->assertEquals('Test workload 3', $result[0]->getWorkload());
113
    }
114
115
    /**
116
     * {@inheritdoc}
117
     */
118
    protected function getCommand()
119
    {
120
        return new RunCommand('task:run', $this->taskRunner, $this->taskScheduler);
121
    }
122
}
123