Skip to content
This repository was archived by the owner on Jan 30, 2020. It is now read-only.

default headers will not override those set by user anymore #6

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

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions src/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,16 @@ public function doRequest($request)
$this->httpClient->setUri($this->serverAddress);
}

// set default Accept and Content-Type headers unless already set
$headers = $httpRequest->getHeaders();
$headers->addHeaders([
'Content-Type' => 'application/json',
'Accept' => 'application/json',
]);
$headersToAdd = [];
if (!$headers->has('Content-Type')) {
$headersToAdd['Content-Type'] = 'application/json-rpc';
}
if (!$headers->has('Accept')) {
$headersToAdd['Accept'] = 'application/json-rpc';
}
$headers->addHeaders($headersToAdd);

if (! $headers->get('User-Agent')) {
$headers->addHeaderLine('User-Agent', 'Zend_Json_Server_Client');
Expand Down
36 changes: 36 additions & 0 deletions test/ClientTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Zend\Json\Server\Error;
use Zend\Json\Server\Request;
use Zend\Json\Server\Response;
use Zend\Http\Response as HttpResponse;

class ClientTest extends TestCase
{
Expand Down Expand Up @@ -233,6 +234,41 @@ public function setServerResponseTo($nativeVars)
$this->httpAdapter->setResponse($response);
}

public function testClientShouldSetDefaultAcceptAndContentTypeHeadersOnRequest()
{
$request = new Request();
$response = new HttpResponse();
$response->setContent(\Zend\Json\Json::encode(['test' => 'test']));
$testAdapter = new TestAdapter();
$testAdapter->setResponse($response);
$jsonClient = new Client('http://foo');
$jsonClient->getHttpClient()->setAdapter($testAdapter);
$jsonClient->doRequest($request);
$this->assertSame('application/json-rpc', $jsonClient->getHttpClient()->getHeader('Content-Type'));
$this->assertSame('application/json-rpc', $jsonClient->getHttpClient()->getHeader('Accept'));
}

public function testClientShouldNotSetDefaultAcceptAndContentTypeHeadersOnRequestIfTheyAlreadyExist()
{
$request = new Request();
$response = new HttpResponse();
$response->setContent(\Zend\Json\Json::encode(['test' => 'test']));
$testAdapter = new TestAdapter();
$testAdapter->setResponse($response);

$httpClient = new HttpClient();
$httpClient->setHeaders([
'Content-Type' => 'application/jsonrequest',
'Accept' => 'application/jsonrequest',
]);

$jsonClient = new Client('http://foo', $httpClient);
$jsonClient->getHttpClient()->setAdapter($testAdapter);
$jsonClient->doRequest($request);
$this->assertSame('application/jsonrequest', $jsonClient->getHttpClient()->getHeader('Content-Type'));
$this->assertSame('application/jsonrequest', $jsonClient->getHttpClient()->getHeader('Accept'));
}

public function getServerResponseFor($nativeVars)
{
$response = new Response();
Expand Down