/** * 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() { $request = $this->getDonorTestData(); $externalData = $this->getDonorTestData(); $session = array('Donor' => $this->getDonorTestData()); //no order_id from anywhere, explicit no generate $gateway = $this->getFreshGatewayObject($externalData, 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($externalData, 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'); // conflicting order_id in request and session, default GC generation $request['order_id'] = '55555'; $session['Donor']['order_id'] = '44444'; $this->setUpRequest($request, $session); $gateway = new TestingGlobalCollectAdapter(); $this->assertEquals('55555', $gateway->getData_Unstaged_Escaped('order_id'), 'GlobalCollect gateway is preferring session data over the request. Session should be secondary.'); // conflicting order_id in request and session, garbage data in request, default GC generation $request['order_id'] = 'nonsense!'; $this->setUpRequest($request, $session); $gateway = new TestingGlobalCollectAdapter(); $this->assertEquals('44444', $gateway->getData_Unstaged_Escaped('order_id'), 'GlobalCollect gateway is not ignoring nonsensical order_id candidates'); // order_id in session, default GC generation unset($request['order_id']); $this->setUpRequest($request, $session); $gateway = new TestingGlobalCollectAdapter(); $this->assertEquals('44444', $gateway->getData_Unstaged_Escaped('order_id'), 'GlobalCollect gateway is not recognizing the session order_id'); // conflicting order_id in external data, request and session, explicit GC generation, batch mode $request['order_id'] = '33333'; $externalData['order_id'] = '22222'; $this->setUpRequest($request, $session); $gateway = $this->getFreshGatewayObject($externalData, array('order_id_meta' => array('generate' => true), 'batch_mode' => true)); $this->assertEquals($externalData['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 $externalData['order_id'] = '2143.0'; unset($request['order_id']); unset($session['Donor']['order_id']); $this->setUpRequest($request, $session); //conflicting order_id in external data, request and session, explicit GC generation, batch mode $gateway = $this->getFreshGatewayObject($externalData, array('order_id_meta' => array('generate' => true, 'disallow_decimals' => true), 'batch_mode' => true)); $this->assertNotEquals($externalData['order_id'], $gateway->getData_Unstaged_Escaped('order_id'), 'Failed assering that a decimal order_id was regenerated, when disallow_decimals is true'); }
public function testResetOnRecurringSwitch() { // Donor initiates a non-recurring donation $init = $this->getDonorTestData(); $init['payment_method'] = 'cc'; $firstRequest = $this->setUpRequest($init); $gateway = new TestingGlobalCollectAdapter(); $gateway->do_transaction('Donate'); $donorData = $firstRequest->getSessionData('Donor'); $this->assertEquals('', $donorData['recurring'], 'Test setup failed.'); $oneTimeOrderId = $gateway->getData_Unstaged_Escaped('order_id'); // Then they go back and decide they want to make a recurring donation $init['recurring'] = '1'; $secondRequest = $this->setUpRequest($init, $firstRequest->getSessionArray()); $gateway = new TestingGlobalCollectAdapter(); $gateway->do_transaction('Donate'); $donorData = $secondRequest->getSessionData('Donor'); $this->assertEquals('1', $donorData['recurring'], 'Test setup failed.'); $recurOrderId = $gateway->getData_Unstaged_Escaped('order_id'); $this->assertNotEquals($oneTimeOrderId, $recurOrderId, 'Order ID was not regenerated on recurring switch!'); }