Skip to content

Commit b0897d9

Browse files
[DI] Allow setting sandbox mode and increased logging via env variables
1 parent 3153b3c commit b0897d9

File tree

6 files changed

+260
-18
lines changed

6 files changed

+260
-18
lines changed

UPGRADE.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
### UPGRADE FROM 1.7.5 to 1.7.6
2+
3+
1. Setting sandbox mode and increased logging can be configured via the `SYLIUS_PAYPAL_SANDBOX_ENABLED`
4+
and `SYLIUS_PAYPAL_LOGGING_INCREASED` environmental variables.
5+
These variables take precedence over configuration nodes.
6+
17
### UPGRADE FROM 1.7.2 to 1.7.3
28

39
1. #### Removed overwriting of shipping address in `CompleteOrderAction` and introduced shipping address update to PayPal.

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@
3030
"friends-of-behat/symfony-extension": "^2.1",
3131
"friends-of-behat/variadic-extension": "^1.3",
3232
"lchrusciel/api-test-case": "^5.1",
33+
"matthiasnoback/symfony-dependency-injection-test": "^5.0",
3334
"nyholm/psr7": "^1.8",
3435
"phpspec/phpspec": "^7.0",
3536
"phpstan/phpstan": "^1.6",
3637
"phpstan/phpstan-doctrine": "1.3.37",
3738
"phpstan/phpstan-webmozart-assert": "^1.1",
38-
"phpunit/phpunit": "^8.5",
39+
"phpunit/phpunit": "^9.5",
3940
"polishsymfonycommunity/symfony-mocker-container": "^1.0",
4041
"sylius-labs/coding-standard": "^4.4",
4142
"sylius/sylius-rector": "^1.0",

src/DependencyInjection/SyliusPayPalExtension.php

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,30 +29,17 @@ final class SyliusPayPalExtension extends Extension implements PrependExtensionI
2929

3030
public function load(array $configs, ContainerBuilder $container): void
3131
{
32+
$configs = $this->processEnvConfig($configs);
3233
$config = $this->processConfiguration($this->getConfiguration([], $container), $configs);
34+
35+
$this->setCommunicationParameters($container, $config);
36+
3337
$loaderResolver = new LoaderResolver([
3438
new PhpFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')),
3539
new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')),
3640
]);
3741
$delegatingLoader = new DelegatingLoader($loaderResolver);
3842

39-
$container->setParameter('sylius.paypal.logging.increased', (bool) $config['logging']['increased']);
40-
$container->setParameter('sylius_paypal.logging.increased', $container->getParameter('sylius.paypal.logging.increased'));
41-
42-
if ($config['sandbox']) {
43-
$container->setParameter('sylius.pay_pal.facilitator_url', 'https://paypal.sylius.com');
44-
$container->setParameter('sylius.pay_pal.api_base_url', 'https://api.sandbox.paypal.com/');
45-
$container->setParameter('sylius.pay_pal.reports_sftp_host', 'reports.sandbox.paypal.com');
46-
} else {
47-
$container->setParameter('sylius.pay_pal.facilitator_url', 'https://prod.paypal.sylius.com');
48-
$container->setParameter('sylius.pay_pal.api_base_url', 'https://api.paypal.com/');
49-
$container->setParameter('sylius.pay_pal.reports_sftp_host', 'reports.paypal.com');
50-
}
51-
52-
$container->setParameter('sylius_paypal.facilitator_url', $container->getParameter('sylius.pay_pal.facilitator_url'));
53-
$container->setParameter('sylius_paypal.api_base_url', $container->getParameter('sylius.pay_pal.api_base_url'));
54-
$container->setParameter('sylius_paypal.reports_sftp_host', $container->getParameter('sylius.pay_pal.reports_sftp_host'));
55-
5643
$delegatingLoader->load('services.xml');
5744
}
5845

@@ -92,4 +79,45 @@ public function prepend(ContainerBuilder $container): void
9279
],
9380
]);
9481
}
82+
83+
private function setCommunicationParameters(ContainerBuilder $container, array $config): void
84+
{
85+
$container->setParameter('sylius.paypal.logging.increased', (bool) $config['logging']['increased']);
86+
$container->setParameter('sylius_paypal.logging.increased', $container->getParameter('sylius.paypal.logging.increased'));
87+
88+
if ($config['sandbox']) {
89+
$container->setParameter('sylius.pay_pal.facilitator_url', 'https://paypal.sylius.com');
90+
$container->setParameter('sylius.pay_pal.api_base_url', 'https://api.sandbox.paypal.com/');
91+
$container->setParameter('sylius.pay_pal.reports_sftp_host', 'reports.sandbox.paypal.com');
92+
} else {
93+
$container->setParameter('sylius.pay_pal.facilitator_url', 'https://prod.paypal.sylius.com');
94+
$container->setParameter('sylius.pay_pal.api_base_url', 'https://api.paypal.com/');
95+
$container->setParameter('sylius.pay_pal.reports_sftp_host', 'reports.paypal.com');
96+
}
97+
98+
$container->setParameter('sylius_paypal.facilitator_url', $container->getParameter('sylius.pay_pal.facilitator_url'));
99+
$container->setParameter('sylius_paypal.api_base_url', $container->getParameter('sylius.pay_pal.api_base_url'));
100+
$container->setParameter('sylius_paypal.reports_sftp_host', $container->getParameter('sylius.pay_pal.reports_sftp_host'));
101+
}
102+
103+
private function processEnvConfig(array $configs): array
104+
{
105+
$envConfig = [];
106+
107+
$sandboxEnv = $_ENV['SYLIUS_PAYPAL_SANDBOX_ENABLED'] ?? null;
108+
if ($sandboxEnv !== null) {
109+
$envConfig['sandbox'] = filter_var($sandboxEnv, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) ?? false;
110+
}
111+
112+
$loggingEnv = $_ENV['SYLIUS_PAYPAL_LOGGING_INCREASED'] ?? null;
113+
if ($loggingEnv !== null) {
114+
$envConfig['logging'] = ['increased' => filter_var($loggingEnv, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) ?? false];
115+
}
116+
117+
if ([] !== $envConfig) {
118+
$configs[] = $envConfig;
119+
}
120+
121+
return $configs;
122+
}
95123
}

tests/Application/.env

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,6 @@ SYLIUS_MESSENGER_TRANSPORT_CATALOG_PROMOTION_REMOVAL_FAILED_DSN=doctrine://defau
3333
###> symfony/mailer ###
3434
MAILER_DSN=null://null
3535
###< symfony/mailer ###
36+
37+
SYLIUS_PAYPAL_SANDBOX_ENABLED=true
38+
SYLIUS_PAYPAL_LOGGING_INCREASED=true

tests/Application/.env.test

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,6 @@ SYLIUS_MESSENGER_TRANSPORT_CATALOG_PROMOTION_REMOVAL_FAILED_DSN=sync://
1414
###< symfony/messenger ###
1515

1616
MAILER_DSN=null://null
17+
18+
SYLIUS_PAYPAL_SANDBOX_ENABLED=true
19+
SYLIUS_PAYPAL_LOGGING_INCREASED=true
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Sylius package.
5+
*
6+
* (c) Sylius Sp. z o.o.
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
declare(strict_types=1);
13+
14+
namespace Tests\Sylius\PayPalPlugin\DependencyInjection;
15+
16+
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
17+
use Sylius\PayPalPlugin\DependencyInjection\SyliusPayPalExtension;
18+
19+
final class SyliusPayPalExtensionTest extends AbstractExtensionTestCase
20+
{
21+
private ?string $originalSandboxEnv = null;
22+
23+
private ?string $originalLoggingEnv = null;
24+
25+
protected function setUp(): void
26+
{
27+
parent::setUp();
28+
$this->saveEnvVars();
29+
$this->clearEnvVars();
30+
}
31+
32+
protected function tearDown(): void
33+
{
34+
$this->restoreEnvVars();
35+
parent::tearDown();
36+
}
37+
38+
protected function getContainerExtensions(): array
39+
{
40+
return [new SyliusPayPalExtension()];
41+
}
42+
43+
public function test_it_loads_services_on_load(): void
44+
{
45+
$this->expectNotToPerformAssertions();
46+
47+
$this->load();
48+
}
49+
50+
/**
51+
* @dataProvider sandboxModeParametersProvider
52+
*/
53+
public function test_it_sets_parameters_based_on_sandbox_mode(
54+
bool $sandboxEnabled,
55+
string $parameterName,
56+
string $expectedValue,
57+
): void {
58+
$this->load(['sandbox' => $sandboxEnabled]);
59+
60+
$this->assertContainerBuilderHasParameter($parameterName, $expectedValue);
61+
}
62+
63+
public static function sandboxModeParametersProvider(): iterable
64+
{
65+
yield 'production mode api base url' => [
66+
false,
67+
'sylius_paypal.api_base_url',
68+
'https://api.paypal.com/',
69+
];
70+
71+
yield 'sandbox mode api base url' => [
72+
true,
73+
'sylius_paypal.api_base_url',
74+
'https://api.sandbox.paypal.com/',
75+
];
76+
77+
yield 'production mode facilitator url' => [
78+
false,
79+
'sylius_paypal.facilitator_url',
80+
'https://prod.paypal.sylius.com',
81+
];
82+
83+
yield 'sandbox mode facilitator url' => [
84+
true,
85+
'sylius_paypal.facilitator_url',
86+
'https://paypal.sylius.com',
87+
];
88+
89+
yield 'production mode sftp host' => [
90+
false,
91+
'sylius.pay_pal.reports_sftp_host',
92+
'reports.paypal.com',
93+
];
94+
95+
yield 'sandbox mode sftp host' => [
96+
true,
97+
'sylius.pay_pal.reports_sftp_host',
98+
'reports.sandbox.paypal.com',
99+
];
100+
101+
yield 'production mode aliased facilitator url' => [
102+
false,
103+
'sylius.pay_pal.facilitator_url',
104+
'https://prod.paypal.sylius.com',
105+
];
106+
107+
yield 'sandbox mode aliased facilitator url' => [
108+
true,
109+
'sylius.pay_pal.facilitator_url',
110+
'https://paypal.sylius.com',
111+
];
112+
113+
yield 'production mode aliased api base url' => [
114+
false,
115+
'sylius.pay_pal.api_base_url',
116+
'https://api.paypal.com/',
117+
];
118+
119+
yield 'sandbox mode aliased api base url' => [
120+
true,
121+
'sylius.pay_pal.api_base_url',
122+
'https://api.sandbox.paypal.com/',
123+
];
124+
125+
yield 'production mode aliased sftp host' => [
126+
false,
127+
'sylius.pay_pal.reports_sftp_host',
128+
'reports.paypal.com',
129+
];
130+
131+
yield 'sandbox mode aliased sftp host' => [
132+
true,
133+
'sylius.pay_pal.reports_sftp_host',
134+
'reports.sandbox.paypal.com',
135+
];
136+
}
137+
138+
/**
139+
* @dataProvider environmentVariablesProvider
140+
*/
141+
public function test_it_respects_environment_variables(
142+
string $envVarName,
143+
string $envVarValue,
144+
string $parameterName,
145+
mixed $expectedValue,
146+
): void {
147+
$this->setEnvVar($envVarName, $envVarValue);
148+
149+
$this->load();
150+
151+
$this->assertContainerBuilderHasParameter($parameterName, $expectedValue);
152+
}
153+
154+
public static function environmentVariablesProvider(): iterable
155+
{
156+
yield 'sandbox mode disabled via env' => [
157+
'SYLIUS_PAYPAL_SANDBOX_ENABLED',
158+
'false',
159+
'sylius_paypal.api_base_url',
160+
'https://api.paypal.com/',
161+
];
162+
163+
yield 'logging increased enabled via env' => [
164+
'SYLIUS_PAYPAL_LOGGING_INCREASED',
165+
'true',
166+
'sylius_paypal.logging.increased',
167+
true,
168+
];
169+
}
170+
171+
private function saveEnvVars(): void
172+
{
173+
$this->originalSandboxEnv = $_ENV['SYLIUS_PAYPAL_SANDBOX_ENABLED'] ?? null;
174+
$this->originalLoggingEnv = $_ENV['SYLIUS_PAYPAL_LOGGING_INCREASED'] ?? null;
175+
}
176+
177+
private function clearEnvVars(): void
178+
{
179+
unset($_ENV['SYLIUS_PAYPAL_SANDBOX_ENABLED']);
180+
unset($_ENV['SYLIUS_PAYPAL_LOGGING_INCREASED']);
181+
}
182+
183+
private function restoreEnvVars(): void
184+
{
185+
if ($this->originalSandboxEnv !== null) {
186+
$_ENV['SYLIUS_PAYPAL_SANDBOX_ENABLED'] = $this->originalSandboxEnv;
187+
} else {
188+
unset($_ENV['SYLIUS_PAYPAL_SANDBOX_ENABLED']);
189+
}
190+
if ($this->originalLoggingEnv !== null) {
191+
$_ENV['SYLIUS_PAYPAL_LOGGING_INCREASED'] = $this->originalLoggingEnv;
192+
} else {
193+
unset($_ENV['SYLIUS_PAYPAL_LOGGING_INCREASED']);
194+
}
195+
}
196+
197+
private function setEnvVar(string $name, string $value): void
198+
{
199+
$_ENV[$name] = $value;
200+
}
201+
}

0 commit comments

Comments
 (0)