Completed
Pull Request — master (#41)
by Wachter
07:09
created

RunCommandTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 118
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 9

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 3
c 1
b 0
f 0
lcom 2
cbo 9
dl 0
loc 118
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testExecute() 0 53 1
A testExecuteWithFail() 0 53 1
A getCommand() 0 4 1
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\Tests\Functional\BaseCommandTestCase;
17
use Task\TaskBundle\Tests\Functional\FailTestHandler;
18
use Task\TaskBundle\Tests\Functional\TestHandler;
19
use Task\TaskStatus;
20
21
/**
22
 * Tests for RunCommand.
23
 */
24
class RunCommandTest extends BaseCommandTestCase
25
{
26
    public function testExecute()
27
    {
28
        $singleTask = $this->createTask('Test workload 1');
29
        $laterTask = $this->createTask('Test workload 2');
30
        $intervalTask = $this->createTask('Test workload 3', CronExpression::factory('@daily'));
31
32
        /** @var TaskExecutionInterface[] $executions */
33
        $executions = [
34
            $this->createTaskExecution($singleTask, new \DateTime('-1 hour')),
35
            $this->createTaskExecution($laterTask, new \DateTime('+1 hour')),
36
            $this->createTaskExecution($intervalTask, new \DateTime('-2 hour')),
37
        ];
38
39
        $this->commandTester->execute(
40
            [
41
                'command' => $this->command->getName(),
42
            ]
43
        );
44
45
        $execution = $this->taskExecutionRepository->findByUuid($executions[0]->getUuid());
46
        $this->assertEquals(TaskStatus::COMPLETED, $execution->getStatus());
47
        $this->assertEquals(strrev('Test workload 1'), $execution->getResult());
48
        $this->assertGreaterThan(0, $execution->getDuration());
49
        $this->assertGreaterThanOrEqual($execution->getStartTime(), $execution->getEndTime());
50
51
        $execution = $this->taskExecutionRepository->findByUuid($executions[1]->getUuid());
52
        $this->assertEquals(TaskStatus::PLANNED, $execution->getStatus());
53
        $this->assertNull($execution->getResult());
54
        $this->assertNull($execution->getDuration());
55
        $this->assertNull($execution->getStartTime());
56
        $this->assertNull($execution->getEndTime());
57
58
        $execution = $this->taskExecutionRepository->findByUuid($executions[2]->getUuid());
59
        $this->assertEquals(TaskStatus::COMPLETED, $execution->getStatus());
60
        $this->assertEquals(strrev('Test workload 3'), $execution->getResult());
61
        $this->assertGreaterThan(0, $execution->getDuration());
62
        $this->assertGreaterThanOrEqual($execution->getStartTime(), $execution->getEndTime());
63
64
        $result = $this->taskExecutionRepository->findAll(2, 3);
65
        $this->assertCount(1, $result);
66
67
        $task = $result[0]->getTask();
68
        $this->assertEquals($intervalTask->getUuid(), $task->getUuid());
69
        $this->assertEquals($intervalTask->getHandlerClass(), $task->getHandlerClass());
70
        $this->assertEquals($intervalTask->getWorkload(), $task->getWorkload());
71
        $this->assertLessThanOrEqual($intervalTask->getFirstExecution(), $task->getFirstExecution());
72
        $this->assertLessThanOrEqual($intervalTask->getLastExecution(), $task->getLastExecution());
73
        $this->assertEquals($intervalTask->getInterval(), $task->getInterval());
74
75
        $this->assertEquals(TaskStatus::PLANNED, $result[0]->getStatus());
76
        $this->assertEquals(TestHandler::class, $result[0]->getHandlerClass());
77
        $this->assertEquals('Test workload 3', $result[0]->getWorkload());
78
    }
79
80
    public function testExecuteWithFail()
81
    {
82
        $singleTask = $this->createTask('Test workload 1', null, FailTestHandler::class);
83
        $laterTask = $this->createTask('Test workload 2', null, FailTestHandler::class);
84
        $intervalTask = $this->createTask('Test workload 3', CronExpression::factory('@daily'), FailTestHandler::class);
85
86
        /** @var TaskExecutionInterface[] $executions */
87
        $executions = [
88
            $this->createTaskExecution($singleTask, new \DateTime('-1 hour')),
89
            $this->createTaskExecution($laterTask, new \DateTime('+1 hour')),
90
            $this->createTaskExecution($intervalTask, new \DateTime('-2 hour')),
91
        ];
92
93
        $this->commandTester->execute(
94
            [
95
                'command' => $this->command->getName(),
96
            ]
97
        );
98
99
        $execution = $this->taskExecutionRepository->findByUuid($executions[0]->getUuid());
100
        $this->assertEquals(TaskStatus::FAILED, $execution->getStatus());
101
        $this->assertNull($execution->getResult());
102
        $this->assertGreaterThan(0, $execution->getDuration());
103
        $this->assertGreaterThanOrEqual($execution->getStartTime(), $execution->getEndTime());
104
105
        $execution = $this->taskExecutionRepository->findByUuid($executions[1]->getUuid());
106
        $this->assertEquals(TaskStatus::PLANNED, $execution->getStatus());
107
        $this->assertNull($execution->getResult());
108
        $this->assertNull($execution->getDuration());
109
        $this->assertNull($execution->getStartTime());
110
        $this->assertNull($execution->getEndTime());
111
112
        $execution = $this->taskExecutionRepository->findByUuid($executions[2]->getUuid());
113
        $this->assertEquals(TaskStatus::FAILED, $execution->getStatus());
114
        $this->assertNull($execution->getResult());
115
        $this->assertGreaterThan(0, $execution->getDuration());
116
        $this->assertGreaterThanOrEqual($execution->getStartTime(), $execution->getEndTime());
117
118
        $result = $this->taskExecutionRepository->findAll(2, 3);
119
        $this->assertCount(1, $result);
120
121
        $task = $result[0]->getTask();
122
        $this->assertEquals($intervalTask->getUuid(), $task->getUuid());
123
        $this->assertEquals($intervalTask->getHandlerClass(), $task->getHandlerClass());
124
        $this->assertEquals($intervalTask->getWorkload(), $task->getWorkload());
125
        $this->assertLessThanOrEqual($intervalTask->getFirstExecution(), $task->getFirstExecution());
126
        $this->assertLessThanOrEqual($intervalTask->getLastExecution(), $task->getLastExecution());
127
        $this->assertEquals($intervalTask->getInterval(), $task->getInterval());
128
129
        $this->assertEquals(TaskStatus::PLANNED, $result[0]->getStatus());
130
        $this->assertEquals(FailTestHandler::class, $result[0]->getHandlerClass());
131
        $this->assertEquals('Test workload 3', $result[0]->getWorkload());
132
    }
133
134
    /**
135
     * {@inheritdoc}
136
     */
137
    protected function getCommand()
138
    {
139
        return self::$kernel->getContainer()->get('task.command.run');
140
    }
141
}
142