-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathRelayTest.php
101 lines (82 loc) · 2.33 KB
/
RelayTest.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
namespace Relay;
use ArrayObject;
use InvalidArgumentException;
use TypeError;
use Zend\Diactoros\ServerRequestFactory;
use Zend\Diactoros\Response;
class RelayTest extends \PHPUnit\Framework\TestCase
{
protected $responder;
protected function setUp()
{
$this->responder = function ($request, $next) {
return new Response();
};
}
protected function assertRelay($relay)
{
FakeMiddleware::$count = 0;
// relay once
$response = $relay->handle(ServerRequestFactory::fromGlobals());
$actual = (string) $response->getBody();
$this->assertSame('<3<2<1', $actual);
// relay again
$response = $relay->handle(ServerRequestFactory::fromGlobals());
$actual = (string) $response->getBody();
$this->assertSame('<6<5<4', $actual);
}
public function testArrayQueue()
{
$queue = [
new FakeMiddleware(),
new FakeMiddleware(),
new FakeMiddleware(),
$this->responder,
];
$this->assertRelay(new Relay($queue));
}
public function testTraversableQueue()
{
$queue = new ArrayObject([
new FakeMiddleware(),
new FakeMiddleware(),
new FakeMiddleware(),
$this->responder,
]);
$this->assertRelay(new Relay($queue));
}
public function testBadQueue()
{
$this->expectException(TypeError::CLASS);
$relay = new Relay('bad');
}
public function testEmptyQueue()
{
$this->expectException(InvalidArgumentException::CLASS);
$this->expectExceptionMessage('$queue cannot be empty');
new Relay([]);
}
public function testResolverEntries()
{
$queue = [
FakeMiddleware::CLASS,
FakeMiddleware::CLASS,
FakeMiddleware::CLASS,
$this->responder,
];
$resolver = new FakeResolver();
$this->assertRelay(new Relay($queue, $resolver));
}
public function testRequestHandlerInQueue()
{
$queue = [
new FakeMiddleware(),
new FakeMiddleware(),
new FakeMiddleware(),
$this->responder,
];
$requestHandler = new Relay($queue);
$this->assertRelay(new Relay([$requestHandler]));
}
}