Skip to content

Commit

Permalink
add global request header functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
Miguel Vela Romera committed Mar 23, 2021
1 parent dbb17b1 commit 0e595a8
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 11 deletions.
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "payvision/payvision-sdk-php",
"description": "Payvision PHP SDK",
"type": "library",
"version": "8.0.0",
"version": "8.1.0",
"license": "MIT",
"require": {
"php": "~7.1.3||~7.2.5||~7.3.0||~7.4.0",
Expand Down
41 changes: 39 additions & 2 deletions src/Infrastructure/ApiConnection.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ class ApiConnection implements Connection
*/
private $lastJsonRequest;

/**
* @var array
*/
private $globalRequestHeaders = [];

/**
* ApiConnection constructor.
*
Expand Down Expand Up @@ -79,21 +84,24 @@ public function __construct(
*/
public function execute(Request $request, array $requestHeaders = [])
{
$requestHeaders = \array_merge($this->globalRequestHeaders, $requestHeaders);
$this->validateResponseClasses($request);
$jsonResponse = $this->doRequest($request, $requestHeaders);
return $this->handleResponse($jsonResponse, $request);
}

/**
* @param Request $request
* @param array $requestHeaders
* @return array
* @throws ApiException
* @throws BuilderException
* @throws ErrorResponse
*/
public function executeAndReturnArray(Request $request): array
public function executeAndReturnArray(Request $request, array $requestHeaders = []): array
{
$jsonResponse = $this->doRequest($request);
$requestHeaders = \array_merge($this->globalRequestHeaders, $requestHeaders);
$jsonResponse = $this->doRequest($request, $requestHeaders);
$items = [];

foreach ($jsonResponse as $item) {
Expand All @@ -103,6 +111,35 @@ public function executeAndReturnArray(Request $request): array
return $items;
}

/**
* @param array $globalRequestHeaders
* @return ApiConnection
*/
public function setGlobalRequestHeaders(array $globalRequestHeaders = []): ApiConnection
{
$this->globalRequestHeaders = $globalRequestHeaders;
return $this;
}

/**
* @param string $key
* @param string $value
* @return ApiConnection
*/
public function addGlobalRequestHeader(string $key, string $value): ApiConnection
{
$this->globalRequestHeaders[$key] = $value;
return $this;
}

/**
* @return array
*/
public function getGlobalRequestHeaders(): array
{
return $this->globalRequestHeaders;
}

/**
* @param Request $request
* @param RequestHeaderCollection $requestHeaderCollection
Expand Down
9 changes: 8 additions & 1 deletion src/Infrastructure/RequestHeaderCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

declare(strict_types=1);

/**
* @copyright Copyright (c) 2018-2021 Payvision B.V. (https://www.payvision.com/)
* @license see LICENCE.TXT
*/

namespace Payvision\SDK\Infrastructure;

use ArrayIterator;
Expand All @@ -11,7 +16,9 @@

class RequestHeaderCollection implements IteratorAggregate, Countable
{
const HEADER_EXECUTION_MODE = 'X-AH-ExecutionMode';
public const HEADER_EXECUTION_MODE = 'X-AH-ExecutionMode';
public const HEADER_PLUGIN_NAME = 'X-AH-PluginName';
public const HEADER_PLUGIN_DETAILS = 'X-AH-PluginDetails';

/**
* @var string[],array<string>
Expand Down
13 changes: 13 additions & 0 deletions tests/Test/Unit/Infrastructure/ApiConnectionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
use Payvision\SDK\Exception\ApiException;
use Payvision\SDK\Exception\BuilderException;
use Payvision\SDK\Infrastructure\ApiConnection;
use Payvision\SDK\Infrastructure\RequestHeaderCollection;
use Payvision\SDK\Test\Unit\Application\Response\Fake as FakeResponse;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
Expand Down Expand Up @@ -354,6 +355,18 @@ public function testExceptionOnMissingRequiredField(): void
$this->subject->execute($request);
}

public function testGlobalRequestHeaders(): void
{
$this->subject->setGlobalRequestHeaders([
RequestHeaderCollection::HEADER_PLUGIN_NAME => 'PHP SDK',
RequestHeaderCollection::HEADER_PLUGIN_DETAILS => 'Version 8.1.0',
]);
self::assertCount(2, $this->subject->getGlobalRequestHeaders());

$this->subject->addGlobalRequestHeader(RequestHeaderCollection::HEADER_EXECUTION_MODE, 'true');
self::assertCount(3, $this->subject->getGlobalRequestHeaders());
}

private function createApiRequestObject(
string $method = Request::METHOD_POST,
array $responseObjectTypes = [200 => FakeResponse::class]
Expand Down
23 changes: 16 additions & 7 deletions tests/Test/Unit/Infrastructure/RequestHeaderCollectionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
declare(strict_types=1);

/**
* @copyright Copyright (c) 2018-2020 Payvision B.V. (https://www.payvision.com/)
* @copyright Copyright (c) 2018-2021 Payvision B.V. (https://www.payvision.com/)
* @license see LICENCE.TXT
*/

Expand All @@ -19,16 +19,25 @@ public function testAddRequestHeaderCollectionSuccessfully(): void
$requestHeaders = new RequestHeaderCollection();
self::assertEquals(0, $requestHeaders->count());

$requestHeaders->add(RequestHeaderCollection::HEADER_EXECUTION_MODE, 'test');
self::assertEquals(1, $requestHeaders->count());
$testHeaders = [
RequestHeaderCollection::HEADER_EXECUTION_MODE => 'test',
RequestHeaderCollection::HEADER_PLUGIN_NAME => 'PHP SDK',
RequestHeaderCollection::HEADER_PLUGIN_DETAILS => 'Version 8.1.0',
];

foreach ($testHeaders as $header => $value) {
$requestHeaders->add($header, $value);
}

self::assertEquals(\count($testHeaders), $requestHeaders->count());
foreach ($requestHeaders as $key => $value) {
self::assertEquals(RequestHeaderCollection::HEADER_EXECUTION_MODE, $key);
self::assertEquals('test', $value);
self::assertEquals($testHeaders[$key], $value);
}

$headers = $requestHeaders->getHeaders();
self::assertArrayHasKey(RequestHeaderCollection::HEADER_EXECUTION_MODE, $headers);
self::assertEquals('test', $headers[RequestHeaderCollection::HEADER_EXECUTION_MODE]);
foreach ($testHeaders as $key => $value) {
self::assertArrayHasKey($key, $headers);
self::assertEquals($value, $headers[$key]);
}
}
}

0 comments on commit 0e595a8

Please sign in to comment.