Awight has submitted this change and it was merged.
Change subject: Merge master into deployment
......................................................................
Merge master into deployment
Conflicts:
DonationInterface.php
tests/Adapter/GlobalCollect/GlobalCollectTest.php
tests/includes/test_gateway/TestingGlobalCollectAdapter.php
Change-Id: Idab2779840fa9769f4daa147161e1d7ebd34f453
---
M DonationInterface.php
D tests/Adapter/GlobalCollect/GlobalCollectTest.php
D tests/includes/test_gateway/TestingGlobalCollectAdapter.php
3 files changed, 0 insertions(+), 754 deletions(-)
Approvals:
Awight: Verified; Looks good to me, approved
jenkins-bot: Verified
diff --git a/DonationInterface.php b/DonationInterface.php
index b876639..feb2dc6 100644
--- a/DonationInterface.php
+++ b/DonationInterface.php
@@ -970,46 +970,6 @@
// Load the default form settings.
require_once __DIR__ . '/DonationInterfaceFormSettings.php';
-/**
- * FUNCTIONS
- */
-
-<<<<<<< HEAD (1b2a97 update vendor submodule)
-//---Stomp functions---
-// TODO: Encapsulate in a class, or deprecate.
-require_once( __DIR__ . '/activemq_stomp/activemq_stomp.php' );
-$wgAutoloadClasses['Stomp'] = __DIR__ . '/activemq_stomp/Stomp.php';
-=======
-function efDonationInterfaceUnitTests( &$files ) {
- global $wgAutoloadClasses;
-
- $testDir = __DIR__ . '/tests/';
-
- $files[] = $testDir . 'AllTests.php';
-
- $wgAutoloadClasses['DonationInterfaceTestCase'] = $testDir .
'DonationInterfaceTestCase.php';
- $wgAutoloadClasses['TestingQueue'] = $testDir .
'includes/TestingQueue.php';
- $wgAutoloadClasses['TestingAdyenAdapter'] = $testDir .
'includes/test_gateway/TestingAdyenAdapter.php';
- $wgAutoloadClasses['TestingAmazonAdapter'] = $testDir .
'includes/test_gateway/TestingAmazonAdapter.php';
- $wgAutoloadClasses['TestingAstropayAdapter'] = $testDir .
'includes/test_gateway/TestingAstropayAdapter.php';
- $wgAutoloadClasses['TestingAmazonGateway'] = $testDir .
'includes/test_page/TestingAmazonGateway.php';
- $wgAutoloadClasses['TestingDonationLogger'] = $testDir .
'includes/TestingDonationLogger.php';
- $wgAutoloadClasses['TestingGatewayPage'] = $testDir .
'includes/TestingGatewayPage.php';
- $wgAutoloadClasses['TestingGenericAdapter'] = $testDir .
'includes/test_gateway/TestingGenericAdapter.php';
- $wgAutoloadClasses['TestingGlobalCollectAdapter'] = $testDir .
'includes/test_gateway/TestingGlobalCollectAdapter.php';
- $wgAutoloadClasses['TestingGlobalCollectGateway'] = $testDir .
'includes/test_page/TestingGlobalCollectGateway.php';
- $wgAutoloadClasses['TestingGlobalCollectOrphanAdapter'] = $testDir .
'includes/test_gateway/TestingGlobalCollectOrphanAdapter.php';
- $wgAutoloadClasses['TestingPaypalAdapter'] = $testDir .
'includes/test_gateway/TestingPaypalAdapter.php';
- $wgAutoloadClasses['TestingWorldpayAdapter'] = $testDir .
'includes/test_gateway/TestingWorldpayAdapter.php';
- $wgAutoloadClasses['TestingWorldpayGateway'] = $testDir .
'includes/test_page/TestingWorldpayGateway.php';
-
- $wgAutoloadClasses['TestingLanguage'] = $testDir .
'includes/test_language/test.language.php';
- $wgAutoloadClasses['TestingRequest'] = $testDir .
'includes/test_request/test.request.php';
-
- return true;
-}
->>>>>>> BRANCH (f56ac7 Add id attribute to amount and currency)
-
// Include composer's autoload if the vendor directory exists. If we have been
// included via Composer, our dependencies should already be autoloaded at the
// top level.
diff --git a/tests/Adapter/GlobalCollect/GlobalCollectTest.php
b/tests/Adapter/GlobalCollect/GlobalCollectTest.php
deleted file mode 100644
index bb2edbe..0000000
--- a/tests/Adapter/GlobalCollect/GlobalCollectTest.php
+++ /dev/null
@@ -1,570 +0,0 @@
-<<<<<<< HEAD (1b2a97 update vendor submodule)
-=======
-<?php
-/**
- * Wikimedia Foundation
- *
- * LICENSE
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- */
-use Psr\Log\LogLevel;
-
-/**
- *
- * @group Fundraising
- * @group DonationInterface
- * @group GlobalCollect
- */
-class DonationInterface_Adapter_GlobalCollect_GlobalCollectTest extends
DonationInterfaceTestCase {
- public function setUp() {
- global $wgGlobalCollectGatewayHtmlFormDir;
-
- parent::setUp();
-
- $this->setMwGlobals( array(
- 'wgGlobalCollectGatewayEnabled' => true,
- 'wgDonationInterfaceAllowedHtmlForms' => array(
- 'cc-vmad' => array(
- 'file' =>
$wgGlobalCollectGatewayHtmlFormDir . '/cc/cc-vmad.html',
- 'gateway' => 'globalcollect',
- 'payment_methods' => array('cc' =>
array( 'visa', 'mc', 'amex', 'discover' )),
- 'countries' => array(
- '+' => array( 'US', ),
- ),
- ),
- ),
- ) );
- }
-
- /**
- * @param $name string The name of the test case
- * @param $data array Any parameters read from a dataProvider
- * @param $dataName string|int The name or index of the data set
- */
- function __construct( $name = null, array $data = array(), $dataName =
'' ) {
- parent::__construct( $name, $data, $dataName );
- $this->testAdapterClass = 'TestingGlobalCollectAdapter';
- }
-
- function tearDown() {
- TestingGlobalCollectAdapter::clearGlobalsCache();
- parent::tearDown();
- }
-
- /**
- * testnormalizeOrderID
- * Non-exhaustive integration tests to verify that order_id
- * normalization works as expected with different settings and
- * conditions in theGlobalCollect adapter
- * @covers GatewayAdapter::normalizeOrderID
- */
- public function testNormalizeOrderID() {
- $init = self::$initial_vars;
- unset( $init['order_id'] );
-
- //no order_id from anywhere, explicit no generate
- $gateway = $this->getFreshGatewayObject( $init, array (
'order_id_meta' => array ( 'generate' => FALSE ) ) );
- $this->assertFalse( $gateway->getOrderIDMeta( 'generate' ),
'The order_id meta generate setting override is not working properly. Deferred
order_id generation may be broken.' );
- $this->assertNull( $gateway->getData_Unstaged_Escaped(
'order_id' ), 'Failed asserting that an absent order id is left as null, when
not generating our own' );
-
- //no order_id from anywhere, explicit generate
- $gateway = $this->getFreshGatewayObject( $init, array (
'order_id_meta' => array ( 'generate' => TRUE ) ) );
- $this->assertTrue( $gateway->getOrderIDMeta( 'generate' ), 'The
order_id meta generate setting override is not working properly. Self order_id
generation may be broken.' );
- $this->assertInternalType( 'numeric',
$gateway->getData_Unstaged_Escaped( 'order_id' ), 'Generated order_id is not
numeric, which it should be for GlobalCollect' );
-
- $_GET['order_id'] = '55555';
- $_SESSION['Donor']['order_id'] = '44444';
-
- //conflicting order_id in $GET and $SESSION, default GC
generation
- $gateway = $this->getFreshGatewayObject( $init );
- $this->assertEquals( '55555',
$gateway->getData_Unstaged_Escaped( 'order_id' ), 'GlobalCollect gateway is
preferring session data over the $_GET. Session should be secondary.' );
-
- //conflicting order_id in $GET and $SESSION, garbage data in
$_GET, default GC generation
- $_GET['order_id'] = 'nonsense!';
- $gateway = $this->getFreshGatewayObject( $init );
- $this->assertEquals( '44444',
$gateway->getData_Unstaged_Escaped( 'order_id' ), 'GlobalCollect gateway is not
ignoring nonsensical order_id candidates' );
-
- unset( $_GET['order_id'] );
- //order_id in $SESSION, default GC generation
- $gateway = $this->getFreshGatewayObject( $init );
- $this->assertEquals( '44444',
$gateway->getData_Unstaged_Escaped( 'order_id' ), 'GlobalCollect gateway is not
recognizing the session order_id' );
-
- $_POST['order_id'] = '33333';
- //conflicting order_id in $_POST and $SESSION, default GC
generation
- $gateway = $this->getFreshGatewayObject( $init );
- $this->assertEquals( '33333',
$gateway->getData_Unstaged_Escaped( 'order_id' ), 'GlobalCollect gateway is
preferring session data over the $_POST. Session should be secondary.' );
-
- $init['order_id'] = '22222';
- //conflicting order_id in init data, $_POST and $SESSION,
explicit GC generation, batch mode
- $gateway = $this->getFreshGatewayObject( $init, array (
'order_id_meta' => array ( 'generate' => TRUE ), 'batch_mode' => TRUE, ) );
- $this->assertEquals( $init['order_id'],
$gateway->getData_Unstaged_Escaped( 'order_id' ), 'Failed asserting that an
extrenally provided order id is being honored in batch mode' );
-
- //make sure that decimal numbers are rejected by GC. Should be
a toss and regen
- $init['order_id'] = '2143.0';
- unset( $_POST['order_id'] );
- unset( $_SESSION['Donor']['order_id'] );
- //conflicting order_id in init data, $_POST and $SESSION,
explicit GC generation, batch mode
- $gateway = $this->getFreshGatewayObject( $init, array (
'order_id_meta' => array ( 'generate' => TRUE, 'disallow_decimals' => TRUE ),
'batch_mode' => TRUE, ) );
- $this->assertNotEquals( $init['order_id'],
$gateway->getData_Unstaged_Escaped( 'order_id' ), 'Failed assering that a
decimal order_id was regenerated, when disallow_decimals is true' );
- }
-
- /**
- * Non-exhaustive integration tests to verify that order_id, when in
- * self-generation mode, won't regenerate until it is told to.
- * @covers GatewayAdapter::normalizeOrderID
- * @covers GatewayAdapter::regenerateOrderID
- */
- function testStickyGeneratedOrderID() {
- $init = self::$initial_vars;
- unset( $init['order_id'] );
-
- //no order_id from anywhere, explicit generate
- $gateway = $this->getFreshGatewayObject( $init, array (
'order_id_meta' => array ( 'generate' => TRUE ) ) );
- $this->assertNotNull( $gateway->getData_Unstaged_Escaped(
'order_id' ), 'Generated order_id is null. The rest of this test is broken.' );
- $original_order_id = $gateway->getData_Unstaged_Escaped(
'order_id' );
-
- $gateway->normalizeOrderID();
- $this->assertEquals( $original_order_id,
$gateway->getData_Unstaged_Escaped( 'order_id' ), 'Re-normalized order_id has
changed without explicit regeneration.' );
-
- //this might look a bit strange, but we need to be able to
generate valid order_ids without making them stick to anything.
- $gateway->generateOrderID();
- $this->assertEquals( $original_order_id,
$gateway->getData_Unstaged_Escaped( 'order_id' ), 'function generateOrderID
auto-changed the selected order ID. Not cool.' );
-
- $gateway->regenerateOrderID();
- $this->assertNotEquals( $original_order_id,
$gateway->getData_Unstaged_Escaped( 'order_id' ), 'Re-normalized order_id has
not changed, after explicit regeneration.' );
- }
-
- /**
- * Integration test to verify that order_id can be retrieved from
- * performing an INSERT_ORDERWITHPAYMENT.
- */
- function testOrderIDRetrieval() {
- $init = $this->getDonorTestData();
- unset( $init['order_id'] );
- $init['payment_method'] = 'cc';
- $init['payment_submethod'] = 'visa';
-
- //no order_id from anywhere, explicit generate
- $gateway = $this->getFreshGatewayObject( $init, array (
'order_id_meta' => array ( 'generate' => FALSE ) ) );
- $this->assertNull( $gateway->getData_Unstaged_Escaped(
'order_id' ), 'Ungenerated order_id is not null. The rest of this test is
broken.' );
-
- $gateway->do_transaction( 'INSERT_ORDERWITHPAYMENT' );
-
- $this->assertNotNull( $gateway->getData_Unstaged_Escaped(
'order_id' ), 'No order_id was retrieved from INSERT_ORDERWITHPAYMENT' );
- }
-
- /**
- * Just run the GET_ORDERSTATUS transaction and make sure we load the
data
- */
- function testGetOrderStatus() {
- $init = $this->getDonorTestData();
- $init['payment_method'] = 'cc';
- $init['payment_submethod'] = 'visa';
- $init['email'] = '[email protected]';
-
- $gateway = $this->getFreshGatewayObject( $init );
-
- $gateway->do_transaction( 'GET_ORDERSTATUS' );
-
- $data = $gateway->getTransactionData();
-
- $this->assertEquals( 'N', $data['CVVRESULT'], 'CVV Result not
loaded from XML response' );
- }
-
- /**
- * Don't fraud-fail someone for bad CVV if GET_ORDERSTATUS
- * comes back with STATUSID 25 and no CVVRESULT
- * @group CvvResult
- */
- function testConfirmCreditCardStatus25() {
- $init = $this->getDonorTestData();
- $init['payment_method'] = 'cc';
- $init['payment_submethod'] = 'visa';
- $init['email'] = '[email protected]';
-
- $this->setMwGlobals( 'wgRequest',
- new FauxRequest( array( 'CVVRESULT' => 'M' ), false ) );
-
- $gateway = $this->getFreshGatewayObject( $init );
- $gateway->setDummyGatewayResponseCode( '25' );
-
- $gateway->do_transaction( 'Confirm_CreditCard' );
- $action = $gateway->getValidationAction();
- $this->assertEquals( 'process', $action, 'Gateway should not
fraud fail on STATUSID 25' );
- }
-
- /**
- * If CVVRESULT is unrecognized, fraud-fail and warn
- * @group CvvResult
- */
- function testConfirmCreditCardBadCVVResult() {
- $init = $this->getDonorTestData();
- $init['payment_method'] = 'cc';
- $init['payment_submethod'] = 'visa';
- $init['email'] = '[email protected]';
-
- $this->setMwGlobals( 'wgRequest',
- new FauxRequest( array( 'CVVRESULT' => ' ' ), false ) );
-
- $gateway = $this->getFreshGatewayObject( $init );
- $gateway->setDummyGatewayResponseCode( '800' );
-
- $gateway->do_transaction( 'Confirm_CreditCard' );
- $result = $gateway->getCvvResult();
- $this->assertEquals( false, $result, 'Gateway should fraud fail
if CVVRESULT is not mapped' );
- $matches = $this->getLogMatches( LogLevel::WARNING,
"/Unrecognized cvv_result ' '$/" );
- $this->assertNotEmpty( $matches, 'Did not log expected warning
on unmapped CVVRESULT' );
- }
-
- /**
- * We should skip the API call if we're already suspicious
- */
- function testGetOrderStatusSkipsIfFail() {
- DonationInterface_FraudFiltersTest::setupFraudMaps();
-
- $init = $this->getDonorTestData();
- $init['payment_method'] = 'cc';
- $init['payment_submethod'] = 'visa';
- $init['email'] = '[email protected]'; //configured as a
fraudy domain
-
- $gateway = $this->getFreshGatewayObject( $init );
-
- $gateway->do_transaction( 'GET_ORDERSTATUS' );
-
- $data = $gateway->getTransactionData();
-
- $this->assertEquals( null, $data['CVVRESULT'], 'preprocess
should stop API call if fraud detected' );
- }
-
- /**
- * Ensure the Confirm_CreditCard transaction prefers CVVRESULT from the
XML
- * over any value from the querystring
- */
- function testConfirmCreditCardPrefersXmlCvv() {
- $init = $this->getDonorTestData();
- $init['payment_method'] = 'cc';
- $init['payment_submethod'] = 'visa';
- $init['email'] = '[email protected]';
-
- $this->setMwGlobals( 'wgRequest',
- new FauxRequest( array( 'CVVRESULT' => 'M' ), false ) );
-
- $gateway = $this->getFreshGatewayObject( $init );
-
- $gateway->do_transaction( 'Confirm_CreditCard' );
-
- $this->assertEquals( 'N',
$gateway->getData_Unstaged_Escaped('cvv_result'), 'CVV Result not taken from
XML response' );
- }
-
- /**
- * If querystring and XML have different CVVRESULT, that's awfully fishy
- */
- function testConfirmCreditCardFailsOnCvvResultConflict() {
- $init = $this->getDonorTestData();
- $init['payment_method'] = 'cc';
- $init['payment_submethod'] = 'visa';
- $init['email'] = '[email protected]';
-
- $this->setMwGlobals( 'wgRequest',
- new FauxRequest( array( 'CVVRESULT' => 'M' ), false ) );
-
- $gateway = $this->getFreshGatewayObject( $init );
-
- $result = $gateway->do_transaction( 'Confirm_CreditCard' );
- // FIXME: this is not a communication failure, it's a fraud
failure
- $this->assertFalse( $result->getCommunicationStatus(), 'Credit
card should fail if querystring and XML have different CVVRESULT' );
- }
-
- /**
- * testDefineVarMap
- *
- * This is tested with a bank transfer from Spain.
- *
- * @covers GlobalCollectAdapter::__construct
- * @covers GlobalCollectAdapter::defineVarMap
- */
- public function testDefineVarMap() {
-
- $gateway = $this->getFreshGatewayObject( self::$initial_vars );
-
- $var_map = array(
- 'ORDERID' => 'order_id',
- 'AMOUNT' => 'amount',
- 'CURRENCYCODE' => 'currency_code',
- 'LANGUAGECODE' => 'language',
- 'COUNTRYCODE' => 'country',
- 'MERCHANTREFERENCE' => 'contribution_tracking_id',
- 'RETURNURL' => 'returnto',
- 'IPADDRESS' => 'server_ip',
- 'ISSUERID' => 'issuer_id',
- 'PAYMENTPRODUCTID' => 'payment_product',
- 'CVV' => 'cvv',
- 'EXPIRYDATE' => 'expiration',
- 'CREDITCARDNUMBER' => 'card_num',
- 'FIRSTNAME' => 'fname',
- 'SURNAME' => 'lname',
- 'STREET' => 'street',
- 'CITY' => 'city',
- 'STATE' => 'state',
- 'ZIP' => 'zip',
- 'EMAIL' => 'email',
- 'ACCOUNTHOLDER' => 'account_holder',
- 'ACCOUNTNAME' => 'account_name',
- 'ACCOUNTNUMBER' => 'account_number',
- 'ADDRESSLINE1E' => 'address_line_1e',
- 'ADDRESSLINE2' => 'address_line_2',
- 'ADDRESSLINE3' => 'address_line_3',
- 'ADDRESSLINE4' => 'address_line_4',
- 'ATTEMPTID' => 'attempt_id',
- 'AUTHORISATIONID' => 'authorization_id',
- 'BANKACCOUNTNUMBER' => 'bank_account_number',
- 'BANKAGENZIA' => 'bank_agenzia',
- 'BANKCHECKDIGIT' => 'bank_check_digit',
- 'BANKCODE' => 'bank_code',
- 'BANKFILIALE' => 'bank_filiale',
- 'BANKNAME' => 'bank_name',
- 'BRANCHCODE' => 'branch_code',
- 'COUNTRYCODEBANK' => 'country_code_bank',
- 'COUNTRYDESCRIPTION' => 'country_description',
- 'CUSTOMERBANKCITY' => 'customer_bank_city',
- 'CUSTOMERBANKSTREET' => 'customer_bank_street',
- 'CUSTOMERBANKNUMBER' => 'customer_bank_number',
- 'CUSTOMERBANKZIP' => 'customer_bank_zip',
- 'DATECOLLECT' => 'date_collect',
- 'DESCRIPTOR' => 'descriptor',
- 'DIRECTDEBITTEXT' => 'direct_debit_text',
- 'DOMICILIO' => 'domicilio',
- 'EFFORTID' => 'effort_id',
- 'IBAN' => 'iban',
- 'IPADDRESSCUSTOMER' => 'user_ip',
- 'PAYMENTREFERENCE' => 'payment_reference',
- 'PROVINCIA' => 'provincia',
- 'SPECIALID' => 'special_id',
- 'SWIFTCODE' => 'swift_code',
- 'TRANSACTIONTYPE' => 'transaction_type',
- 'FISCALNUMBER' => 'fiscal_number',
- );
-
- $exposed = TestingAccessWrapper::newFromObject( $gateway );
- $this->assertEquals( $var_map, $exposed->var_map );
- }
-
- public function testLanguageStaging() {
- $options = $this->getDonorTestData( 'NO' );
- $options['payment_method'] = 'cc';
- $options['payment_submethod'] = 'visa';
- $gateway = $this->getFreshGatewayObject( $options );
-
- $exposed = TestingAccessWrapper::newFromObject( $gateway );
- $exposed->stageData();
-
- $this->assertEquals( $exposed->getData_Staged( 'language' ),
'no', "'NO' donor's language was inproperly set. Should be 'no'" );
- }
-
- public function testLanguageFallbackStaging() {
- $options = $this->getDonorTestData( 'Catalonia' );
- $options['payment_method'] = 'cc';
- $options['payment_submethod'] = 'visa';
- $gateway = $this->getFreshGatewayObject( $options );
-
- $exposed = TestingAccessWrapper::newFromObject( $gateway );
- $exposed->stageData();
-
- // Requesting the fallback language from the gateway.
- $this->assertEquals( 'en', $exposed->getData_Staged( 'language'
) );
- }
-
- /**
- * Make sure unstaging functions don't overwrite core donor data.
- */
- public function testAddResponseData_underzealous() {
- $options = $this->getDonorTestData( 'Catalonia' );
- $options['payment_method'] = 'cc';
- $options['payment_submethod'] = 'visa';
- $gateway = $this->getFreshGatewayObject( $options );
-
- // This will set staged_data['language'] = 'en'.
- $exposed = TestingAccessWrapper::newFromObject( $gateway );
- $exposed->stageData();
-
- $ctid = mt_rand();
-
- $gateway->addResponseData( array(
- 'contribution_tracking_id' => $ctid . '.1',
- ) );
-
- $exposed = TestingAccessWrapper::newFromObject( $gateway );
- // Desired vars were written into normalized data.
- $this->assertEquals( $ctid, $exposed->dataObj->getVal_Escaped(
'contribution_tracking_id' ) );
-
- // Language was not overwritten.
- $this->assertEquals( 'ca', $exposed->dataObj->getVal_Escaped(
'language' ) );
- }
-
- /**
- * Tests to make sure that certain error codes returned from GC will or
- * will not create payments error loglines.
- */
- function testCCLogsOnGatewayError() {
- $init = $this->getDonorTestData( 'US' );
- unset( $init['order_id'] );
- $init['ffname'] = 'cc-vmad';
-
- //this should not throw any payments errors: Just an invalid
card.
- $gateway = $this->getFreshGatewayObject( $init );
- $gateway->setDummyGatewayResponseCode( '430285' );
- $gateway->do_transaction( 'GET_ORDERSTATUS' );
- $this->verifyNoLogErrors();
-
- //Now test one we want to throw a payments error
- $gateway = $this->getFreshGatewayObject( $init );
- $gateway->setDummyGatewayResponseCode( '21000050' );
- $gateway->do_transaction( 'GET_ORDERSTATUS' );
- $loglines = $this->getLogMatches( LogLevel::ERROR,
'/Investigation required!/' );
- $this->assertNotEmpty( $loglines, 'GC Error 21000050 is not
generating the expected payments log error' );
-
- //Reset logs
- $this->testLogger->messages = array();
-
- //Most irritating version of 20001000 - They failed to enter an
expiration date on GC's form. This should log some specific info, but not an
error.
- $gateway = $this->getFreshGatewayObject( $init );
- $gateway->setDummyGatewayResponseCode( '20001000-expiry' );
- $gateway->do_transaction( 'GET_ORDERSTATUS' );
- $this->verifyNoLogErrors();
- $loglines = $this->getLogMatches( LogLevel::INFO,
'/processResponse:.*EXPIRYDATE/' );
- $this->assertNotEmpty( $loglines, 'GC Error 20001000-expiry is
not generating the expected payments log line' );
- }
-
- /**
- * Tests to make sure that certain error codes returned from GC will
- * trigger order cancellation, even if retryable errors also exist.
- * @dataProvider mcNoRetryCodeProvider
- */
- public function testNoMastercardFinesForRepeatOnBadCodes( $code ) {
- $init = $this->getDonorTestData( 'US' );
- unset( $init['order_id'] );
- $init['ffname'] = 'cc-vmad';
- //Make it not look like an orphan
- $this->setMwGlobals( 'wgRequest',
- new FauxRequest( array(
- 'CVVRESULT' => 'M',
- 'AVSRESULT' => '0'
- ), false ) );
-
- //Toxic card should not retry, even if there's an order id
collision
- $gateway = $this->getFreshGatewayObject( $init );
- $gateway->setDummyGatewayResponseCode( $code );
- $gateway->do_transaction( 'Confirm_CreditCard' );
- $this->assertEquals( 1, count( $gateway->curled ), "Gateway
kept trying even with response code $code! MasterCard could fine us a thousand
bucks for that!" );
-
- // Test limbo queue contents.
- $this->assertEquals( array( true ), $gateway->limbo_messages,
- "Gateway did not delete limbo message for code $code!"
);
- }
-
- /**
- * Tests that two API requests don't send the same order ID and merchant
- * reference. This was the case when users doubleclicked and we were
- * using the last 5 digits of time in seconds as a suffix. We want to
see
- * what happens when a 2nd request comes in while the 1st is still
waiting
- * for a CURL response, so here we fake that situation by having CURL
throw
- * an exception during the 1st response.
- */
- public function testNoDupeOrderId( ) {
- $this->setMwGlobals( 'wgRequest',
- new FauxRequest( array(
- 'action'=>'donate',
- 'amount'=>'3.00',
- 'card_type'=>'amex',
- 'city'=>'Hollywood',
- 'contribution_tracking_id'=>'22901382',
- 'country'=>'US',
- 'currency_code'=>'USD',
- 'emailAdd'=>'[email protected]',
- 'fname'=>'Fakety',
- 'format'=>'json',
- 'gateway'=>'globalcollect',
- 'language'=>'en',
- 'lname'=>'Fake',
- 'payment_method'=>'cc',
-
'referrer'=>'http://en.wikipedia.org/wiki/Main_Page',
- 'state'=>'MA',
- 'street'=>'99 Fake St',
- 'utm_campaign'=>'C14_en5C_dec_dsk_FR',
- 'utm_medium'=>'sitenotice',
-
'utm_source'=>'B14_120921_5C_lg_fnt_sans.no-LP.cc',
- 'zip'=>'90210'
- ), false ) );
-
- $gateway = new TestingGlobalCollectAdapter( array(
'api_request' => 'true' ) );
- $gateway->setDummyGatewayResponseCode( 'Exception' );
- try {
- $gateway->do_transaction( 'INSERT_ORDERWITHPAYMENT' );
- }
- catch ( Exception $e ) {
- // totally expected this
- }
- $first = $gateway->curled[0];
- //simulate another request coming in before we get anything
back from GC
- $anotherGateway = new TestingGlobalCollectAdapter( array(
'api_request' => 'true' ) );
- $anotherGateway->do_transaction( 'INSERT_ORDERWITHPAYMENT' );
- $second = $anotherGateway->curled[0];
- $this->assertFalse( $first == $second, 'Two calls to the api
did the same thing');
- }
-
- /**
- * Tests to see that we don't claim we're going to retry when we aren't
- * going to. For GC, we really only want to retry on code 300620
- * @dataProvider benignNoRetryCodeProvider
- */
- public function testNoClaimRetryOnBoringCodes( $code ) {
- $init = $this->getDonorTestData( 'US' );
- unset( $init['order_id'] );
- $init['ffname'] = 'cc-vmad';
- //Make it not look like an orphan
- $this->setMwGlobals( 'wgRequest',
- new FauxRequest( array(
- 'CVVRESULT' => 'M',
- 'AVSRESULT' => '0'
- ), false ) );
-
- $gateway = $this->getFreshGatewayObject( $init );
- $gateway->setDummyGatewayResponseCode( $code );
- $exposed = TestingAccessWrapper::newFromObject( $gateway );
- $start_id = $exposed->getData_Staged( 'order_id' );
- $gateway->do_transaction( 'Confirm_CreditCard' );
- $finish_id = $exposed->getData_Staged( 'order_id' );
- $loglines = $this->getLogMatches( LogLevel::INFO, '/Repeating
transaction on request for vars:/' );
- $this->assertEmpty( $loglines, "Log says we are going to repeat
the transaction for code $code, but that is not true" );
- $this->assertEquals( $start_id, $finish_id, "Needlessly
regenerated order id for code $code ");
- }
-
- /**
- * doPayment should return an iframe result with normal data
- */
- function testDoPaymentSuccess() {
- $init = $this->getDonorTestData();
- $init['payment_method'] = 'cc';
- $init['payment_submethod'] = 'visa';
- $init['email'] = '[email protected]';
- $init['ffname'] = 'cc-vmad';
- unset( $init['order_id'] );
-
- $gateway = $this->getFreshGatewayObject( $init );
- $result = $gateway->doPayment();
- $this->assertEmpty( $result->isFailed(), 'PaymentResult should
not be failed' );
- $this->assertEmpty( $result->getErrors(), 'PaymentResult should
have no errors' );
- $this->assertEquals( 'url_placeholder', $result->getIframe(),
'PaymentResult should have iframe set' );
- }
-}
->>>>>>> BRANCH (f56ac7 Add id attribute to amount and currency)
diff --git a/tests/includes/test_gateway/TestingGlobalCollectAdapter.php
b/tests/includes/test_gateway/TestingGlobalCollectAdapter.php
deleted file mode 100644
index f489805..0000000
--- a/tests/includes/test_gateway/TestingGlobalCollectAdapter.php
+++ /dev/null
@@ -1,144 +0,0 @@
-<<<<<<< HEAD (1b2a97 update vendor submodule)
-=======
-<?php
-
-/**
- * TestingGlobalCollectAdapter
- *
- * TODO: Add dependency injection to the base class so we don't have to repeat
code here.
- */
-class TestingGlobalCollectAdapter extends GlobalCollectAdapter {
-
- public $curled = array ( );
-
- public $limbo_messages = array();
-
- /**
- * Also set a useful MerchantID.
- */
- public function __construct( $options = array ( ) ) {
- if ( is_null( $options ) ) {
- $options = array ( );
- }
-
- //I hate myself for this part, and so do you.
- //Deliberately not fixing the actual problem for this patchset.
- //@TODO: Change the way the constructor works in all adapter
- //objects, such that the mess I am about to make is no longer
- //necessary. A patchset may already be near-ready for this...
- if ( array_key_exists( 'order_id_meta', $options ) ) {
- $this->order_id_meta = $options['order_id_meta'];
- unset( $options['order_id_meta'] );
- }
-
- $this->options = $options;
-
- parent::__construct( $this->options );
- }
-
- /**
- * Clear the static globals cache.
- */
- public static function clearGlobalsCache() {
- self::$globalsCache = array ( );
- }
-
- /**
- * @TODO: Get rid of this and the override mechanism as soon as you
- * refactor the constructor into something reasonable.
- * @return type
- */
- public function defineOrderIDMeta() {
- if ( isset( $this->order_id_meta ) ) {
- return;
- }
- parent::defineOrderIDMeta();
- }
-
- // TODO: Store and test the actual messages.
- public function setLimboMessage( $queue = 'limbo' ) {
- $this->limbo_messages[] = false;
- }
-
- /**
- * Stub out the limboStomp fn and record the calls
- */
- public function deleteLimboMessage( $queue = 'limbo' ) {
- $this->limbo_messages[] = true;
- }
-
- //@TODO: That minfraud jerk needs its own isolated tests.
- function runAntifraudHooks() {
- //now screw around with the batch settings to trick the fraud
filters into triggering
- $is_batch = $this->isBatchProcessor();
- $this->batch = true;
-
- parent::runAntifraudHooks();
-
- $this->batch = $is_batch;
- }
-
- /**
- * Set the error code you want the dummy response to return
- */
- public function setDummyGatewayResponseCode( $code ) {
- $this->dummyGatewayResponseCode = $code;
- }
-
- /**
- * Set the error code you want the dummy response to return
- */
- public function setDummyCurlResponseCode( $code ) {
- $this->dummyCurlResponseCode = $code;
- }
-
- protected function curl_transaction( $data ) {
- $this->curled[] = $data;
- return parent::curl_transaction( $data );
- }
-
- /**
- * Load in some dummy response XML so we can test proper response
processing
- * @throws RuntimeException
- */
- protected function curl_exec( $ch ) {
- $code = '';
- if ( property_exists( $this, 'dummyGatewayResponseCode' ) ) {
- $code = '_' . $this->dummyGatewayResponseCode;
- if ( $this->dummyGatewayResponseCode == 'Exception' ) {
- throw new RuntimeException('blah!');
- }
- }
-
- //could start stashing these in a further-down subdir if
payment type starts getting in the way,
- //but frankly I don't want to write tests that test our dummy
responses.
- $file_path = __DIR__ . '/../';
- $file_path .= 'Responses' . '/' . self::getIdentifier() . '/';
- $file_path .= $this->getCurrentTransaction() . $code .
'.testresponse';
-
- //these are all going to be short, so...
- if ( file_exists( $file_path ) ) {
- return file_get_contents( $file_path );
- } else {
- echo "File $file_path does not exist.\n"; //<-That will
deliberately break the test.
- return false;
- }
- }
-
- /**
- * Load in some dummy curl response info so we can test proper response
processing
- */
- protected function curl_getinfo( $ch, $opt = null ) {
- $code = 200; //response OK
- if ( property_exists( $this, 'dummyCurlResponseCode' ) ) {
- $code = ( int ) $this->dummyCurlResponseCode;
- }
-
- //put more here if it ever turns out that we care about it.
- return array (
- 'http_code' => $code,
- );
- }
-
-}
->>>>>>> BRANCH (f56ac7 Add id attribute to amount and currency)
--
To view, visit https://gerrit.wikimedia.org/r/231435
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Idab2779840fa9769f4daa147161e1d7ebd34f453
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/DonationInterface
Gerrit-Branch: deployment
Gerrit-Owner: Awight <[email protected]>
Gerrit-Reviewer: Awight <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits