Skip to content

Commit 157b684

Browse files
added doctrine testcases
1 parent e810464 commit 157b684

File tree

8 files changed

+140
-7
lines changed

8 files changed

+140
-7
lines changed

src/Entity/TaskRepository.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,36 @@ class TaskRepository extends EntityRepository
99
public function findScheduled()
1010
{
1111
$query = $this->createQueryBuilder('task')
12-
->where('completed = FALSE')
13-
->andWhere('executionDate < :date')
12+
->where('task.completed = :completed')
13+
->andWhere('task.executionDate < :date')
14+
->setParameter('completed', false)
1415
->setParameter('date', new \DateTime())
1516
->getQuery();
1617

1718
return $query->getResult();
1819
}
1920

21+
/**
22+
* @param string $uuid
23+
*
24+
* @return Task
25+
*/
2026
public function findByUuid($uuid)
2127
{
22-
return $this->findBy(['uuid' => $uuid]);
28+
$query = $this->createQueryBuilder('task')
29+
->where('task.uuid = :uuid')
30+
->setParameter('uuid', $uuid)
31+
->getQuery();
32+
33+
return $query->getSingleResult();
34+
}
35+
36+
public function deleteAll()
37+
{
38+
$query = $this->_em->createQueryBuilder()
39+
->delete($this->_entityName, 'task')
40+
->getQuery();
41+
42+
$query->execute();
2343
}
2444
}

src/Resources/config/doctrine/Task.orm.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
33
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
5-
<entity name="Task\TaskBundle\Entity\TaskContainer"
5+
<entity name="Task\TaskBundle\Entity\Task"
66
repository-class="Task\TaskBundle\Entity\TaskRepository"
77
table="tasks">
88

@@ -11,7 +11,7 @@
1111
</id>
1212

1313
<field name="task" type="object"/>
14-
<field name="uuid" type="string" length="25"/>
14+
<field name="uuid" type="string" length="100"/>
1515
<field name="executionDate" type="datetime"/>
1616
<field name="completed" type="boolean"/>
1717

src/Resources/config/storage/doctrine.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,17 @@
33
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
55
<services>
6+
<service id="task.storage.repository"
7+
class="Task\TaskBundle\Entity\TaskRepository"
8+
factory-service="doctrine.orm.entity_manager"
9+
factory-method="getRepository"
10+
public="false">
11+
<argument type="string">TaskBundle:Task</argument>
12+
</service>
13+
614
<service id="task.storage" class="Task\TaskBundle\Storage\DoctrineStorage">
715
<argument type="service" id="doctrine.orm.entity_manager"/>
16+
<argument type="service" id="task.storage.repository"/>
817
</service>
918
</services>
1019
</container>

src/Storage/DoctrineStorage.php

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,25 @@ public function store(TaskInterface $task)
4343
*/
4444
public function findScheduled()
4545
{
46-
return $this->taskRepository->findScheduled();
46+
return array_map(
47+
function (TaskEntity $entity) {
48+
return $entity->getTask();
49+
},
50+
$this->taskRepository->findScheduled()
51+
);
4752
}
4853

4954
/**
5055
* {@inheritdoc}
5156
*/
5257
public function findAll()
5358
{
54-
return $this->taskRepository->findAll();
59+
return array_map(
60+
function (TaskEntity $entity) {
61+
return $entity->getTask();
62+
},
63+
$this->taskRepository->findAll()
64+
);
5565
}
5666

5767
/**
@@ -62,6 +72,16 @@ public function persist(TaskInterface $task)
6272
$entity = $this->taskRepository->findByUuid($task->getUuid());
6373
$this->setTask($entity, $task);
6474

75+
$this->entityManager->persist($entity);
76+
$this->entityManager->flush();
77+
}
78+
79+
/**
80+
* {@inheritdoc}
81+
*/
82+
public function clear()
83+
{
84+
$this->taskRepository->deleteAll();
6585
$this->entityManager->flush();
6686
}
6787

tests/Functional/BootstrapTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
66
use Task\SchedulerInterface;
77
use Task\Storage\ArrayStorage;
8+
use Task\TaskBundle\Storage\DoctrineStorage;
89

910
class BootstrapTest extends KernelTestCase
1011
{
@@ -21,6 +22,9 @@ public function testBootstrap()
2122
case 'array':
2223
$this->assertInstanceOf(ArrayStorage::class, $storage);
2324
break;
25+
case 'doctrine':
26+
$this->assertInstanceOf(DoctrineStorage::class, $storage);
27+
break;
2428
default:
2529
$this->fail('storage not supported');
2630
break;

tests/Functional/SchedulerTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,21 @@ protected function setUp()
3232

3333
public function testSchedule()
3434
{
35+
$this->storage->clear();
36+
3537
$this->scheduler->schedule(new Task('test', 'workload'));
3638

3739
$scheduled = $this->storage->findScheduled();
3840
$this->assertCount(1, $scheduled);
3941
$this->assertEquals('test', $scheduled[0]->getTaskName());
4042
$this->assertEquals('workload', $scheduled[0]->getWorkload());
43+
$this->assertFalse($scheduled[0]->isCompleted());
4144
}
4245

4346
public function testRun()
4447
{
48+
$this->storage->clear();
49+
4550
$this->scheduler->schedule(new Task('test', 'workload'));
4651
$this->scheduler->run();
4752

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
namespace Unit\Storage;
4+
5+
use Doctrine\ORM\EntityManagerInterface;
6+
use Prophecy\Argument;
7+
use Task\TaskBundle\Entity\Task as TaskEntity;
8+
use Task\TaskBundle\Entity\TaskRepository;
9+
use Task\TaskBundle\Storage\DoctrineStorage;
10+
use Task\TaskInterface;
11+
12+
class DoctrineStorageTest extends \PHPUnit_Framework_TestCase
13+
{
14+
public function storeDataProvider()
15+
{
16+
return [
17+
[new \DateTime(), true, '123-123-123'],
18+
[new \DateTime(), true, '321-321-321'],
19+
[new \DateTime('1 day ago'), true, '321-321-321'],
20+
[new \DateTime(), false, '123-123-123'],
21+
];
22+
}
23+
24+
/**
25+
* @dataProvider storeDataProvider
26+
*/
27+
public function testStore($date, $completed, $uuid)
28+
{
29+
$entityManager = $this->prophesize(EntityManagerInterface::class);
30+
$repository = $this->prophesize(TaskRepository::class);
31+
32+
$storage = new DoctrineStorage($entityManager->reveal(), $repository->reveal());
33+
34+
$task = $this->prophesize(TaskInterface::class);
35+
$task->getUuid()->willReturn($uuid);
36+
$task->isCompleted()->willReturn($completed);
37+
$task->getExecutionDate()->willReturn($date);
38+
39+
$storage->store($task->reveal());
40+
41+
$entityManager->persist(
42+
Argument::that(
43+
function (TaskEntity $entity) use ($date, $completed, $uuid) {
44+
$this->assertEquals($uuid, $entity->getUuid());
45+
$this->assertEquals($completed, $entity->isCompleted());
46+
$this->assertEquals($date, $entity->getExecutionDate());
47+
48+
return true;
49+
}
50+
)
51+
)->shouldBeCalledTimes(1);
52+
$entityManager->flush()->shouldBeCalledTimes(1);
53+
}
54+
}

tests/app/TestKernel.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public function registerContainerConfiguration(LoaderInterface $loader)
4343
$loader->load(sprintf('%s/config/config.%s.yml', __DIR__, $this->storage));
4444
}
4545

46+
/**
47+
* {@inheritdoc}
48+
*/
4649
protected function buildContainer()
4750
{
4851
$container = parent::buildContainer();
@@ -53,6 +56,24 @@ protected function buildContainer()
5356

5457
return $container;
5558
}
59+
60+
/**
61+
* {@inheritdoc}
62+
*/
63+
protected function initializeContainer()
64+
{
65+
$fresh = false;
66+
67+
$container = $this->buildContainer();
68+
$container->compile();
69+
70+
$this->container = $container;
71+
$this->container->set('kernel', $this);
72+
73+
if (!$fresh && $this->container->has('cache_warmer')) {
74+
$this->container->get('cache_warmer')->warmUp($this->container->getParameter('kernel.cache_dir'));
75+
}
76+
}
5677
}
5778

5879
class TestHandler implements \Task\Handler\HandlerInterface

0 commit comments

Comments
 (0)