-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathStatusCodeMatcher.php
70 lines (60 loc) · 1.76 KB
/
StatusCodeMatcher.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
declare(strict_types=1);
namespace Core\TestCase;
use PHPUnit\Framework\TestCase;
class StatusCodeMatcher
{
/**
* @var int|null
*/
private $statusCode;
/**
* @var int|null
*/
private $lowerStatusCode;
/**
* @var int|null
*/
private $upperStatusCode;
private $assertStatusRange = false;
private $testCase;
/**
* Creates a new StatusCodeMatcher object.
*/
public function __construct(TestCase $testCase)
{
$this->testCase = $testCase;
}
/**
* Sets statusCode of the object to the value provided.
*/
public function setStatusCode(int $statusCode): void
{
$this->statusCode = $statusCode;
}
/**
* Sets an expected status code range. Used in case the test case expects a status from a range of status codes.
*/
public function setStatusRange(int $lowerStatusCode, int $upperStatusCode): void
{
$this->assertStatusRange = true;
$this->lowerStatusCode = $lowerStatusCode;
$this->upperStatusCode = $upperStatusCode;
}
/**
* Assert required assertions according to the properties set within the object.
*/
public function assert(int $statusCode)
{
if (isset($this->statusCode)) {
$this->testCase->assertEquals($this->statusCode, $statusCode, "Status is not $this->statusCode");
return;
}
if (!$this->assertStatusRange) {
return;
}
$message = "Status is not between $this->lowerStatusCode and $this->upperStatusCode";
$this->testCase->assertGreaterThanOrEqual($this->lowerStatusCode, $statusCode, $message);
$this->testCase->assertLessThanOrEqual($this->upperStatusCode, $statusCode, $message);
}
}