89 lines
2.4 KiB
PHP
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);
|
|
}
|
|
}
|