Skip to content

Commit ca373af

Browse files
authored
Added tests to verify headers + body are set correctly on request (#3)
* Added tests to verify headers + body are set correctly on request * Updated phpspec tests
1 parent 0991db4 commit ca373af

File tree

3 files changed

+383
-19
lines changed

3 files changed

+383
-19
lines changed

spec/Request/HandlerSpec.php

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,36 +28,45 @@ function it_returns_get_request_created_by_the_http_client(
2828
RequestFactoryInterface $requestFactory,
2929
RequestInterface $request
3030
) {
31-
$requestFactory->createRequest('GET', 'http://example.com/xapi/statements', array(
32-
'X-Experience-API-Version' => '1.0.1',
33-
'Content-Type' => 'application/json',
34-
), null)->willReturn($request);
31+
$requestFactory->createRequest('GET', 'http://example.com/xapi/statements')->willReturn($request);
32+
$request->withHeader('X-Experience-API-Version', '1.0.1')->willReturn($request);
33+
$request->withHeader('Content-Type', 'application/json')->willReturn($request);
34+
$request->getBody()->willReturn($request);
35+
$request->withBody($request)->willReturn($request);
3536

3637
$this->createRequest('get', '/statements')->shouldReturn($request);
3738
$this->createRequest('GET', '/statements')->shouldReturn($request);
3839
}
3940

4041
function it_returns_post_request_created_by_the_http_client(
4142
RequestFactoryInterface $requestFactory,
42-
RequestInterface $request
43+
RequestInterface $request,
44+
\Psr\Http\Message\StreamInterface $stream
4345
) {
44-
$requestFactory->createRequest('POST', 'http://example.com/xapi/statements', array(
45-
'X-Experience-API-Version' => '1.0.1',
46-
'Content-Type' => 'application/json',
47-
), 'body')->willReturn($request);
46+
$requestFactory->createRequest('POST', 'http://example.com/xapi/statements')->willReturn($request);
47+
$request->withHeader('X-Experience-API-Version', '1.0.1')->willReturn($request);
48+
$request->withHeader('Content-Type', 'application/json')->willReturn($request);
49+
$request->getBody()->willReturn($stream);
50+
$stream->write('body')->willReturn($stream);
51+
$stream->rewind()->willReturn($stream);
52+
$request->withBody($stream)->willReturn($request);
4853

4954
$this->createRequest('post', '/statements', array(), 'body')->shouldReturn($request);
5055
$this->createRequest('POST', '/statements', array(), 'body')->shouldReturn($request);
5156
}
5257

5358
function it_returns_put_request_created_by_the_http_client(
5459
RequestFactoryInterface $requestFactory,
55-
RequestInterface $request
60+
RequestInterface $request,
61+
\Psr\Http\Message\StreamInterface $stream
5662
) {
57-
$requestFactory->createRequest('PUT', 'http://example.com/xapi/statements', array(
58-
'X-Experience-API-Version' => '1.0.1',
59-
'Content-Type' => 'application/json',
60-
), 'body')->willReturn($request);
63+
$requestFactory->createRequest('PUT', 'http://example.com/xapi/statements')->willReturn($request);
64+
$request->withHeader('X-Experience-API-Version', '1.0.1')->willReturn($request);
65+
$request->withHeader('Content-Type', 'application/json')->willReturn($request);
66+
$request->getBody()->willReturn($stream);
67+
$stream->write('body')->willReturn($stream);
68+
$stream->rewind()->willReturn($stream);
69+
$request->withBody($stream)->willReturn($request);
6170

6271
$this->createRequest('put', '/statements', array(), 'body')->shouldReturn($request);
6372
$this->createRequest('PUT', '/statements', array(), 'body')->shouldReturn($request);
@@ -67,10 +76,11 @@ function it_returns_delete_request_created_by_the_http_client(
6776
RequestFactoryInterface $requestFactory,
6877
RequestInterface $request
6978
) {
70-
$requestFactory->createRequest('DELETE', 'http://example.com/xapi/statements', array(
71-
'X-Experience-API-Version' => '1.0.1',
72-
'Content-Type' => 'application/json',
73-
), null)->willReturn($request);
79+
$requestFactory->createRequest('DELETE', 'http://example.com/xapi/statements')->willReturn($request);
80+
$request->withHeader('X-Experience-API-Version', '1.0.1')->willReturn($request);
81+
$request->withHeader('Content-Type', 'application/json')->willReturn($request);
82+
$request->getBody()->willReturn($request);
83+
$request->withBody($request)->willReturn($request);
7484

7585
$this->createRequest('delete', '/statements')->shouldReturn($request);
7686
$this->createRequest('DELETE', '/statements')->shouldReturn($request);

src/Request/Handler.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public function __construct(ClientInterface $httpClient, RequestFactoryInterface
5353
*/
5454
public function createRequest($method, $uri, array $urlParameters = array(), $body = null, array $headers = array())
5555
{
56+
5657
if (!in_array(strtoupper($method), array('GET', 'POST', 'PUT', 'DELETE'))) {
5758
throw new \InvalidArgumentException(sprintf('"%s" is no valid HTTP method (expected one of [GET, POST, PUT, DELETE]) in an xAPI context.', $method));
5859
}
@@ -71,7 +72,23 @@ public function createRequest($method, $uri, array $urlParameters = array(), $bo
7172
$headers['Content-Type'] = 'application/json';
7273
}
7374

74-
return $this->requestFactory->createRequest(strtoupper($method), $uri, $headers, $body);
75+
$request = $this->requestFactory->createRequest(strtoupper($method), $uri);
76+
77+
// Add headers to the request
78+
foreach ($headers as $name => $value) {
79+
$request = $request->withHeader($name, $value);
80+
}
81+
82+
// Add body to the request if it exists
83+
if (null !== $body) {
84+
// Create a stream for the body
85+
$stream = $request->getBody();
86+
$stream->write($body);
87+
$stream->rewind();
88+
$request = $request->withBody($stream);
89+
}
90+
91+
return $request;
7592
}
7693

7794
/**

0 commit comments

Comments
 (0)