2019-01-26 11:09:49 +03:00
|
|
|
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
namespace ShlinkioTest\Shlink\Common\ApiTest;
|
|
|
|
|
2019-01-26 12:19:20 +03:00
|
|
|
use Fig\Http\Message\RequestMethodInterface;
|
|
|
|
use Fig\Http\Message\StatusCodeInterface;
|
|
|
|
use GuzzleHttp\ClientInterface;
|
2019-01-26 11:09:49 +03:00
|
|
|
use PHPUnit\Framework\TestCase;
|
2019-01-26 12:19:20 +03:00
|
|
|
use Psr\Http\Message\ResponseInterface;
|
2019-01-27 14:35:00 +03:00
|
|
|
use Shlinkio\Shlink\Rest\Authentication\Plugin\ApiKeyHeaderPlugin;
|
|
|
|
use function Shlinkio\Shlink\Common\json_decode;
|
2019-01-27 12:30:38 +03:00
|
|
|
use function sprintf;
|
2019-01-26 11:09:49 +03:00
|
|
|
|
2019-01-26 12:19:20 +03:00
|
|
|
abstract class ApiTestCase extends TestCase implements StatusCodeInterface, RequestMethodInterface
|
2019-01-26 11:09:49 +03:00
|
|
|
{
|
2019-01-27 12:30:38 +03:00
|
|
|
private const PATH_PREFX = '/rest/v1';
|
|
|
|
|
2019-01-26 12:19:20 +03:00
|
|
|
/** @var ClientInterface */
|
|
|
|
private static $client;
|
|
|
|
|
|
|
|
public static function setApiClient(ClientInterface $client): void
|
|
|
|
{
|
|
|
|
self::$client = $client;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
|
|
|
*/
|
|
|
|
protected function callApi(string $method, string $uri, array $options = []): ResponseInterface
|
|
|
|
{
|
2019-01-27 12:30:38 +03:00
|
|
|
return self::$client->request($method, sprintf('%s%s', self::PATH_PREFX, $uri), $options);
|
2019-01-26 12:19:20 +03:00
|
|
|
}
|
2019-01-27 14:35:00 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
|
|
|
*/
|
|
|
|
protected function callApiWithKey(string $method, string $uri, array $options = []): ResponseInterface
|
|
|
|
{
|
|
|
|
$headers = $options['headers'] ?? [];
|
|
|
|
$headers[ApiKeyHeaderPlugin::HEADER_NAME] = 'valid_api_key';
|
|
|
|
$options['headers'] = $headers;
|
|
|
|
|
|
|
|
return $this->callApi($method, $uri, $options);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getJsonResponsePayload(ResponseInterface $resp): array
|
|
|
|
{
|
|
|
|
return json_decode((string) $resp->getBody());
|
|
|
|
}
|
2019-01-26 11:09:49 +03:00
|
|
|
}
|