Skip to content

Commit 2ab928a

Browse files
fixed query to find pending executions
1 parent b6fd363 commit 2ab928a

File tree

2 files changed

+199
-7
lines changed

2 files changed

+199
-7
lines changed

src/Entity/TaskExecutionRepository.php

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -129,17 +129,13 @@ public function findByTaskUuid($taskUuid)
129129
/**
130130
* {@inheritdoc}
131131
*/
132-
public function findScheduled(\DateTime $dateTime = null)
132+
public function findScheduled()
133133
{
134-
if ($dateTime === null) {
135-
$dateTime = new \DateTime();
136-
}
137-
138134
return $this->createQueryBuilder('e')
139135
->innerJoin('e.task', 't')
140-
->where('e.status = :status AND e.scheduleTime < :dateTime')
136+
->where('e.status = :status')
137+
->andWhere('e.scheduleTime < NOW()')
141138
->setParameter('status', TaskStatus::PLANNED)
142-
->setParameter('dateTime', $dateTime)
143139
->getQuery()
144140
->getResult();
145141
}
Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
<?php
2+
3+
namespace Task\TaskBundle\Tests\Functional\Command;
4+
5+
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
6+
use Task\Storage\TaskExecutionRepositoryInterface;
7+
use Task\TaskBundle\Entity\Task;
8+
use Task\TaskBundle\Entity\TaskExecution;
9+
use Task\TaskBundle\Tests\Functional\TestHandler;
10+
use Task\TaskStatus;
11+
12+
/**
13+
* Tests for TaskExecutionRepository.
14+
*/
15+
class TaskExecutionRepositoryTest extends KernelTestCase
16+
{
17+
/**
18+
* @var TaskExecutionRepositoryInterface
19+
*/
20+
protected $taskExecutionRepository;
21+
22+
/**
23+
* @var TaskExecutionRepositoryInterface
24+
*/
25+
protected $taskRepository;
26+
27+
public function setUp()
28+
{
29+
self::bootKernel();
30+
31+
$this->taskExecutionRepository = self::$kernel->getContainer()->get('task.storage.task_execution');
32+
$this->taskRepository = self::$kernel->getContainer()->get('task.storage.task');
33+
}
34+
35+
public function testSave(Task $task = null, \DateTime $scheduleTime = null, $status = TaskStatus::PLANNED)
36+
{
37+
if (!$scheduleTime) {
38+
$scheduleTime = new \DateTime();
39+
}
40+
41+
if (!$task) {
42+
$task = $this->createTask();
43+
$this->taskRepository->save($task);
44+
}
45+
46+
$execution = $this->createTaskExecution($task, $scheduleTime, $status);
47+
$this->taskExecutionRepository->save($execution);
48+
49+
$result = $this->taskExecutionRepository->findByUuid($execution->getUuid());
50+
51+
$this->assertEquals($execution->getUuid(), $result->getUuid());
52+
$this->assertEquals($scheduleTime, $result->getScheduleTime());
53+
$this->assertEquals($status, $result->getStatus());
54+
$this->assertEquals($task->getUuid(), $result->getTask()->getUuid());
55+
56+
return $execution;
57+
}
58+
59+
public function testRemove()
60+
{
61+
$execution = $this->testSave();
62+
63+
$this->taskExecutionRepository->remove($execution);
64+
65+
$this->assertNull($this->taskExecutionRepository->findByUuid($execution->getUuid()));
66+
}
67+
68+
public function testFindAll()
69+
{
70+
$task = $this->createTask();
71+
$this->taskRepository->save($task);
72+
73+
$executions = [];
74+
for ($i = 0; $i < 3; $i++) {
75+
$execution = $this->testSave($task);
76+
$executions[$execution->getUuid()] = $execution;
77+
}
78+
79+
$result = $this->taskExecutionRepository->findAll();
80+
81+
$this->assertCount(3, $result);
82+
foreach ($result as $item) {
83+
$this->assertArrayHasKey($item->getUuid(), $executions);
84+
unset($executions[$item->getUuid()]);
85+
}
86+
}
87+
88+
public function testFindAllPaginated()
89+
{
90+
$task = $this->createTask();
91+
$this->taskRepository->save($task);
92+
93+
$executions = [];
94+
for ($i = 0; $i < 3; $i++) {
95+
$execution = $this->testSave($task);
96+
$executions[$execution->getUuid()] = $execution;
97+
}
98+
99+
$result = $this->taskExecutionRepository->findAll(1, 2);
100+
101+
$this->assertCount(2, $result);
102+
foreach ($result as $item) {
103+
$this->assertArrayHasKey($item->getUuid(), $executions);
104+
unset($executions[$item->getUuid()]);
105+
}
106+
107+
$result = $this->taskExecutionRepository->findAll(2, 2);
108+
109+
$this->assertCount(1, $result);
110+
foreach ($result as $item) {
111+
$this->assertArrayHasKey($item->getUuid(), $executions);
112+
unset($executions[$item->getUuid()]);
113+
}
114+
115+
$this->assertEmpty($executions);
116+
}
117+
118+
public function testFindPending()
119+
{
120+
$execution = $this->testSave();
121+
$this->assertNotNull($this->taskExecutionRepository->findPending($execution->getTask()));
122+
123+
$execution = $this->testSave(null, null, TaskStatus::RUNNING);
124+
$this->assertNotNull($this->taskExecutionRepository->findPending($execution->getTask()));
125+
126+
$execution = $this->testSave(null, null, TaskStatus::COMPLETED);
127+
$this->assertNull($this->taskExecutionRepository->findPending($execution->getTask()));
128+
129+
$execution = $this->testSave(null, null, TaskStatus::FAILED);
130+
$this->assertNull($this->taskExecutionRepository->findPending($execution->getTask()));
131+
}
132+
133+
public function testFindByUuid()
134+
{
135+
$execution = $this->testSave();
136+
137+
$result = $this->taskExecutionRepository->findByUuid($execution->getUuid());
138+
$this->assertEquals($execution->getUuid(), $result->getUuid());
139+
}
140+
141+
public function testFindByTask()
142+
{
143+
$execution = $this->testSave();
144+
145+
$result = $this->taskExecutionRepository->findByTask($execution->getTask());
146+
147+
$this->assertCount(1, $result);
148+
$this->assertEquals($execution->getTask()->getUuid(), $result[0]->getTask()->getUuid());
149+
}
150+
151+
public function testFindByTaskUuid()
152+
{
153+
$execution = $this->testSave();
154+
155+
$result = $this->taskExecutionRepository->findByTaskUuid($execution->getTask()->getUuid());
156+
157+
$this->assertCount(1, $result);
158+
$this->assertEquals($execution->getTask()->getUuid(), $result[0]->getTask()->getUuid());
159+
}
160+
161+
public function testFindScheduledPast()
162+
{
163+
$task = $this->createTask();
164+
$this->taskRepository->save($task);
165+
166+
$execution = $this->testSave($task, new \DateTime(('-1 hour')));
167+
168+
$result = $this->taskExecutionRepository->findScheduled();
169+
170+
$this->assertCount(1, $result);
171+
$this->assertEquals($execution->getUuid(), $result[0]->getUuid());
172+
}
173+
174+
public function testFindScheduledFuture()
175+
{
176+
$task = $this->createTask();
177+
$this->taskRepository->save($task);
178+
179+
$this->testSave($task, new \DateTime(('+1 hour')));
180+
181+
$this->assertEmpty($this->taskExecutionRepository->findScheduled());
182+
}
183+
184+
private function createTask($handlerClass = TestHandler::class)
185+
{
186+
return new Task($handlerClass);
187+
}
188+
189+
private function createTaskExecution(Task $task, \DateTime $scheduleTime, $status = TaskStatus::PLANNED)
190+
{
191+
$execution = new TaskExecution($task, $task->getHandlerClass(), $scheduleTime);
192+
$execution->setStatus($status);
193+
194+
return $execution;
195+
}
196+
}

0 commit comments

Comments
 (0)