DatabaseMockStorage.php in Apigee Edge 8
File
tests/modules/apigee_mock_api_client/src/DatabaseMockStorage.php
View source
<?php
namespace Drupal\apigee_mock_api_client;
use Apigee\MockClient\MatchableResultInterface;
use Apigee\MockClient\MockStorageInterface;
use Apigee\MockClient\Psr7\SerializableMessageWrapper;
use Drupal\Core\Queue\QueueDatabaseFactory;
use Drupal\Core\State\StateInterface;
use Psr\Http\Message\MessageInterface;
use Psr\Http\Message\RequestInterface;
class DatabaseMockStorage implements MockStorageInterface {
public const STATE_DEFAULT_RESULT_ID = 'apigee_mock_api_client.db_mock_storage.default';
public const STATE_REQUESTS_ID = 'apigee_mock_api_client.db_mock_storage.requests';
public const STATE_MATCHABLE_RESULT_ID = 'apigee_mock_api_client.db_mock_storage.responses';
protected $queue;
protected $state;
public function __construct(QueueDatabaseFactory $queue_factory, StateInterface $state) {
$this->queue = $queue_factory
->get('apigee_mock_api_client.db_mock_storage');
$this->state = $state;
}
public function default() {
$default = $this->state
->get(static::STATE_DEFAULT_RESULT_ID);
return $default instanceof SerializableMessageWrapper ? $default
->getMessage() : $default;
}
public function setDefault($default = NULL) : MockStorageInterface {
$default = $default instanceof MessageInterface ? new SerializableMessageWrapper($default) : $default;
$this->state
->set(static::STATE_DEFAULT_RESULT_ID, $default);
return $this;
}
public function add($result) : MockStorageInterface {
$result = $result instanceof MessageInterface ? new SerializableMessageWrapper($result) : $result;
$this->queue
->createItem($result);
return $this;
}
public function claim() {
if ($item = $this->queue
->claimItem()) {
$this->queue
->deleteItem($item);
}
$result = $item ? $item->data : NULL;
return $result instanceof SerializableMessageWrapper ? $result
->getMessage() : $result;
}
public function responseCount() : int {
return $this->queue
->numberOfItems();
}
public function reset() : MockStorageInterface {
$this->queue
->deleteQueue();
$this
->setDefault();
$this->state
->delete(static::STATE_REQUESTS_ID);
$this->state
->delete(static::STATE_MATCHABLE_RESULT_ID);
return $this;
}
public function addRequest(RequestInterface $request) : MockStorageInterface {
$requests = $this
->requests();
$requests[] = $request;
$this->state
->set(static::STATE_REQUESTS_ID, array_map(function ($item) {
return new SerializableMessageWrapper($item);
}, $requests));
return $this;
}
public function lastRequest() : ?RequestInterface {
$requests = $this
->requests();
return !empty($requests) ? end($requests) : NULL;
}
public function requests() : array {
if ($requests = $this->state
->get(static::STATE_REQUESTS_ID)) {
$requests = array_map(function ($wrapped_request) {
return $wrapped_request
->getMessage();
}, $requests);
}
return $requests ?? [];
}
public function totalRequests() : int {
return count($this
->requests());
}
public function addMatchableResult(MatchableResultInterface $matchableResult) : MockStorageInterface {
$matchers = $this->state
->get(static::STATE_MATCHABLE_RESULT_ID);
$matchers = $matchers ?? [];
$matchers[] = $matchableResult;
$this->state
->set(static::STATE_MATCHABLE_RESULT_ID, $matchers);
return $this;
}
public function matchableResults() : array {
$matchable_results = $this->state
->get(static::STATE_MATCHABLE_RESULT_ID);
return $matchable_results ?? [];
}
}