-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathHttpClientTest.php
More file actions
112 lines (93 loc) · 3.2 KB
/
Copy pathHttpClientTest.php
File metadata and controls
112 lines (93 loc) · 3.2 KB
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
102
103
104
105
106
107
108
109
110
111
112
<?php
namespace Http\Client\Tests;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Group;
use Psr\Http\Client\ClientInterface;
use Psr\Http\Client\NetworkExceptionInterface;
/**
* @author GeLo <geloen.eric@gmail.com>
*/
abstract class HttpClientTest extends HttpBaseTest
{
protected ClientInterface $httpAdapter;
protected function setUp(): void
{
$this->httpAdapter = $this->createHttpAdapter();
}
protected function tearDown(): void
{
unset($this->httpAdapter);
}
abstract protected function createHttpAdapter(): ClientInterface;
/**
* @dataProvider requestProvider
* @group integration
*/
#[Group('integration')]
#[DataProvider('requestProvider')]
public function testSendRequest(string $method, string $uri, array $headers, ?string $body)
{
if (null != $body) {
$headers['Content-Length'] = (string) strlen($body);
}
$request = self::$requestFactory->createRequest($method, $uri);
foreach ($headers as $name => $value) {
$request = $request->withHeader($name, $value);
}
if (null !== $body) {
$request = $request->withBody(self::$streamFactory->createStream($body));
}
$response = $this->httpAdapter->sendRequest($request);
$this->assertResponse(
$response,
[
'body' => 'HEAD' === $method ? null : 'Ok',
]
);
$this->assertRequest($method, $headers, $body, '1.1');
}
/**
* @dataProvider requestWithOutcomeProvider
* @group integration
*/
#[Group('integration')]
#[DataProvider('requestWithOutcomeProvider')]
public function testSendRequestWithOutcome(array $uriAndOutcome, string $protocolVersion, array $headers, ?string $body): void
{
if ('1.0' === $protocolVersion) {
$body = null;
}
if (null != $body) {
$headers['Content-Length'] = (string) strlen($body);
}
$request = self::$requestFactory->createRequest($method = 'GET', $uriAndOutcome[0]);
foreach ($headers as $name => $value) {
$request = $request->withHeader($name, $value);
}
if (null !== $body) {
$request = $request->withBody(self::$streamFactory->createStream($body));
}
$request->withProtocolVersion($protocolVersion);
$response = $this->httpAdapter->sendRequest($request);
$outcome = $uriAndOutcome[1];
$outcome['protocolVersion'] = $protocolVersion;
$this->assertResponse($response, $outcome);
$this->assertRequest($method, $headers, $body, $protocolVersion);
}
/**
* @group integration
*/
#[Group('integration')]
public function testSendWithInvalidUri(): void
{
$request = self::$requestFactory->createRequest(
'GET',
$this->getInvalidUri(),
);
foreach (self::$defaultHeaders as $name => $value) {
$request = $request->withHeader($name, $value);
}
$this->expectException(NetworkExceptionInterface::class);
$this->httpAdapter->sendRequest($request);
}
}