Passed
Push — master ( f67228...ea1bad )
by Matthew
08:44
created

RunManagerTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 99
Duplicated Lines 55.56 %

Coupling/Cohesion

Components 1
Dependencies 8

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 8
dl 55
loc 99
rs 10
c 0
b 0
f 0

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace Dtc\QueueBundle\Tests\ORM;
4
5
use Doctrine\Bundle\DoctrineBundle\Registry;
6
use Doctrine\ORM\EntityManager;
7
use Dtc\QueueBundle\Entity\RunArchive;
8
use Dtc\QueueBundle\ORM\RunManager;
9
use PHPUnit\Framework\TestCase;
10
use ProxyManager\Factory\LazyLoadingValueHolderFactory;
11
12
class RunManagerTest extends TestCase
13
{
14
    protected static $runManager;
15
16
    public static function setUpBeforeClass()
17
    {
18
        JobManagerTest::setUpBeforeClass();
19
        $jobManager = JobManagerTest::$jobManager;
20
        $runClass = \Dtc\QueueBundle\Entity\Run::class;
21
        $runArchiveClass = \Dtc\QueueBundle\Entity\RunArchive::class;
22
        $runManager = new \Dtc\QueueBundle\ORM\RunManager($jobManager->getObjectManager(), $runClass, RunArchive::class);
23
        self::$runManager = $runManager;
24
    }
25
26
    public function testPruneStaleRuns()
27
    {
28
        /** @var RunManager $runManager */
29
        $runManager = self::$runManager;
30
        $runClass = $runManager->getRunClass();
31
        $objectManager = $runManager->getObjectManager();
32
        $runRepository = $objectManager->getRepository($runClass);
33
        self::assertEmpty($runRepository->findAll());
34
        $runArchiveRepository = $objectManager->getRepository($runManager->getRunArchiveClass());
35
        self::assertEmpty($runArchiveRepository->findAll());
36
37
        $run = new $runClass();
38
        $time = time() - 96400;
39
        $date = new \DateTime("@$time");
40
41
        $run->setStartedAt($date);
42
        $run->setLastHeartbeatAt($date);
43
        $objectManager->persist($run);
44
        $objectManager->flush($run);
45
        self::assertCount(1, $runRepository->findAll());
46
47
        $count = $runManager->pruneStalledRuns();
48
        self::assertEquals(1, $count);
49
        self::assertEmpty($runRepository->findAll());
50
        $count = $runManager->pruneStalledRuns();
51
        self::assertEquals(0, $count);
52
    }
53
54
    public function testCloseEm()
55
    {
56
        /** @var RunManager $runManager */
57
        $runManager = self::$runManager;
58
59
        $factory = new LazyLoadingValueHolderFactory();
60
        /** @var ContainerInterface $container */
61
        $container = new ContainerExtended();
62
        $objectManager = $runManager->getObjectManager();
63
        $container->set(
64
            'doctrine.orm.default_entity_manager',
65
            $factory->createProxy(
66
                EntityManager::class,
67
                function (&$wrappedObject, $proxy, $method, $parameters, &$initializer) use ($objectManager) {
68
                    $wrappedObject = $objectManager;
69
                    $initializer = null;
70
                }
71
            )
72
        );
73
        $registry = new Registry($container, [], ['default' => 'doctrine.orm.default_entity_manager'], null, 'default');
74
        $runManager->setRegistry($registry);
75
        $runManager->setEntityManagerName('default');
76
77
        $run = $runManager->runStart($start = microtime(true));
78
        $runManager->getObjectManager()->close();
79
        $runManager->runStop($run, $start);
80
    }
81
82
    public function testCloseEm2()
83
    {
84
        /** @var RunManager $runManager */
85
        $runManager = self::$runManager;
86
87
        $factory = new LazyLoadingValueHolderFactory();
88
        /** @var ContainerInterface $container */
89
        $container = new ContainerExtended();
90
        $objectManager = $runManager->getObjectManager();
91
        $container->set(
92
            'doctrine.orm.default_entity_manager',
93
            $factory->createProxy(
94
                EntityManager::class,
95
                function (&$wrappedObject, $proxy, $method, $parameters, &$initializer) use ($objectManager) {
96
                    $wrappedObject = $objectManager;
97
                    $initializer = null;
98
                }
99
            )
100
        );
101
        $registry = new Registry($container, [], ['default' => 'doctrine.orm.default_entity_manager'], null, 'default');
102
        $runManager->setRegistry($registry);
103
        $runManager->setEntityManagerName('default');
104
105
        $run = $runManager->runStart($start = microtime(true));
106
        $runManager->getObjectManager()->close();
107
        $registry->resetManager('default');
108
        $runManager->runStop($run, $start);
109
    }
110
}
111