diff --git a/composer.json b/composer.json index aa2d0f7..3dd4b31 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ "minimum-stability": "stable", "require": { "php": "^7.2", - "lamoda/atol-client": "^1.2.0", + "lamoda/atol-client": "^1.3.0", "symfony/dependency-injection": "^3.4 || ^4.0", "symfony/http-kernel": "^3.4 || ^4.0", "symfony/config": "^3.4 || ^4.0", diff --git a/src/AtolClientBundle.php b/src/AtolClientBundle.php index 78bba91..479f0d6 100644 --- a/src/AtolClientBundle.php +++ b/src/AtolClientBundle.php @@ -9,6 +9,7 @@ final class AtolClientBundle extends Bundle { public const API_CLIENT_VERSION_3 = 3; public const API_CLIENT_VERSION_4 = 4; + public const API_CLIENT_VERSION_5 = 5; public function getContainerExtension() { diff --git a/src/DependencyInjection/AtolClientExtension.php b/src/DependencyInjection/AtolClientExtension.php index 676be94..6974151 100644 --- a/src/DependencyInjection/AtolClientExtension.php +++ b/src/DependencyInjection/AtolClientExtension.php @@ -4,6 +4,7 @@ use Lamoda\AtolClient\V3\AtolApi as AtolApiV3; use Lamoda\AtolClient\V4\AtolApi as AtolApiV4; +use Lamoda\AtolClient\V5\AtolApi as AtolApiV5; use Lamoda\AtolClientBundle\AtolClientBundle; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -48,6 +49,11 @@ private function createAtolClients(array $config, ContainerBuilder $container): $container->setAlias('atol_client.v4', 'atol_client.v4.default'); $container->setAlias(AtolApiV4::class, 'atol_client.v4.default'); } + + if ($container->hasDefinition('atol_client.v5.default')) { + $container->setAlias('atol_client.v5', 'atol_client.v5.default'); + $container->setAlias(AtolApiV5::class, 'atol_client.v5.default'); + } } private function createAtolClient(string $name, array $clientConfig, ContainerBuilder $container): void @@ -59,6 +65,9 @@ private function createAtolClient(string $name, array $clientConfig, ContainerBu case AtolClientBundle::API_CLIENT_VERSION_4: $this->createAtolClientV4($name, $clientConfig, $container); break; + case AtolClientBundle::API_CLIENT_VERSION_5: + $this->createAtolClientV5($name, $clientConfig, $container); + break; default: throw new InvalidArgumentException('Wrong client version: ' . $clientConfig['version']); } @@ -94,4 +103,19 @@ private function createAtolClientV4(string $name, array $clientConfig, Container $container->setDefinition($id, $definition); } + + private function createAtolClientV5(string $name, array $clientConfig, ContainerBuilder $container): void + { + $definition = new Definition(AtolApiV5::class, [ + new Reference('atol_client.object_converter'), + new Reference($clientConfig['guzzle_client']), + $clientConfig['guzzle_client_options'], + $clientConfig['base_url'], + ]); + $definition->setPublic(false); + + $id = 'atol_client.v5.' . $name; + + $container->setDefinition($id, $definition); + } } diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 4441651..0133933 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -26,7 +26,7 @@ public function getConfigTreeBuilder() ->beforeNormalization() ->ifTrue(function ($v) { return isset($v['version']) - && $v['version'] === AtolClientBundle::API_CLIENT_VERSION_3 + && AtolClientBundle::API_CLIENT_VERSION_3 === $v['version'] && empty($v['cash_register_group_code']); }) ->thenInvalid('cash_register_group_code is required for Atol Api Client v3') @@ -37,6 +37,7 @@ public function getConfigTreeBuilder() ->values([ AtolClientBundle::API_CLIENT_VERSION_3, AtolClientBundle::API_CLIENT_VERSION_4, + AtolClientBundle::API_CLIENT_VERSION_5, ]) ->defaultValue(AtolClientBundle::API_CLIENT_VERSION_3) ->end() diff --git a/tests/App/config/config_multiple_clients.yaml b/tests/App/config/config_multiple_clients.yaml index f9fb1b7..b13971f 100644 --- a/tests/App/config/config_multiple_clients.yaml +++ b/tests/App/config/config_multiple_clients.yaml @@ -24,6 +24,14 @@ atol_client: cash_register_group_code: 'test_group2' callback_url: null + fourth: + version: 5 + guzzle_client: app.guzzle.client + guzzle_client_options: { 'a': 'test' } + base_url: 'http://test_url2' + cash_register_group_code: 'test_group2' + callback_url: null + services: test.atol_client.v3: alias: 'atol_client.v3.default' @@ -33,4 +41,7 @@ services: public: true test.atol_client.v4.third: alias: 'atol_client.v4.third' + public: true + test.atol_client.v5.fourth: + alias: 'atol_client.v5.fourth' public: true \ No newline at end of file diff --git a/tests/App/config/config_single_client_v5.yaml b/tests/App/config/config_single_client_v5.yaml new file mode 100644 index 0000000..2926750 --- /dev/null +++ b/tests/App/config/config_single_client_v5.yaml @@ -0,0 +1,12 @@ + +atol_client: + version: 5 + guzzle_client: app.guzzle.client + guzzle_client_options: [] + base_url: 'http://test_url' + callback_url: null + +services: + test.atol_client.v5: + alias: 'atol_client.v5' + public: true diff --git a/tests/AtolClientBundleTest.php b/tests/AtolClientBundleTest.php index 26bcc1e..3d5b0ef 100644 --- a/tests/AtolClientBundleTest.php +++ b/tests/AtolClientBundleTest.php @@ -4,6 +4,7 @@ use Lamoda\AtolClient\V3\AtolApi as AtolApiV3; use Lamoda\AtolClient\V4\AtolApi as AtolApiV4; +use Lamoda\AtolClient\V5\AtolApi as AtolApiV5; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; final class AtolClientBundleTest extends WebTestCase @@ -39,12 +40,19 @@ public function dataEnv(): array 'test.atol_client.v4' => AtolApiV4::class, ], ], + [ + 'single_client_v5', + [ + 'test.atol_client.v5' => AtolApiV5::class, + ], + ], [ 'multiple_clients', [ 'test.atol_client.v3' => AtolApiV3::class, 'test.atol_client.v3.second' => AtolApiV3::class, 'test.atol_client.v4.third' => AtolApiV4::class, + 'test.atol_client.v5.fourth' => AtolApiV5::class, ], ], ];