Ejegg has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/359079 )
Change subject: WIP get provider config dir from global config ...................................................................... WIP get provider config dir from global config Little more boilerplate setting up provider config, but it should make sure everyone's looking in the same directory Bug: T147503 Change-Id: If06d9b8d64fd95336a42c1409c5d1e44f4f978ab --- M Core/Context.php M Core/Http/RequestHandler.php M Core/ProviderConfiguration.php M Maintenance/MaintenanceBase.php M PaymentProviders/Adyen/Tests/AdyenTestConfiguration.php A PaymentProviders/Adyen/Tests/BaseAdyenTestCase.php M PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php M PaymentProviders/Adyen/Tests/phpunit/CaptureResponseActionTest.php M PaymentProviders/Adyen/Tests/phpunit/PaymentCaptureActionTest.php M PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php M PaymentProviders/Adyen/Tests/phpunit/ReportAvailableTest.php M PaymentProviders/Adyen/Tests/phpunit/RequeueMessageTest.php M PaymentProviders/Amazon/Tests/AmazonTestCase.php M PaymentProviders/Amazon/Tests/AmazonTestConfiguration.php M PaymentProviders/Amazon/Tests/phpunit/AuditTest.php M PaymentProviders/PayPal/Tests/PayPalTestConfiguration.php M PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php M Tests/BaseSmashPigUnitTestCase.php M Tests/TestingContext.php M config/main.yaml 20 files changed, 98 insertions(+), 74 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/SmashPig refs/changes/79/359079/1 diff --git a/Core/Context.php b/Core/Context.php index 4f3a9c1..e1ecc1c 100644 --- a/Core/Context.php +++ b/Core/Context.php @@ -26,7 +26,7 @@ public static function init( GlobalConfiguration $config, $providerConfig = null ) { if ( !Context::$instance ) { if ( !$providerConfig ) { - $providerConfig = ProviderConfiguration::createDefault(); + $providerConfig = ProviderConfiguration::createDefault( $config ); } Context::$instance = new Context(); Context::$instance->setGlobalConfiguration( $config ); diff --git a/Core/Http/RequestHandler.php b/Core/Http/RequestHandler.php index 11e0c9b..b2fdec0 100644 --- a/Core/Http/RequestHandler.php +++ b/Core/Http/RequestHandler.php @@ -48,7 +48,7 @@ // --- Initialize core services --- $config = GlobalConfiguration::create(); - $providerConfig = ProviderConfiguration::createForProvider( $view ); + $providerConfig = ProviderConfiguration::createForProvider( $view, $config ); Context::init( $config, $providerConfig ); // FIXME: let's always initialize this with the context Logger::init( diff --git a/Core/ProviderConfiguration.php b/Core/ProviderConfiguration.php index d5c9006..3fa4c33 100644 --- a/Core/ProviderConfiguration.php +++ b/Core/ProviderConfiguration.php @@ -6,18 +6,27 @@ class ProviderConfiguration extends Configuration { const NO_PROVIDER = 'no_provider'; - protected $provider; + protected $machinewideBaseDirectory; + + protected function __construct( GlobalConfiguration $globalConfig ) { + $baseDir = $globalConfig->val( 'provider-configuration-directory' ); + $this->machinewideBaseDirectory = $baseDir; + } /** - * @param string $provider + * @param string $provider identifier of payment provider + * @param GlobalConfiguration $globalConfig * @return static */ - public static function createForProvider( $provider ) { + public static function createForProvider( + $provider, + GlobalConfiguration $globalConfig + ) { // FIXME: transitional code, remove when everything points to new names $provider = self::remapProvider( $provider ); - $config = new static(); + $config = new static( $globalConfig ); $config->provider = $provider; $config->loadDefaultConfig(); @@ -27,13 +36,18 @@ /** * @param string $provider * @param string|array $overridePath + * @param GlobalConfiguration $globalConfig * @return static */ - public static function createForProviderWithOverrideFile( $provider, $overridePath ) { + public static function createForProviderWithOverrideFile( + $provider, + $overridePath, + GlobalConfiguration $globalConfig + ) { // FIXME: transitional code, remove when everything points to new names $provider = self::remapProvider( $provider ); - $config = new static(); + $config = new static( $globalConfig ); $config->provider = $provider; $searchPath = array_merge( ( array ) $overridePath, @@ -58,10 +72,11 @@ * Create a ProviderConfiguration with just the defaults, * to be used in processes that are not specific to one provider. * We need this for logging in the pending queue consumer, for example. + * @param GlobalConfiguration $globalConfig * @return static */ - public static function createDefault() { - $config = new static(); + public static function createDefault( GlobalConfiguration $globalConfig ) { + $config = new static( $globalConfig ); $config->provider = self::NO_PROVIDER; $config->loadDefaultConfig(); @@ -73,13 +88,13 @@ if ( isset( $_SERVER['HOME'] ) ) { $searchPath[] = "{$_SERVER['HOME']}/.smashpig/{$this->provider}/main.yaml"; } - $searchPath[] = "/etc/smashpig/{$this->provider}/main.yaml"; + $searchPath[] = "{$this->machinewideBaseDirectory}/{$this->provider}/main.yaml"; $searchPath[] = __DIR__ . "/../config/{$this->provider}/main.yaml"; } if ( isset( $_SERVER['HOME'] ) ) { $searchPath[] = "{$_SERVER['HOME']}/.smashpig/provider-defaults.yaml"; } - $searchPath[] = '/etc/smashpig/provider-defaults.yaml'; + $searchPath[] = "{$this->machinewideBaseDirectory}/provider-defaults.yaml"; $searchPath[] = __DIR__ . '/../config/provider-defaults.yaml'; return $searchPath; } @@ -87,4 +102,4 @@ public function getProviderName() { return $this->provider; } -} \ No newline at end of file +} diff --git a/Maintenance/MaintenanceBase.php b/Maintenance/MaintenanceBase.php index 3e2398f..2fe77b4 100755 --- a/Maintenance/MaintenanceBase.php +++ b/Maintenance/MaintenanceBase.php @@ -143,10 +143,10 @@ } // FIXME: 'provider' instead of 'config-node' if ( $configNode === 'default' ) { - $providerConfig = ProviderConfiguration::createDefault(); + $providerConfig = ProviderConfiguration::createDefault( $config ); } else { // FIXME: need different override file for provider config - $providerConfig = ProviderConfiguration::createForProvider( $configNode ); + $providerConfig = ProviderConfiguration::createForProvider( $configNode, $config ); } Context::init( $config, $providerConfig ); Logger::init( diff --git a/PaymentProviders/Adyen/Tests/AdyenTestConfiguration.php b/PaymentProviders/Adyen/Tests/AdyenTestConfiguration.php index e65114e..1120f74 100644 --- a/PaymentProviders/Adyen/Tests/AdyenTestConfiguration.php +++ b/PaymentProviders/Adyen/Tests/AdyenTestConfiguration.php @@ -1,17 +1,18 @@ <?php namespace SmashPig\PaymentProviders\Adyen\Tests; +use SmashPig\Core\GlobalConfiguration; use SmashPig\Tests\TestingProviderConfiguration; class AdyenTestConfiguration extends TestingProviderConfiguration { - public static function instance( $overrides = array() ) { - $config = static::createForProvider( 'adyen' ); + public static function instance( $overrides = array(), GlobalConfiguration $globalConfig ) { + $config = static::createForProvider( 'adyen', $globalConfig ); $config->override( $overrides ); return $config; } - public static function createWithSuccessfulApi() { + public static function createWithSuccessfulApi( GlobalConfiguration $globalConfig ) { $override = array( 'api' => array( 'class' => 'SmashPig\PaymentProviders\Adyen\Tests\MockAdyenPaymentsAPI', @@ -19,10 +20,10 @@ array( 'Success!' ) ) ); - return self::instance( $override ); + return self::instance( $override, $globalConfig ); } - public static function createWithUnsuccessfulApi() { + public static function createWithUnsuccessfulApi( GlobalConfiguration $globalConfig ) { $override = array( 'api' => array( 'class' => 'SmashPig\PaymentProviders\Adyen\Tests\MockAdyenPaymentsAPI', @@ -32,6 +33,6 @@ array( 'false' ) ) ); - return self::instance( $override ); + return self::instance( $override, $globalConfig ); } } diff --git a/PaymentProviders/Adyen/Tests/BaseAdyenTestCase.php b/PaymentProviders/Adyen/Tests/BaseAdyenTestCase.php new file mode 100644 index 0000000..bcf62ef --- /dev/null +++ b/PaymentProviders/Adyen/Tests/BaseAdyenTestCase.php @@ -0,0 +1,24 @@ +<?php + +namespace SmashPig\PaymentProviders\Adyen\Tests; + +use SmashPig\Core\Context; +use SmashPig\Core\ProviderConfiguration; +use SmashPig\Tests\BaseSmashPigUnitTestCase; + +class BaseAdyenTestCase extends BaseSmashPigUnitTestCase { + + /** + * @var ProviderConfiguration + */ + public $config; + + public function setUp() { + parent::setUp(); + $ctx = Context::get(); + $this->config = AdyenTestConfiguration::createWithSuccessfulApi( + $ctx->getGlobalConfiguration() + ); + $ctx->setProviderConfiguration( $this->config ); + } +} diff --git a/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php b/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php index 6636b80..dd85942 100644 --- a/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php +++ b/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php @@ -8,6 +8,7 @@ use SmashPig\Core\ProviderConfiguration; use SmashPig\PaymentProviders\Adyen\Jobs\ProcessCaptureRequestJob; use SmashPig\PaymentProviders\Adyen\Tests\AdyenTestConfiguration; +use SmashPig\PaymentProviders\Adyen\Tests\BaseAdyenTestCase; use SmashPig\Tests\BaseSmashPigUnitTestCase; /** @@ -15,12 +16,7 @@ * * @group Adyen */ -class CaptureJobTest extends BaseSmashPigUnitTestCase { - - /** - * @var ProviderConfiguration - */ - public $config; +class CaptureJobTest extends BaseAdyenTestCase { /** * @var PendingDatabase */ @@ -33,8 +29,7 @@ public function setUp() { parent::setUp(); - $this->config = AdyenTestConfiguration::createWithSuccessfulApi(); - Context::get()->setProviderConfiguration( $this->config ); + $this->pendingDatabase = PendingDatabase::get(); $this->pendingMessage = json_decode( file_get_contents( __DIR__ . '/../Data/pending.json' ) , true diff --git a/PaymentProviders/Adyen/Tests/phpunit/CaptureResponseActionTest.php b/PaymentProviders/Adyen/Tests/phpunit/CaptureResponseActionTest.php index 195cc7e..248a066 100644 --- a/PaymentProviders/Adyen/Tests/phpunit/CaptureResponseActionTest.php +++ b/PaymentProviders/Adyen/Tests/phpunit/CaptureResponseActionTest.php @@ -10,7 +10,7 @@ /** * @group Adyen */ -class CaptureResponseActionTest extends BaseSmashPigUnitTestCase { +class CaptureResponseActionTest extends BaseAdyenTestCase { /** * @var FifoQueueStore @@ -19,12 +19,7 @@ public function setUp() { parent::setUp(); - $context = Context::get(); - $context->setProviderConfiguration( - AdyenTestConfiguration::createWithSuccessfulApi() - ); - - $this->jobQueue = $context->getGlobalConfiguration() + $this->jobQueue = Context::get()->getGlobalConfiguration() ->object( 'data-store/jobs-adyen' ); } diff --git a/PaymentProviders/Adyen/Tests/phpunit/PaymentCaptureActionTest.php b/PaymentProviders/Adyen/Tests/phpunit/PaymentCaptureActionTest.php index 9667abc..bfa8a49 100644 --- a/PaymentProviders/Adyen/Tests/phpunit/PaymentCaptureActionTest.php +++ b/PaymentProviders/Adyen/Tests/phpunit/PaymentCaptureActionTest.php @@ -10,7 +10,7 @@ /** * @group Adyen */ -class PaymentCaptureActionTest extends BaseSmashPigUnitTestCase { +class PaymentCaptureActionTest extends BaseAdyenTestCase { /** * @var FifoQueueStore @@ -19,8 +19,6 @@ public function setUp() { parent::setUp(); - $providerConfig = AdyenTestConfiguration::createWithSuccessfulApi(); - Context::get()->setProviderConfiguration( $providerConfig ); $globalConfig = Context::get()->getGlobalConfiguration(); $this->jobQueue = $globalConfig->object( 'data-store/jobs-adyen' ); } diff --git a/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php b/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php index 09d4aa8..f14d4df 100644 --- a/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php +++ b/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php @@ -6,6 +6,7 @@ use SmashPig\Core\DataStores\QueueWrapper; use SmashPig\PaymentProviders\Adyen\Jobs\RecordCaptureJob; use SmashPig\PaymentProviders\Adyen\Tests\AdyenTestConfiguration; +use SmashPig\PaymentProviders\Adyen\Tests\BaseAdyenTestCase; use SmashPig\Tests\BaseSmashPigUnitTestCase; /** @@ -13,12 +14,8 @@ * * @group Adyen */ -class RecordCaptureJobTest extends BaseSmashPigUnitTestCase { +class RecordCaptureJobTest extends BaseAdyenTestCase { - /** - * @var AdyenTestConfiguration - */ - public $config; /** * @var PendingDatabase */ @@ -27,8 +24,6 @@ public function setUp() { parent::setUp(); - $this->config = AdyenTestConfiguration::createWithSuccessfulApi(); - Context::get()->setProviderConfiguration( $this->config ); $this->pendingDatabase = PendingDatabase::get(); $this->pendingMessage = json_decode( file_get_contents( __DIR__ . '/../Data/pending.json' ) , true diff --git a/PaymentProviders/Adyen/Tests/phpunit/ReportAvailableTest.php b/PaymentProviders/Adyen/Tests/phpunit/ReportAvailableTest.php index f5ccb06..afdc0b3 100644 --- a/PaymentProviders/Adyen/Tests/phpunit/ReportAvailableTest.php +++ b/PaymentProviders/Adyen/Tests/phpunit/ReportAvailableTest.php @@ -12,12 +12,7 @@ /** * @group Adyen */ -class ReportAvailableTest extends BaseSmashPigUnitTestCase { - /** - * @var AdyenTestConfiguration - */ - protected $config; - +class ReportAvailableTest extends BaseAdyenTestCase { /** * @var FifoQueueStore */ @@ -25,8 +20,6 @@ public function setUp() { parent::setUp(); - $this->config = AdyenTestConfiguration::createWithSuccessfulApi(); - Context::get()->setProviderConfiguration( $this->config ); $this->jobQueue = QueueWrapper::getQueue( 'jobs-adyen' ); } diff --git a/PaymentProviders/Adyen/Tests/phpunit/RequeueMessageTest.php b/PaymentProviders/Adyen/Tests/phpunit/RequeueMessageTest.php index bd4977d..236c19b 100644 --- a/PaymentProviders/Adyen/Tests/phpunit/RequeueMessageTest.php +++ b/PaymentProviders/Adyen/Tests/phpunit/RequeueMessageTest.php @@ -5,6 +5,7 @@ use SmashPig\Core\DataStores\PendingDatabase; use SmashPig\PaymentProviders\Adyen\Jobs\ProcessCaptureRequestJob; use SmashPig\PaymentProviders\Adyen\Tests\AdyenTestConfiguration; +use SmashPig\PaymentProviders\Adyen\Tests\BaseAdyenTestCase; use SmashPig\Tests\BaseSmashPigUnitTestCase; /** @@ -13,13 +14,7 @@ * * @group Adyen */ -class RequeueMessageTest extends BaseSmashPigUnitTestCase { - - public function setUp() { - parent::setUp(); - $config = AdyenTestConfiguration::createWithSuccessfulApi(); - Context::get()->setProviderConfiguration( $config ); - } +class RequeueMessageTest extends BaseAdyenTestCase { /** * @expectedException \SmashPig\Core\RetryableException diff --git a/PaymentProviders/Amazon/Tests/AmazonTestCase.php b/PaymentProviders/Amazon/Tests/AmazonTestCase.php index 640130d..ce3eb45 100644 --- a/PaymentProviders/Amazon/Tests/AmazonTestCase.php +++ b/PaymentProviders/Amazon/Tests/AmazonTestCase.php @@ -12,8 +12,9 @@ public function setUp() { parent::setUp(); chdir( __DIR__ ); // So the mock client can find its response files - $config = AmazonTestConfiguration::instance(); - Context::get()->setProviderConfiguration( $config ); + $ctx = Context::get(); + $config = AmazonTestConfiguration::instance( $ctx->getGlobalConfiguration() ); + $ctx->setProviderConfiguration( $config ); $this->mockClient = $config->object( 'payments-client', true ); $this->mockClient->calls = array(); $this->mockClient->returns = array(); diff --git a/PaymentProviders/Amazon/Tests/AmazonTestConfiguration.php b/PaymentProviders/Amazon/Tests/AmazonTestConfiguration.php index 1af13fb..95dc530 100644 --- a/PaymentProviders/Amazon/Tests/AmazonTestConfiguration.php +++ b/PaymentProviders/Amazon/Tests/AmazonTestConfiguration.php @@ -2,14 +2,16 @@ namespace SmashPig\PaymentProviders\Amazon\Tests; +use SmashPig\Core\GlobalConfiguration; use SmashPig\Tests\TestingProviderConfiguration; class AmazonTestConfiguration extends TestingProviderConfiguration { - public static function instance() { + public static function instance( GlobalConfiguration $globalConfig ) { return self::createForProviderWithOverrideFile( 'amazon', - __DIR__ . '/config_test.yaml' + __DIR__ . '/config_test.yaml', + $globalConfig ); } } diff --git a/PaymentProviders/Amazon/Tests/phpunit/AuditTest.php b/PaymentProviders/Amazon/Tests/phpunit/AuditTest.php index 108d74d..29f13b0 100644 --- a/PaymentProviders/Amazon/Tests/phpunit/AuditTest.php +++ b/PaymentProviders/Amazon/Tests/phpunit/AuditTest.php @@ -11,8 +11,9 @@ class AuditTest extends BaseSmashPigUnitTestCase { public function setUp() { parent::setUp(); - - Context::get()->setProviderConfiguration( AmazonTestConfiguration::instance() ); + $ctx = Context::get(); + $config = AmazonTestConfiguration::instance( $ctx->getGlobalConfiguration() ); + $ctx->setProviderConfiguration( $config ); } /** diff --git a/PaymentProviders/PayPal/Tests/PayPalTestConfiguration.php b/PaymentProviders/PayPal/Tests/PayPalTestConfiguration.php index 6cce474..ca0b15d 100644 --- a/PaymentProviders/PayPal/Tests/PayPalTestConfiguration.php +++ b/PaymentProviders/PayPal/Tests/PayPalTestConfiguration.php @@ -1,14 +1,16 @@ <?php namespace SmashPig\PaymentProviders\PayPal\Tests; +use SmashPig\Core\GlobalConfiguration; use SmashPig\Tests\TestingProviderConfiguration; class PayPalTestConfiguration extends TestingProviderConfiguration { - public static function get () { + public static function get( GlobalConfiguration $globalConfig ) { return self::createForProviderWithOverrideFile( 'paypal', - __DIR__ . '/config_test.yaml' + __DIR__ . '/config_test.yaml', + $globalConfig ); } diff --git a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php index a25426d..2b08ef4 100644 --- a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php +++ b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php @@ -44,7 +44,7 @@ parent::setUp(); $this->config = Context::get()->getGlobalConfiguration(); Context::get()->setProviderConfiguration( - PayPalTestConfiguration::get() + PayPalTestConfiguration::get( $this->config ) ); } diff --git a/Tests/BaseSmashPigUnitTestCase.php b/Tests/BaseSmashPigUnitTestCase.php index eb918eb..676fc91 100644 --- a/Tests/BaseSmashPigUnitTestCase.php +++ b/Tests/BaseSmashPigUnitTestCase.php @@ -28,8 +28,10 @@ * @return TestingProviderConfiguration */ protected function setProviderConfiguration( $provider ) { - $config = TestingProviderConfiguration::createForProvider( $provider ); - Context::get()->setProviderConfiguration( $config ); + $ctx = Context::get(); + $globalConfig = $ctx->getGlobalConfiguration(); + $config = TestingProviderConfiguration::createForProvider( $provider, $globalConfig ); + $ctx->setProviderConfiguration( $config ); return $config; } } diff --git a/Tests/TestingContext.php b/Tests/TestingContext.php index 77e0822..db93ef4 100644 --- a/Tests/TestingContext.php +++ b/Tests/TestingContext.php @@ -15,7 +15,7 @@ // Override the existing context Context::$instance = new TestingContext(); if ( !$providerConfig ) { - $providerConfig = TestingProviderConfiguration::createDefault(); + $providerConfig = TestingProviderConfiguration::createDefault( $config ); } Context::$instance->setProviderConfiguration( $providerConfig ); Context::$instance->setGlobalConfiguration( $config ); @@ -48,4 +48,4 @@ return parent::getProviderConfiguration(); } -} \ No newline at end of file +} diff --git a/config/main.yaml b/config/main.yaml index 1751969..7c24cb2 100644 --- a/config/main.yaml +++ b/config/main.yaml @@ -104,3 +104,8 @@ requeue-delay: 1200 requeue-max-age: 12000 + +# By default, provider configuration files live in the same directory as +# global configuration files. Change this value to read provider configuration +# files from an alternate directory. +provider-configuration-directory: '/etc/smashpig' -- To view, visit https://gerrit.wikimedia.org/r/359079 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If06d9b8d64fd95336a42c1409c5d1e44f4f978ab Gerrit-PatchSet: 1 Gerrit-Project: wikimedia/fundraising/SmashPig Gerrit-Branch: master Gerrit-Owner: Ejegg <ej...@ejegg.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits