ldc-arcadia-genesis-php-client/tests/Unit/ArcadiaApiClientTest.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);
});
});