1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace DeGraciaMathieu\Clike\Tests; |
4
|
|
|
|
5
|
|
|
use Exception; |
6
|
|
|
use PHPUnit\Framework\TestCase; |
7
|
|
|
use DeGraciaMathieu\EasyBreaker\Breaker; |
8
|
|
|
use DeGraciaMathieu\EasyBreaker\CircuitBreaker; |
9
|
|
|
|
10
|
|
|
class CircuitBreakerTest extends TestCase |
11
|
|
|
{ |
12
|
|
|
/** |
13
|
|
|
* @test |
14
|
|
|
*/ |
15
|
|
|
public function process_with_break() |
16
|
|
|
{ |
17
|
|
|
$firstBreaker = $this->makeBreaker($message = "it's realy broken.", $exception = Exception::class); |
|
|
|
|
18
|
|
|
$secondBreaker = $this->makeBreakerWithCustomException($customMessage = "it's realy broken.", CustomException::class); |
19
|
|
|
$thirdBreaker = $this->makeBreaker($message = "it's realy realy broken.", $exception = Exception::class); |
|
|
|
|
20
|
|
|
|
21
|
|
|
$results = (new CircuitBreaker()) |
22
|
|
|
->addBreaker($firstBreaker) |
23
|
|
|
->addBreaker($secondBreaker) |
24
|
|
|
->addBreaker($thirdBreaker) |
25
|
|
|
->closure(function(){ |
26
|
|
|
throw new Exception(); |
27
|
|
|
}); |
28
|
|
|
|
29
|
|
|
|
30
|
|
|
$this->assertNotNull($results); |
31
|
|
|
$this->assertEquals(2, count($results)); |
32
|
|
|
$this->assertEquals($results[0], "it's realy broken."); |
33
|
|
|
$this->assertEquals($results[1], "it's realy realy broken."); |
34
|
|
|
} |
35
|
|
|
|
36
|
|
|
/** |
37
|
|
|
* @test |
38
|
|
|
*/ |
39
|
|
|
public function process_without_break() |
40
|
|
|
{ |
41
|
|
|
$firstBreaker = $this->makeBreaker($message = "it's realy broken.", $exception = Exception::class); |
|
|
|
|
42
|
|
|
|
43
|
|
|
$results = (new CircuitBreaker()) |
44
|
|
|
->addBreaker($firstBreaker) |
45
|
|
|
->closure(function(){ |
46
|
|
|
return; |
47
|
|
|
}); |
48
|
|
|
|
49
|
|
|
|
50
|
|
|
$this->assertnull($results); |
51
|
|
|
} |
52
|
|
|
|
53
|
|
|
/** |
54
|
|
|
* @param strng $message |
55
|
|
|
* @return \DeGraciaMathieu\EasyBreaker\Breaker |
56
|
|
|
*/ |
57
|
|
|
protected function makeBreaker(string $message) :Breaker |
58
|
|
|
{ |
59
|
|
|
return $this->makeBreakerWithCustomException($message, Exception::class); |
60
|
|
|
} |
61
|
|
|
|
62
|
|
|
/** |
63
|
|
|
* @param string $message |
64
|
|
|
* @param string $exception |
65
|
|
|
* @return \DeGraciaMathieu\EasyBreaker\Breaker |
66
|
|
|
*/ |
67
|
|
|
protected function makeBreakerWithCustomException(string $message, string $exception) :Breaker |
68
|
|
|
{ |
69
|
|
|
return (new Breaker) |
70
|
|
|
->when($exception) |
71
|
|
|
->do(function(Exception $e) use($message) { |
|
|
|
|
72
|
|
|
return $message; |
73
|
|
|
}); |
74
|
|
|
} |
75
|
|
|
} |
76
|
|
|
|
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.
If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.
In this case you can add the
@ignore
PhpDoc annotation to the duplicate definition and it will be ignored.