/**
  * 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!');
 }