Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 28 additions & 18 deletions spec/Request/HandlerSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,36 +28,45 @@ function it_returns_get_request_created_by_the_http_client(
RequestFactoryInterface $requestFactory,
RequestInterface $request
) {
$requestFactory->createRequest('GET', 'http://example.com/xapi/statements', array(
'X-Experience-API-Version' => '1.0.1',
'Content-Type' => 'application/json',
), null)->willReturn($request);
$requestFactory->createRequest('GET', 'http://example.com/xapi/statements')->willReturn($request);
$request->withHeader('X-Experience-API-Version', '1.0.1')->willReturn($request);
$request->withHeader('Content-Type', 'application/json')->willReturn($request);
$request->getBody()->willReturn($request);
$request->withBody($request)->willReturn($request);

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

function it_returns_post_request_created_by_the_http_client(
RequestFactoryInterface $requestFactory,
RequestInterface $request
RequestInterface $request,
\Psr\Http\Message\StreamInterface $stream
) {
$requestFactory->createRequest('POST', 'http://example.com/xapi/statements', array(
'X-Experience-API-Version' => '1.0.1',
'Content-Type' => 'application/json',
), 'body')->willReturn($request);
$requestFactory->createRequest('POST', 'http://example.com/xapi/statements')->willReturn($request);
$request->withHeader('X-Experience-API-Version', '1.0.1')->willReturn($request);
$request->withHeader('Content-Type', 'application/json')->willReturn($request);
$request->getBody()->willReturn($stream);
$stream->write('body')->willReturn($stream);
$stream->rewind()->willReturn($stream);
$request->withBody($stream)->willReturn($request);

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

function it_returns_put_request_created_by_the_http_client(
RequestFactoryInterface $requestFactory,
RequestInterface $request
RequestInterface $request,
\Psr\Http\Message\StreamInterface $stream
) {
$requestFactory->createRequest('PUT', 'http://example.com/xapi/statements', array(
'X-Experience-API-Version' => '1.0.1',
'Content-Type' => 'application/json',
), 'body')->willReturn($request);
$requestFactory->createRequest('PUT', 'http://example.com/xapi/statements')->willReturn($request);
$request->withHeader('X-Experience-API-Version', '1.0.1')->willReturn($request);
$request->withHeader('Content-Type', 'application/json')->willReturn($request);
$request->getBody()->willReturn($stream);
$stream->write('body')->willReturn($stream);
$stream->rewind()->willReturn($stream);
$request->withBody($stream)->willReturn($request);

$this->createRequest('put', '/statements', array(), 'body')->shouldReturn($request);
$this->createRequest('PUT', '/statements', array(), 'body')->shouldReturn($request);
Expand All @@ -67,10 +76,11 @@ function it_returns_delete_request_created_by_the_http_client(
RequestFactoryInterface $requestFactory,
RequestInterface $request
) {
$requestFactory->createRequest('DELETE', 'http://example.com/xapi/statements', array(
'X-Experience-API-Version' => '1.0.1',
'Content-Type' => 'application/json',
), null)->willReturn($request);
$requestFactory->createRequest('DELETE', 'http://example.com/xapi/statements')->willReturn($request);
$request->withHeader('X-Experience-API-Version', '1.0.1')->willReturn($request);
$request->withHeader('Content-Type', 'application/json')->willReturn($request);
$request->getBody()->willReturn($request);
$request->withBody($request)->willReturn($request);

$this->createRequest('delete', '/statements')->shouldReturn($request);
$this->createRequest('DELETE', '/statements')->shouldReturn($request);
Expand Down
19 changes: 18 additions & 1 deletion src/Request/Handler.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public function __construct(ClientInterface $httpClient, RequestFactoryInterface
*/
public function createRequest($method, $uri, array $urlParameters = array(), $body = null, array $headers = array())
{

if (!in_array(strtoupper($method), array('GET', 'POST', 'PUT', 'DELETE'))) {
throw new \InvalidArgumentException(sprintf('"%s" is no valid HTTP method (expected one of [GET, POST, PUT, DELETE]) in an xAPI context.', $method));
}
Expand All @@ -71,7 +72,23 @@ public function createRequest($method, $uri, array $urlParameters = array(), $bo
$headers['Content-Type'] = 'application/json';
}

return $this->requestFactory->createRequest(strtoupper($method), $uri, $headers, $body);
$request = $this->requestFactory->createRequest(strtoupper($method), $uri);

// Add headers to the request
foreach ($headers as $name => $value) {
$request = $request->withHeader($name, $value);
}

// Add body to the request if it exists
if (null !== $body) {
// Create a stream for the body
$stream = $request->getBody();
$stream->write($body);
$stream->rewind();
$request = $request->withBody($stream);
}

return $request;
}

/**
Expand Down
Loading
Loading