ldc-dam/tests/Api/ApiBase.php
2022-07-29 13:12:34 +02:00

89 lines
2.4 KiB
PHP

<?php
namespace Tests\Api;
use App\Enums\Legacy\ApiStatus;
use App\Lib\Helper;
use App\Models\Api\ApiToken;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Illuminate\Testing\AssertableJsonString;
use Illuminate\Testing\TestResponse;
use Tests\CreatesApplication;
class ApiBase extends BaseTestCase
{
use CreatesApplication;
use DatabaseTransactions;
/**
* apiToken used to make calls
*
* @var \App\Models\Api\ApiToken|null
*/
protected $apiToken = null;
/**
* Make assertion that json response has status.
*
* @param AssertableJsonString $json
* @param ApiStatus $status
* @return void
*/
protected function assertApiResponseStatusIs(AssertableJsonString $json, ApiStatus $status)
{
$json->assertFragment(['status' => $status->value]);
}
/**
* Raw Function to call api
*
* @param string $method
* @param string $uri
* @param array $data
* @param array $headers
* @return \Illuminate\Testing\TestResponse
*/
protected function callApi(string $method, string $uri, array $data = [], array $headers = []): TestResponse
{
if (!isset($data['timestamp'])) {
$data['timestamp'] = \time();
}
return $this->json($method, $uri, $data, $headers);
}
/**
* Raw Function to call api with Token
*
* @param string $method
* @param string $uri
* @param array $data
* @param array $headers
* @return \Illuminate\Testing\TestResponse
*/
protected function callApiWithToken(
string $method,
string $uri,
array $data = [],
array $headers = []
): TestResponse {
if (!$this->apiToken) {
$this->apiToken = ApiToken::query()->inRandomOrder()->firstOrFail();
$publicToken = $this->apiToken->generatePublicToken();
$this->apiToken->saveOrFail();
$this->apiToken->public_token = $publicToken;
}
$data['bearer_token'] = $this->apiToken->public_token;
$data['timestamp'] = \gmdate('Y-m-d H:i:s');
$data['signature'] = Helper::signRequest(
$this->apiToken->private_token,
$uri,
$method,
$data
);
return $this->callApi($method, $uri, $data, $headers);
}
}