Skip to content

Commit

Permalink
Fixed Address generation bugs, extra coverage, confirm air offer example
Browse files Browse the repository at this point in the history
  • Loading branch information
DerMika committed Feb 27, 2016
1 parent e14d5bb commit ca13b78
Show file tree
Hide file tree
Showing 10 changed files with 283 additions and 9 deletions.
12 changes: 11 additions & 1 deletion docs/samples.rst
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,17 @@ Verify if an offer is still valid:
---------------------
Offer_ConfirmAirOffer
---------------------
Confirm a given AIR offer:
Confirm a given AIR offer by providing office reference / tatoo:

.. code-block:: php
use Amadeus\Client\RequestOptions\OfferConfirmAirOptions;
$response = $client->offerConfirmAir(
new OfferConfirmAirOptions([
'tatooNumber' => 1
])
);
-----------------------
Offer_ConfirmHotelOffer
Expand Down
2 changes: 0 additions & 2 deletions src/Amadeus/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,7 @@
*
*
* - implement more PNR_AddMultiElements:
* ABU segment
* OSI segment
* SSR segment
*
* @package Amadeus
* @author Dieter Devlieghere <dieter.devlieghere@benelux.amadeus.com>
Expand Down
4 changes: 3 additions & 1 deletion src/Amadeus/Client/RequestOptions/Pnr/Element/Address.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,16 @@

namespace Amadeus\Client\RequestOptions\Pnr\Element;

use Amadeus\Client\RequestOptions\Pnr\Element;

/**
* Address
*
* Billing address, Mailing address, structured or unstructured
*
* @package Amadeus\Client\RequestOptions\Pnr\Element
*/
class Address
class Address extends Element
{
const TYPE_BILLING_UNSTRUCTURED = "ABU";

Expand Down
34 changes: 34 additions & 0 deletions src/Amadeus/Client/RequestOptions/Pnr/Element/OtherServiceInfo.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php
/**
* amadeus-ws-client
*
* Copyright 2015 Amadeus Benelux NV
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @package Amadeus
* @license https://opensource.org/licenses/Apache-2.0 Apache 2.0
*/

namespace Amadeus\Client\RequestOptions\Pnr\Element;

/**
* OtherServiceInfo
*
* @package Amadeus\Client\RequestOptions\Pnr\Element
* @author Dieter Devlieghere <dieter.devlieghere@benelux.amadeus.com>
*/
class OtherServiceInfo
{

}
2 changes: 1 addition & 1 deletion src/Amadeus/Client/Struct/Pnr/AddMultiElements.php
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ protected function createElement($element, &$tatooCounter)
case 'Address':
/** @var Element\Address $element */
$createdElement = new DataElementsIndiv($element->type, $tatooCounter);
if ($element->type === ElementManagementData::SEGNAME_ADDRESS_BILLING_UNSTRUCTURED || ElementManagementData::SEGNAME_ADDRESS_MAILING_UNSTRUCTURED) {
if ($element->type === ElementManagementData::SEGNAME_ADDRESS_BILLING_UNSTRUCTURED || $element->type === ElementManagementData::SEGNAME_ADDRESS_MAILING_UNSTRUCTURED) {
$createdElement->freetextData = new FreetextData($element->freeText, FreetextDetail::TYPE_MAILING_ADDRESS);
} else {
$createdElement->structuredAddress = new StructuredAddress($element);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class StructuredAddress
public $address;

/**
* @var OptionalData
* @var OptionalData[]
*/
public $optionalData = [];

Expand Down
64 changes: 64 additions & 0 deletions tests/Amadeus/Client/Struct/Offer/ConfirmAirOfferTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php
/**
* amadeus-ws-client
*
* Copyright 2015 Amadeus Benelux NV
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @package Amadeus
* @license https://opensource.org/licenses/Apache-2.0 Apache 2.0
*/

namespace Amadeus\Client\Struct\Offer;
use Amadeus\Client\RequestOptions\Offer\PassengerDef;
use Amadeus\Client\RequestOptions\Offer\PassengerReAssocOptions;
use Amadeus\Client\RequestOptions\OfferConfirmAirOptions;
use Test\Amadeus\BaseTestCase;

/**
* ConfirmAirOfferTest
*
* @package Amadeus\Client\Struct\Offer
* @author Dieter Devlieghere <dieter.devlieghere@benelux.amadeus.com>
*/
class ConfirmAirOfferTest extends BaseTestCase
{
public function testCanMakeMessageWithPassengerReassociation()
{
$opt = new OfferConfirmAirOptions([
'tatooNumber' => 2,
'passengerReassociation' => [
new PassengerReAssocOptions([
'pricingReference' => 5,
'paxReferences' => [
new PassengerDef([
'passengerType' => "PA", //ADULT
'passengerTatoo' => 1
])
]
])
]
]);

$message = new ConfirmAir($opt);

$this->assertEquals(2, $message->offerTatoo->reference->value);
$this->assertEquals(Reference::TYPE_OFFER_TATOO, $message->offerTatoo->reference->type);
$this->assertEquals(OfferTatoo::SEGMENT_AIR, $message->offerTatoo->segmentName);
$this->assertEquals('PA', $message->passengerReassociation[0]->paxReference->passengerReference[0]->type);
$this->assertEquals(1, $message->passengerReassociation[0]->paxReference->passengerReference[0]->value);
$this->assertEquals(PricingRecordId::REFTYPE_PRODQUOTREC, $message->passengerReassociation[0]->pricingRecordId->referenceType);
$this->assertEquals(5, $message->passengerReassociation[0]->pricingRecordId->uniqueReference);
}
}
145 changes: 145 additions & 0 deletions tests/Amadeus/Client/Struct/Pnr/AddMultiElementsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@

namespace Test\Amadeus\Client\Struct\Pnr;

use Amadeus\Client\RequestOptions\Pnr\Element\AccountingInfo;
use Amadeus\Client\RequestOptions\Pnr\Element\Address;
use Amadeus\Client\RequestOptions\Pnr\Element\Contact;
use Amadeus\Client\RequestOptions\Pnr\Element\FormOfPayment;
use Amadeus\Client\RequestOptions\Pnr\Element\MiscellaneousRemark;
use Amadeus\Client\RequestOptions\Pnr\Element\ReceivedFrom;
use Amadeus\Client\RequestOptions\Pnr\Element\ServiceRequest;
use Amadeus\Client\RequestOptions\Pnr\Element\Ticketing;
use Amadeus\Client\RequestOptions\Pnr\Reference;
Expand Down Expand Up @@ -345,11 +349,152 @@ public function testMakePnrWithPassengerDateOfBirth()
'company' => '1A'
]);


$requestStruct = new AddMultiElements($createPnrOptions);

$this->assertEquals(1, count($requestStruct->travellerInfo));
$this->assertEquals(1, count($requestStruct->travellerInfo[0]->passengerData));
$this->assertEquals(706, $requestStruct->travellerInfo[0]->passengerData[0]->dateOfBirth->dateAndTimeDetails->qualifier);
$this->assertEquals('08011947', $requestStruct->travellerInfo[0]->passengerData[0]->dateOfBirth->dateAndTimeDetails->date);
}

public function testMakePnrWithGenericRemarkAndExplicitReceivedFrom()
{
$createPnrOptions = new PnrCreatePnrOptions();
$createPnrOptions->receivedFrom = "unittest";
$createPnrOptions->travellers[] = new Traveller([
'number' => 1,
'lastName' => 'Bowie',
'firstName' => 'David'
]);
$createPnrOptions->actionCode = PnrActions::ACTIONOPTION_END_TRANSACT_W_RETRIEVE;
$createPnrOptions->tripSegments[] = new Miscellaneous([
'date' => \DateTime::createFromFormat('Y-m-d', "2016-10-02", new \DateTimeZone('UTC')),
'cityCode' => 'BRU',
'freeText' => 'GENERIC TRAVEL REQUEST',
'company' => '1A'
]);
$createPnrOptions->elements[] = new MiscellaneousRemark([
'text' => 'MARKUP: 20.00 EUR'
]);
$createPnrOptions->elements[] = new ReceivedFrom([
'receivedFrom' => 'my magical robot'
]);

$requestStruct = new AddMultiElements($createPnrOptions);

$this->assertEquals(2, count($requestStruct->dataElementsMaster->dataElementsIndiv));
$this->assertEquals(AddMultiElements\ElementManagementData::SEGNAME_GENERAL_REMARK, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->elementManagementData->segmentName);
$this->assertEquals('MARKUP: 20.00 EUR', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->miscellaneousRemark->remarks->freetext);
$this->assertEquals(MiscellaneousRemark::TYPE_MISCELLANEOUS, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->miscellaneousRemark->remarks->type);
$this->assertEquals(AddMultiElements\ElementManagementData::SEGNAME_RECEIVE_FROM, $requestStruct->dataElementsMaster->dataElementsIndiv[1]->elementManagementData->segmentName);
$this->assertEquals('my magical robot', $requestStruct->dataElementsMaster->dataElementsIndiv[1]->freetextData->longFreetext);
$this->assertEquals(AddMultiElements\FreetextDetail::TYPE_RECEIVE_FROM, $requestStruct->dataElementsMaster->dataElementsIndiv[1]->freetextData->freetextDetail->type);
}

public function testCanCreateAccountingInfoElement()
{
$createPnrOptions = new PnrCreatePnrOptions();
$createPnrOptions->receivedFrom = "unittest";
$createPnrOptions->travellers[] = new Traveller([
'number' => 1,
'lastName' => 'Bowie',
'firstName' => 'David'
]);
$createPnrOptions->actionCode = PnrActions::ACTIONOPTION_END_TRANSACT_W_RETRIEVE;
$createPnrOptions->tripSegments[] = new Miscellaneous([
'date' => \DateTime::createFromFormat('Y-m-d', "2016-10-02", new \DateTimeZone('UTC')),
'cityCode' => 'BRU',
'freeText' => 'GENERIC TRAVEL REQUEST',
'company' => '1A'
]);
$createPnrOptions->elements[] = new AccountingInfo([
'accountNumber' => 'BUZA'
]);

$requestStruct = new AddMultiElements($createPnrOptions);

$this->assertEquals(2, count($requestStruct->dataElementsMaster->dataElementsIndiv));
$this->assertEquals(AddMultiElements\ElementManagementData::SEGNAME_ACCOUNTING_INFORMATION, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->elementManagementData->segmentName);
$this->assertEquals('BUZA', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->accounting->account->number);
}

public function testCanCreateUnstructuredAddress()
{
$createPnrOptions = new PnrCreatePnrOptions();
$createPnrOptions->receivedFrom = "unittest";
$createPnrOptions->travellers[] = new Traveller([
'number' => 1,
'lastName' => 'Bowie',
'firstName' => 'David'
]);
$createPnrOptions->actionCode = PnrActions::ACTIONOPTION_END_TRANSACT_W_RETRIEVE;
$createPnrOptions->tripSegments[] = new Miscellaneous([
'date' => \DateTime::createFromFormat('Y-m-d', "2016-10-02", new \DateTimeZone('UTC')),
'cityCode' => 'BRU',
'freeText' => 'GENERIC TRAVEL REQUEST',
'company' => '1A'
]);
$createPnrOptions->elements[] = new Address([
'type' => Address::TYPE_BILLING_UNSTRUCTURED,
'freeText' => 'Amadeus Benelux NV,Medialaan 30,1800 Vilvoorde'
]);

$requestStruct = new AddMultiElements($createPnrOptions);

$this->assertEquals(2, count($requestStruct->dataElementsMaster->dataElementsIndiv));
$this->assertEquals(AddMultiElements\ElementManagementData::SEGNAME_ADDRESS_BILLING_UNSTRUCTURED, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->elementManagementData->segmentName);
$this->assertEquals('Amadeus Benelux NV,Medialaan 30,1800 Vilvoorde', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->freetextData->longFreetext);
$this->assertEquals(AddMultiElements\FreetextDetail::TYPE_MAILING_ADDRESS, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->freetextData->freetextDetail->type);
$this->assertEquals(AddMultiElements\FreetextDetail::QUALIFIER_LITERALTEXT, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->freetextData->freetextDetail->subjectQualifier);
}

public function testCanCreateStructuredAddress()
{
$createPnrOptions = new PnrCreatePnrOptions();
$createPnrOptions->receivedFrom = "unittest";
$createPnrOptions->travellers[] = new Traveller([
'number' => 1,
'lastName' => 'Bowie',
'firstName' => 'David'
]);
$createPnrOptions->actionCode = PnrActions::ACTIONOPTION_END_TRANSACT_W_RETRIEVE;
$createPnrOptions->tripSegments[] = new Miscellaneous([
'date' => \DateTime::createFromFormat('Y-m-d', "2016-10-02", new \DateTimeZone('UTC')),
'cityCode' => 'BRU',
'freeText' => 'GENERIC TRAVEL REQUEST',
'company' => '1A'
]);
$createPnrOptions->elements[] = new Address([
'type' => Address::TYPE_MAILING_STRUCTURED,
'name' => 'Mister Amadeus',
'addressLine1' => 'Amadeus Benelux NV',
'addressLine2' => 'Medialaan 30',
'city' => 'Vilvoorde',
'state' => 'Vlaams-Brabant',
'country' => 'Belgium',
'zipCode' => '1800',

]);

$requestStruct = new AddMultiElements($createPnrOptions);

$this->assertEquals(2, count($requestStruct->dataElementsMaster->dataElementsIndiv));
$this->assertEquals(AddMultiElements\ElementManagementData::SEGNAME_ADDRESS_MAILING_STRUCTURED, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->elementManagementData->segmentName);
$this->assertEquals(AddMultiElements\Address::OPT_ADDRESS_LINE_1, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->address->optionA1);
$this->assertEquals('Amadeus Benelux NV', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->address->optionTextA1);
$this->assertEquals(6, count($requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData));
$this->assertEquals(AddMultiElements\OptionalData::OPT_ADDRESS_LINE_2, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[0]->option);
$this->assertEquals('Medialaan 30', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[0]->optionText);
$this->assertEquals(AddMultiElements\OptionalData::OPT_CITY, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[1]->option);
$this->assertEquals('Vilvoorde', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[1]->optionText);
$this->assertEquals(AddMultiElements\OptionalData::OPT_COUNTRY, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[2]->option);
$this->assertEquals('Belgium', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[2]->optionText);
$this->assertEquals(AddMultiElements\OptionalData::OPT_NAME, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[3]->option);
$this->assertEquals('Mister Amadeus', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[3]->optionText);
$this->assertEquals(AddMultiElements\OptionalData::OPT_STATE, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[4]->option);
$this->assertEquals('Vlaams-Brabant', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[4]->optionText);
$this->assertEquals(AddMultiElements\OptionalData::OPT_ZIP_CODE, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[5]->option);
$this->assertEquals('1800', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[5]->optionText);
}
}
22 changes: 22 additions & 0 deletions tests/Amadeus/Client/Struct/Pnr/CancelTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,26 @@ public function testCanMakeCancelPassengerMessage()
$this->assertEquals(Cancel\Element::IDENT_PASSENGER_TATOO, $message->cancelElements[0]->element[0]->identifier);
$this->assertEquals(3, $message->cancelElements[0]->element[0]->number);
}

public function testCanMakeCancelGroupPassengerMessage()
{
$message = new Cancel(
new PnrCancelOptions([
'actionCode' => 0,
'groupPassengers' => [5,6]
])
);

$this->assertEquals(0, $message->pnrActions->optionCode);
$this->assertNull($message->reservationInfo);
$this->assertEquals(1, count($message->cancelElements));
$this->assertEquals(Cancel\Elements::ENTRY_NAME_INTEGRATION, $message->cancelElements[0]->entryType);
$this->assertEquals(2, count($message->cancelElements[0]->element));
$this->assertEquals(Cancel\Element::IDENT_PASSENGER_TATOO, $message->cancelElements[0]->element[0]->identifier);
$this->assertEquals(5, $message->cancelElements[0]->element[0]->number);
$this->assertEquals(Cancel\Element::IDENT_PASSENGER_TATOO, $message->cancelElements[0]->element[1]->identifier);
$this->assertEquals(6, $message->cancelElements[0]->element[1]->number);
}


}
5 changes: 2 additions & 3 deletions tests/Amadeus/ClientTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -214,12 +214,11 @@ public function testCanDoCreatePnrCall()

$expectedPnrResult = new Client\Struct\Pnr\AddMultiElements($options);

$receivedFromElement = new Client\Struct\Pnr\AddMultiElements\DataElementsIndiv(Client\Struct\Pnr\AddMultiElements\ElementManagementData::SEGNAME_RECEIVE_FROM);
$receivedFromElement = new Client\Struct\Pnr\AddMultiElements\DataElementsIndiv(Client\Struct\Pnr\AddMultiElements\ElementManagementData::SEGNAME_RECEIVE_FROM, 4);
$receivedFromElement->freetextData = new Client\Struct\Pnr\AddMultiElements\FreetextData(
'some RF string amabnl-amadeus-ws-client-0.0.1dev',
Client\Struct\Pnr\AddMultiElements\FreetextDetail::TYPE_RECEIVE_FROM
);

$expectedPnrResult->dataElementsMaster->dataElementsIndiv[] = $receivedFromElement;

$mockSessionHandler
Expand Down Expand Up @@ -297,7 +296,7 @@ public function testCanDoAddMultiElementsSavePNRWithRf()

$expectedPnrResult->dataElementsMaster = new Client\Struct\Pnr\AddMultiElements\DataElementsMaster();

$receivedFromElement = new Client\Struct\Pnr\AddMultiElements\DataElementsIndiv(Client\Struct\Pnr\AddMultiElements\ElementManagementData::SEGNAME_RECEIVE_FROM);
$receivedFromElement = new Client\Struct\Pnr\AddMultiElements\DataElementsIndiv(Client\Struct\Pnr\AddMultiElements\ElementManagementData::SEGNAME_RECEIVE_FROM, 2);
$receivedFromElement->freetextData = new Client\Struct\Pnr\AddMultiElements\FreetextData(
'a unit test machine thingie',
Client\Struct\Pnr\AddMultiElements\FreetextDetail::TYPE_RECEIVE_FROM
Expand Down

0 comments on commit ca13b78

Please sign in to comment.