ldc-arcadia-genesis-php-client/tests/Unit/Factory/ServiceFactoryTest.php

109 lines
3.9 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Unit\Factory;
use GuzzleHttp\Psr7\Uri;
use Mockery;
use Uwil\ArcadiaApiPhpClient\Auth\ClientIdentifier;
use Uwil\ArcadiaApiPhpClient\Auth\ClientSecret;
use Uwil\ArcadiaApiPhpClient\Factory\ServiceFactory;
use Uwil\ArcadiaApiPhpClient\Lib\ApiConfig;
use Uwil\ArcadiaApiPhpClient\Service\ApiService;
use Uwil\ArcadiaApiPhpClient\Service\ArcadiaApiService;
use Uwil\ArcadiaApiPhpClient\Service\ArcadiaBrandService;
use Uwil\ArcadiaApiPhpClient\Service\ArcadiaEmployeeService;
use Uwil\ArcadiaApiPhpClient\Service\ArcadiaIncoService;
use Uwil\ArcadiaApiPhpClient\Service\BrandService;
use Uwil\ArcadiaApiPhpClient\Service\EmployeeService;
use Uwil\ArcadiaApiPhpClient\Service\IncoService;
use Uwil\ArcadiaKiotaOpenApiClient\ApiClient;
describe('ServiceFactory', function () {
it('creates ApiService instance and memoizes it', function () {
// GIVEN
$apiClient = Mockery::mock(ApiClient::class);
$config = new ApiConfig(
endpoint: new Uri('https://api.example.com'),
apiKey: new ClientIdentifier('id'),
secret: new ClientSecret('secret'),
);
$factory = new ServiceFactory($apiClient, $config);
// WHEN
$service1 = $factory->createApiService();
$service2 = $factory->createApiService();
// THEN
expect($service1)->toBeInstanceOf(ApiService::class);
expect($service1)->toBeInstanceOf(ArcadiaApiService::class);
expect($service1)->toBe($service2);
});
it('creates EmployeeService instance and memoizes it', function () {
// GIVEN
$apiClient = Mockery::mock(ApiClient::class);
$config = new ApiConfig(
endpoint: new Uri('https://api.example.com'),
apiKey: new ClientIdentifier('id'),
secret: new ClientSecret('secret'),
);
$factory = new ServiceFactory($apiClient, $config);
// WHEN
$service1 = $factory->createEmployeeService();
$service2 = $factory->createEmployeeService();
$service3 = $factory->employeeService();
// THEN
expect($service1)->toBeInstanceOf(EmployeeService::class);
expect($service1)->toBeInstanceOf(ArcadiaEmployeeService::class);
expect($service1)->toBe($service2);
expect($service1)->toBe($service3);
});
it('creates IncoService instance and memoizes it', function () {
// GIVEN
$apiClient = Mockery::mock(ApiClient::class);
$config = new ApiConfig(
endpoint: new Uri('https://api.example.com'),
apiKey: new ClientIdentifier('id'),
secret: new ClientSecret('secret'),
);
$factory = new ServiceFactory($apiClient, $config);
// WHEN
$service1 = $factory->createIncoService();
$service2 = $factory->createIncoService();
$service3 = $factory->incoService();
// THEN
expect($service1)->toBeInstanceOf(IncoService::class);
expect($service1)->toBeInstanceOf(ArcadiaIncoService::class);
expect($service1)->toBe($service2);
expect($service1)->toBe($service3);
});
it('creates BrandService instance and memoizes it', function () {
// GIVEN
$apiClient = Mockery::mock(ApiClient::class);
$config = new ApiConfig(
endpoint: new Uri('https://api.example.com'),
apiKey: new ClientIdentifier('id'),
secret: new ClientSecret('secret'),
);
$factory = new ServiceFactory($apiClient, $config);
// WHEN
$service1 = $factory->createBrandService();
$service2 = $factory->createBrandService();
$service3 = $factory->brandService();
// THEN
expect($service1)->toBeInstanceOf(BrandService::class);
expect($service1)->toBeInstanceOf(ArcadiaBrandService::class);
expect($service1)->toBe($service2);
expect($service1)->toBe($service3);
});
});