/**
  * @large
  */
 public function testEnrollmentRequest()
 {
     $creditCard = new CreditCardData();
     $creditCard->creditCardNumber = 4012000300002001;
     $creditCard->setExpirationDate('2019-01');
     $creditCard->cardHolderName = 'John Doe';
     $address = new BillingAddress('John', 'Doe', '550 South Winchester blvd.', 'P.O. Box 850', 'San Jose', '95128', 'CA', 'US', '+1(202)555-1234', '*****@*****.**');
     $trustCenter = new TrustCenterData($address);
     $transaction = new Transaction();
     $transaction->mode = Transaction::MODE_LIVE;
     $transaction->id = '9457892347623478';
     $transaction->amount = new Amount(500);
     $transaction->currency = 'USD';
     $transaction->countryCode = 'US';
     $transaction->creditCardData = $creditCard;
     $transaction->trustCenterData = $trustCenter;
     $check = new EnrollmentCheck($transaction);
     $job = Job::createEnrollmentJob(self::SIGNATURE, $check);
     $request = new Request($job);
     /** @var WireCard $wireCard */
     $wireCard = WireCard::createWithRequest($request);
     $body = $this->serializer->serialize($wireCard, 'xml');
     $response = $this->client->send($this->createRequest($body));
     $wireCard = $this->serializer->deserialize($response->getBody(true), 'Wirecard\\Element\\WireCard', 'xml');
     $response = $wireCard->response;
     $this->assertTrue($response->isSuccessful());
     $this->assertTrue($response->isRedirect());
     $this->assertNotNull($response->getUrl());
     $this->assertNotNull($response->getToken());
     $this->assertNull($response->getMessage());
     return $response;
 }
 /**
  * @return Transaction
  */
 public function build()
 {
     /** @var CreditCard $creditCard */
     $creditCard = $this->request->getCard();
     $creditCardData = new CreditCardData();
     $creditCardData->creditCardNumber = $creditCard->getNumber();
     $creditCardData->setExpirationDate($creditCard->getExpiryDate('Y-m'));
     $creditCardData->cardHolderName = $creditCard->getName();
     $address = new BillingAddress($creditCard->getFirstName(), $creditCard->getLastName(), $creditCard->getAddress1(), $creditCard->getAddress2(), $creditCard->getCity(), $creditCard->getPostcode(), $creditCard->getState(), $creditCard->getCountry(), $creditCard->getPhone(), $creditCard->getEmail());
     $trustCenter = new TrustCenterData($address);
     $transaction = new Transaction();
     $transaction->id = $this->request->getTransactionId();
     $transaction->amount = new Amount($this->request->getAmount());
     $transaction->currency = $this->request->getCurrency();
     $transaction->countryCode = $this->request->getCountryCode();
     $transaction->creditCardData = $creditCardData;
     $transaction->trustCenterData = $trustCenter;
     return $transaction;
 }
 /**
  * @dataProvider actionProvider
  */
 public function testSerializeRequest($class, $method, $func)
 {
     $address = new BillingAddress('John', 'Doe', '550 South Winchester blvd.', 'P.O. Box 850', 'San Jose', '95128', 'CA', 'US', '+1(202)555-1234', '*****@*****.**');
     $trust = new TrustCenterData($address);
     $card = new CreditCardData();
     $card->creditCardNumber = '4200000000000000';
     $card->setExpirationDate('2005-01-01');
     $card->cardHolderName = 'John Doe';
     $card->secureCode = '123';
     $contactData = new ContactData('192.168.1.1', 'f-q04u9f');
     $recurringTransaction = new RecurringTransaction(RecurringTransaction::TYPE_INITIAL);
     $transaction = new Transaction();
     $transaction->mode = Transaction::MODE_DEMO;
     $transaction->id = '9457892347623478';
     $transaction->guWid = 'C328668112556109425394';
     $transaction->commerceType = 'MOTO';
     $transaction->referenceId = 'FJQ845GFW4I7FGQ348FQ349Q34';
     $transaction->startTime = new \DateTime('2005-12-12');
     $transaction->endTime = new \DateTime('2005-12-13');
     $transaction->paymentGroupId = '5FW9ERYG';
     $transaction->salesDate = new \DateTime('2005-12-11');
     $transaction->authorizationCode = 92381;
     $transaction->amount = new Amount(5);
     $transaction->currency = 'EUR';
     $transaction->countryCode = 'DE';
     $transaction->usage = 'OrderNo-FT345S71 Thank you';
     $transaction->creditCardData = $card;
     $transaction->trustCenterData = $trust;
     $transaction->contactData = $contactData;
     $transaction->recurringTransaction = $recurringTransaction;
     $action = new $class($transaction);
     $action->id = 'authentication 1';
     $job = call_user_func_array(['\\Wirecard\\Element\\Job', $method], ['0123456789ABCDEF', $action]);
     $job->id = 'job 1';
     $request = new Request($job);
     $request = WireCard::createWithRequest($request);
     $xml = $this->serializer->serialize($request, 'xml');
     $xmlString = file_get_contents(__DIR__ . "/data/Request.xml");
     $xmlString = str_replace('FNC_CC_', 'FNC_CC_' . $func, $xmlString);
     $this->assertXmlStringEqualsXmlString($xmlString, $xml);
 }