public function testGetShippingContactDifferences()
 {
     $card = new CreditCard();
     $card->setName('John Tester');
     $card->setShippingName(null);
     $card->setMobile('+44 7700 900 222');
     $card->setShippingMobile(0);
     $card->setBillingCity('Wien');
     $card->setShippingCity('Berlin');
     $card->setShippingCountry('de');
     $card->setBillingCountry('at');
     $card->setBillingAddress1('Main street');
     $card->setShippingAddress2('Main street');
     $expectedDifferenceWithoutEmptyAsString = ['address2' => 'Main street', 'city' => 'Berlin', 'country' => 'de', 'mobile' => 0];
     $this->assertSame($expectedDifferenceWithoutEmptyAsString, $card->getShippingContactDifferences());
     $expectedDifferenceWithEmpty = ['firstName' => '', 'lastName' => null, 'address1' => null, 'address2' => 'Main street', 'city' => 'Berlin', 'country' => 'de', 'mobile' => 0];
     $this->assertSame($expectedDifferenceWithEmpty, $card->getShippingContactDifferences(false));
     $expectedDifferenceWithoutEmpty = ['address2' => 'Main street', 'city' => 'Berlin', 'country' => 'de'];
     $this->assertSame($expectedDifferenceWithoutEmpty, $card->getShippingContactDifferences($card::MODE_FILTER_EMPTY_VALUES));
     $card2 = new CreditCard();
     $card2->setBillingName('Peter Tester')->setBillingTitle('Dr')->setBillingSalutation('Mr.')->setBillingMobile('+44 7700 900 222')->setBillingPhone('+44 1632 960 111')->setBillingFax('+44 1632 960 110')->setBillingAddress1('Other Street 1/1')->setBillingAddress2('Close to park')->setBillingCity('Wien')->setBillingPostCode('1000')->setBillingState('Wien')->setBillingCountry('AT')->setBillingCompany('Very Limited Ltd.');
     $this->assertSame([], $card2->getShippingContactDifferences($card2::MODE_FILTER_EMPTY_WHEN_STRING_VALUES));
     $this->assertSame([], $card2->getShippingContactDifferences($card2::MODE_FILTER_EMPTY_VALUES));
     $expected2 = ['title' => null, 'firstName' => null, 'lastName' => null, 'company' => null, 'address1' => null, 'address2' => null, 'city' => null, 'postcode' => null, 'state' => null, 'country' => null, 'phone' => null, 'fax' => null, 'mobile' => null, 'salutation' => null];
     $this->assertSame($expected2, $card2->getShippingContactDifferences(''));
 }
 /**
  * @param CreditCard $card
  * @param array $data
  * @return array
  */
 protected function addDataFromCard(CreditCard $card, array $data)
 {
     if ($card->getFirstName()) {
         $data['NAME.GIVEN'] = $card->getFirstName();
     }
     if ($card->getLastName()) {
         $data['NAME.FAMILY'] = $card->getLastName();
     }
     if ($card->getSalutation()) {
         $data['NAME.SALUTATION'] = $card->getSalutation();
     }
     if ($card->getTitle()) {
         $data['NAME.TITLE'] = $card->getTitle();
     }
     if ($card->getGender()) {
         $gender = $card->getGender();
         if (CreditCard::GENDER_MALE === $gender) {
             $data['NAME.SEX'] = 'M';
         } elseif (CreditCard::GENDER_FEMALE === $gender) {
             $data['NAME.SEX'] = 'F';
         } else {
             $data['NAME.SEX'] = strtoupper(substr($gender, 0, 1));
         }
     }
     if ($card->getBirthday()) {
         $data['NAME.BIRTHDATE'] = $card->getBirthday();
     }
     if ($card->getCompany()) {
         $data['NAME.COMPANY'] = $card->getCompany();
     }
     if ($card->getCountry()) {
         $data['ADDRESS.COUNTRY'] = $card->getCountry();
     }
     if ($card->getState()) {
         $data['ADDRESS.STATE'] = $card->getState();
     }
     if ($card->getCity()) {
         $data['ADDRESS.CITY'] = $card->getCity();
     }
     if ($card->getPostcode()) {
         $data['ADDRESS.ZIP'] = $card->getPostcode();
     }
     $street = '';
     if ($card->getAddress1()) {
         $street = $card->getAddress1();
     }
     if ($card->getAddress2()) {
         $street .= "\n" . $card->getAddress2();
     }
     $street = trim($street);
     if ($street) {
         $data['ADDRESS.STREET'] = $street;
     }
     if ($card->getEmail()) {
         $data['CONTACT.EMAIL'] = $card->getEmail();
     }
     if ($card->getPhone()) {
         $data['CONTACT.PHONE'] = $card->getPhone();
     }
     if ($card->getMobile()) {
         $data['CONTACT.MOBILE'] = $card->getMobile();
     }
     if ($card->getIdentificationDocumentType() and $card->getIdentificationDocumentNumber()) {
         $data['CUSTOMER.IDENTIFICATION.PAPER'] = $card->getIdentificationDocumentType();
         $data['CUSTOMER.IDENTIFICATION.VALUE'] = $card->getIdentificationDocumentNumber();
     }
     if ($card->getShippingContactDifferences()) {
         $data = $this->addShippingDataFromCard($card, $data);
     }
     return $data;
 }