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

AutoRetryTrait   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 132
Duplicated Lines 96.97 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
wmc 2
lcom 0
cbo 0
dl 128
loc 132
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\RetryableJob;
6
use Dtc\QueueBundle\Model\BaseJob;
7
8
trait AutoRetryTrait
9
{
10
    public function testAutoRetryOnFailure()
11
    {
12
        $this->drain();
13
14
        /** @var \Dtc\QueueBundle\ODM\JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
15
        $jobManager = self::$jobManager;
16
        $jobManager->setAutoRetryOnFailure(false);
17
        $job = new self::$jobClass(self::$worker, false, null);
18
        $job->fibonacci(1);
19
        $job = self::$jobManager->getJob();
20
        $job->setMaxRetries(1);
21
        $job->setMaxFailures(1);
22
        $job->setStatus(BaseJob::STATUS_FAILURE);
23
        $jobManager->saveHistory($job);
24
        self::assertEquals(RetryableJob::STATUS_MAX_FAILURES, $job->getStatus());
25
26
        $job = new self::$jobClass(self::$worker, false, null);
27
        $job->fibonacci(1);
28
        $job = self::$jobManager->getJob();
29
        $job->setMaxRetries(1);
30
        $job->setMaxFailures(2);
31
        $job->setStatus(BaseJob::STATUS_FAILURE);
32
        $jobManager->saveHistory($job);
33
        self::assertEquals(RetryableJob::STATUS_FAILURE, $job->getStatus());
34
35
        $jobManager->setAutoRetryOnFailure(true);
36
        $job = new self::$jobClass(self::$worker, false, null);
37
        $job->fibonacci(1);
38
        $job = self::$jobManager->getJob();
39
        $job->setMaxRetries(1);
40
        $job->setMaxFailures(2);
41
        $job->setStatus(BaseJob::STATUS_FAILURE);
42
        $jobManager->saveHistory($job);
43
        self::assertEquals(RetryableJob::STATUS_NEW, $job->getStatus());
44
45
        $job = self::$jobManager->getJob();
46
        $job->setStatus(BaseJob::STATUS_FAILURE);
47
        $jobManager->saveHistory($job);
48
        self::assertEquals(RetryableJob::STATUS_MAX_FAILURES, $job->getStatus());
49
50
        $job = new self::$jobClass(self::$worker, false, null);
51
        $job->fibonacci(1);
52
        $job = self::$jobManager->getJob();
53
        $job->setMaxRetries(1);
54
        $job->setMaxFailures(3);
55
        $job->setStatus(BaseJob::STATUS_FAILURE);
56
        $jobManager->saveHistory($job);
57
        self::assertEquals(RetryableJob::STATUS_NEW, $job->getStatus());
58
59
        $job = self::$jobManager->getJob();
60
        $job->setStatus(BaseJob::STATUS_FAILURE);
61
        $jobManager->saveHistory($job);
62
        self::assertEquals(RetryableJob::STATUS_MAX_RETRIES, $job->getStatus());
63
64
        $jobManager->setAutoRetryOnFailure(false);
65
        $job = new self::$jobClass(self::$worker, false, null);
66
        $job->fibonacci(1);
67
        $job = self::$jobManager->getJob();
68
        $job->setMaxRetries(1);
69
        $job->setMaxFailures(1);
70
        $job->setStatus(BaseJob::STATUS_FAILURE);
71
        $jobManager->saveHistory($job);
72
        self::assertEquals(RetryableJob::STATUS_MAX_FAILURES, $job->getStatus());
73
    }
74
75
    public function testAutoRetryOnException()
76
    {
77
        $this->drain();
78
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
79
        $jobManager = self::$jobManager;
80
        $jobManager->setAutoRetryOnFailure(false);
81
        $jobManager->setAutoRetryOnException(false);
82
        $job = new self::$jobClass(self::$worker, false, null);
83
        $job->fibonacci(1);
84
        $job = self::$jobManager->getJob();
85
        $job->setMaxRetries(1);
86
        $job->setMaxExceptions(1);
87
        $job->setStatus(BaseJob::STATUS_EXCEPTION);
88
        $jobManager->saveHistory($job);
89
        self::assertEquals(RetryableJob::STATUS_MAX_EXCEPTIONS, $job->getStatus());
90
91
        $job = new self::$jobClass(self::$worker, false, null);
92
        $job->fibonacci(1);
93
        $job = self::$jobManager->getJob();
94
        $job->setMaxRetries(1);
95
        $job->setMaxExceptions(2);
96
        $job->setStatus(BaseJob::STATUS_EXCEPTION);
97
        $jobManager->saveHistory($job);
98
        self::assertEquals(RetryableJob::STATUS_EXCEPTION, $job->getStatus());
99
100
        $jobManager->setAutoRetryOnException(true);
101
        $job = new self::$jobClass(self::$worker, false, null);
102
        $job->fibonacci(1);
103
        $job = self::$jobManager->getJob();
104
        $job->setMaxRetries(1);
105
        $job->setMaxExceptions(2);
106
        $job->setStatus(BaseJob::STATUS_EXCEPTION);
107
        $jobManager->saveHistory($job);
108
        self::assertEquals(RetryableJob::STATUS_NEW, $job->getStatus());
109
110
        $job = self::$jobManager->getJob();
111
        $job->setStatus(BaseJob::STATUS_EXCEPTION);
112
        $jobManager->saveHistory($job);
113
        self::assertEquals(RetryableJob::STATUS_MAX_EXCEPTIONS, $job->getStatus());
114
115
        $job = new self::$jobClass(self::$worker, false, null);
116
        $job->fibonacci(1);
117
        $job = self::$jobManager->getJob();
118
        $job->setMaxRetries(1);
119
        $job->setMaxExceptions(3);
120
        $job->setStatus(BaseJob::STATUS_EXCEPTION);
121
        $jobManager->saveHistory($job);
122
        self::assertEquals(RetryableJob::STATUS_NEW, $job->getStatus());
123
124
        $job = self::$jobManager->getJob();
125
        $job->setStatus(BaseJob::STATUS_EXCEPTION);
126
        $jobManager->saveHistory($job);
127
        self::assertEquals(RetryableJob::STATUS_MAX_RETRIES, $job->getStatus());
128
129
        $jobManager->setAutoRetryOnFailure(false);
130
        $job = new self::$jobClass(self::$worker, false, null);
131
        $job->fibonacci(1);
132
        $job = self::$jobManager->getJob();
133
        $job->setMaxRetries(1);
134
        $job->setMaxExceptions(1);
135
        $job->setStatus(BaseJob::STATUS_EXCEPTION);
136
        $jobManager->saveHistory($job);
137
        self::assertEquals(RetryableJob::STATUS_MAX_EXCEPTIONS, $job->getStatus());
138
    }
139
}
140