Passed
Pull Request — master (#57)
by Matthew
07:32
created

WorkerManagerTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 92
Duplicated Lines 40.22 %

Coupling/Cohesion

Components 1
Dependencies 8

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 8
dl 37
loc 92
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\Manager;
4
5
use Dtc\QueueBundle\Model\BaseJob;
6
use Dtc\QueueBundle\Model\Job;
7
use Dtc\QueueBundle\Model\JobTiming;
8
use Dtc\QueueBundle\Manager\JobTimingManager;
9
use Dtc\QueueBundle\Model\Run;
10
use Dtc\QueueBundle\Manager\RunManager;
11
use Dtc\QueueBundle\Tests\FibonacciWorker;
12
use Dtc\QueueBundle\Tests\StaticJobManager;
13
use Dtc\QueueBundle\Manager\WorkerManager;
14
use Dtc\QueueBundle\EventDispatcher\EventDispatcher;
15
use PHPUnit\Framework\TestCase;
16
17
class WorkerManagerTest extends TestCase
18
{
19
    protected $jobManager;
20
    protected $worker;
21
22
    /** @var WorkerManager */
23
    protected $workerManager;
24
    protected $eventDispatcher;
25
26
    public function setup()
27
    {
28
        $jobTimingManager = new JobTimingManager(JobTiming::class, false);
29
        $runManager = new RunManager(Run::class);
30
        $this->jobManager = new StaticJobManager($runManager, $jobTimingManager, Job::class);
31
        $this->worker = new FibonacciWorker();
32
        $this->worker->setJobManager($this->jobManager);
33
        $this->eventDispatcher = new EventDispatcher();
34
        $this->workerManager = new WorkerManager($this->jobManager, $this->eventDispatcher);
35
    }
36
37
    public function testAddWorker()
38
    {
39
        $this->workerManager->addWorker($this->worker);
40
        $worker = $this->workerManager->getWorker($this->worker->getName());
41
        self::assertEquals($this->worker, $worker);
42
43
        $failed = false;
44
        try {
45
            $this->workerManager->addWorker($this->worker);
46
            $failed = true;
47
        } catch (\Exception $e) {
48
            self::assertTrue(true);
49
        }
50
        self::assertFalse($failed);
51
    }
52
53
    public function testRun()
54
    {
55
        $this->workerManager->addWorker($this->worker);
56
        // Create a job
57
        $this->worker->later()->fibonacci(20);
58
59
        // run the job
60
        $job = $this->workerManager->run();
61
62
        self::assertNotNull($job, 'Job object should not be null');
63
        self::assertEquals(
64
            BaseJob::STATUS_SUCCESS,
65
            $job->getStatus(),
66
                'Worker run should be successful'
67
        );
68
    }
69
70
    public function testErrorRun()
71
    {
72
        $this->workerManager->addWorker($this->worker);
73
        // Create a job
74
        $this->worker->later()->exceptionThrown(20);
75
76
        // run the job
77
        $job = $this->workerManager->run();
78
79
        self::assertNotNull($job, 'Job object should not be null');
80
        self::assertEquals(
81
            BaseJob::STATUS_EXCEPTION,
82
            $job->getStatus(),
83
                'Worker run should be not successful'
84
        );
85
        self::assertNotEmpty($job->getMessage(), 'Error message should not be empty');
86
    }
87
88
    public function testRunJob()
89
    {
90
        $this->workerManager->addWorker($this->worker);
91
92
        // Create a job
93
        $job = $this->worker->later()->fibonacciFile(20);
94
        $job = $this->workerManager->runJob($job);
95
96
        self::assertEquals(
97
            BaseJob::STATUS_SUCCESS,
98
            $job->getStatus(),
99
                'Worker run should be successful'
100
        );
101
102
        self::assertEquals(
103
            '20: 6765',
104
            file_get_contents($this->worker->getFilename()),
105
                'Result of fibonacciFile() must match'
106
        );
107
    }
108
}
109