107 lines
2.9 KiB
PHP
107 lines
2.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit;
|
|
|
|
use GuzzleHttp\Psr7\Uri;
|
|
use Uwil\ArcadiaApiPhpClient\ArcadiaApiClient;
|
|
use Uwil\ArcadiaApiPhpClient\Auth\ClientIdentifier;
|
|
use Uwil\ArcadiaApiPhpClient\Auth\ClientSecret;
|
|
use Uwil\ArcadiaApiPhpClient\Lib\ApiConfig;
|
|
use Uwil\ArcadiaApiPhpClient\Service\ApiService;
|
|
use Uwil\ArcadiaApiPhpClient\Service\BrandService;
|
|
use Uwil\ArcadiaApiPhpClient\Service\EmployeeService;
|
|
use Uwil\ArcadiaApiPhpClient\Service\IncoService;
|
|
|
|
function createTestApiConfig(): ApiConfig
|
|
{
|
|
return new ApiConfig(
|
|
endpoint: new Uri('https://api.example.com'),
|
|
apiKey: new ClientIdentifier('test-api-key'),
|
|
secret: new ClientSecret('test-secret-key'),
|
|
);
|
|
}
|
|
|
|
describe('ArcadiaApiClient', function () {
|
|
it('can be instantiated with ApiConfig', function () {
|
|
// GIVEN
|
|
$config = createTestApiConfig();
|
|
|
|
// WHEN
|
|
$client = new ArcadiaApiClient($config);
|
|
|
|
// THEN
|
|
expect($client)->toBeInstanceOf(ArcadiaApiClient::class);
|
|
});
|
|
|
|
it('provides ApiService instance', function () {
|
|
// GIVEN
|
|
$config = createTestApiConfig();
|
|
$client = new ArcadiaApiClient($config);
|
|
|
|
// WHEN
|
|
$service = $client->apiService();
|
|
|
|
// THEN
|
|
expect($service)->toBeInstanceOf(ApiService::class);
|
|
});
|
|
|
|
it('provides EmployeeService instance', function () {
|
|
// GIVEN
|
|
$config = createTestApiConfig();
|
|
$client = new ArcadiaApiClient($config);
|
|
|
|
// WHEN
|
|
$service = $client->employees();
|
|
|
|
// THEN
|
|
expect($service)->toBeInstanceOf(EmployeeService::class);
|
|
});
|
|
|
|
it('provides IncoService instance', function () {
|
|
// GIVEN
|
|
$config = createTestApiConfig();
|
|
$client = new ArcadiaApiClient($config);
|
|
|
|
// WHEN
|
|
$service = $client->incoSheets();
|
|
|
|
// THEN
|
|
expect($service)->toBeInstanceOf(IncoService::class);
|
|
});
|
|
|
|
it('provides BrandService instance', function () {
|
|
// GIVEN
|
|
$config = createTestApiConfig();
|
|
$client = new ArcadiaApiClient($config);
|
|
|
|
// WHEN
|
|
$service = $client->brands();
|
|
|
|
// THEN
|
|
expect($service)->toBeInstanceOf(BrandService::class);
|
|
});
|
|
|
|
it('memoizes service instances across multiple calls', function () {
|
|
// GIVEN
|
|
$config = createTestApiConfig();
|
|
$client = new ArcadiaApiClient($config);
|
|
|
|
// WHEN
|
|
$brand1 = $client->brands();
|
|
$brand2 = $client->brands();
|
|
$employee1 = $client->employees();
|
|
$employee2 = $client->employees();
|
|
$inco1 = $client->incoSheets();
|
|
$inco2 = $client->incoSheets();
|
|
$api1 = $client->apiService();
|
|
$api2 = $client->apiService();
|
|
|
|
// THEN
|
|
expect($brand1)->toBe($brand2);
|
|
expect($employee1)->toBe($employee2);
|
|
expect($inco1)->toBe($inco2);
|
|
expect($api1)->toBe($api2);
|
|
});
|
|
});
|