Skip to content

Commit 1ca64fd

Browse files
authored
Merge pull request #38
Support for Customer Reference and Unit Tests
2 parents 9f5e7b1 + 1e4db57 commit 1ca64fd

File tree

5 files changed

+124
-26
lines changed

5 files changed

+124
-26
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace FedexRest\Entity;
4+
5+
class CustomerReference
6+
{
7+
public string $type;
8+
public string $value;
9+
10+
public function setType(string $type): CustomerReference
11+
{
12+
$this->type = $type;
13+
return $this;
14+
}
15+
16+
public function setValue(string $value): CustomerReference
17+
{
18+
$this->value = $value;
19+
return $this;
20+
}
21+
22+
public function prepare(): array {
23+
$data = [];
24+
if (!empty($this->type)) {
25+
$data['customerReferenceType'] = $this->type;
26+
$data['value'] = $this->value;
27+
}
28+
return $data;
29+
}
30+
31+
32+
}

src/FedexRest/Entity/Item.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace FedexRest\Entity;
44

5+
use FedexRest\Entity\CustomerReference;
56
use FedexRest\Services\Ship\Entity\Value;
67

78
class Item
@@ -14,6 +15,7 @@ class Item
1415
public ?string $subPackagingType;
1516
public ?Value $declaredValue;
1617
public ?PackageSpecialServicesRequested $packageSpecialServices;
18+
public array $customerReferences = [];
1719

1820
/**
1921
* @param string $itemDescription
@@ -95,6 +97,26 @@ public function setPackageSpecialServices(?PackageSpecialServicesRequested $pack
9597
return $this;
9698
}
9799

100+
/**
101+
* @param CustomerReference[] $customerReferences
102+
* @return Item
103+
*/
104+
public function setCustomerReferences(array $customerReferences): Item
105+
{
106+
$this->customerReferences = $customerReferences;
107+
return $this;
108+
}
109+
110+
/**
111+
* @param CustomerReference $customerReference
112+
* @return Item
113+
*/
114+
public function addCustomerReference(CustomerReference $customerReference): Item
115+
{
116+
$this->customerReferences[] = $customerReference;
117+
return $this;
118+
}
119+
98120
public function prepare(): array
99121
{
100122
$data = [];
@@ -131,6 +153,14 @@ public function prepare(): array
131153
$data['packageSpecialServices'] = $this->packageSpecialServices->prepare();
132154
}
133155

156+
if (!empty($this->customerReferences)) {
157+
$customerReferences = [];
158+
foreach ($this->customerReferences as $customerReference) {
159+
$customerReferences[] = $customerReference->prepare();
160+
}
161+
$data['customerReferences'] = $customerReferences;
162+
}
163+
134164
return $data;
135165
}
136166

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace FedexRest\Services\Ship\Type;
4+
5+
class CustomerReferenceType
6+
{
7+
8+
const _CUSTOMER_REFERENCE = 'CUSTOMER_REFERENCE';
9+
const _DEPARTMENT_NUMBER = 'DEPARTMENT_NUMBER';
10+
const _INVOICE_NUMBER = 'INVOICE_NUMBER';
11+
const _P_O_NUMBER = 'P_O_NUMBER';
12+
const _INTRACOUNTRY_REGULATORY_REFERENCE = 'INTRACOUNTRY_REGULATORY_REFERENCE';
13+
const _RMA_ASSOCIATION = 'RMA_ASSOCIATION';
14+
15+
}

tests/FedexRest/Tests/Entity/ItemEntityTest.php

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@
22

33
namespace FedexRest\Tests\Entity;
44

5-
use FedexRest\Entity\DangerousGoodsDetail;
6-
use FedexRest\Entity\Dimensions;
75
use FedexRest\Entity\Item;
8-
use FedexRest\Entity\PackageSpecialServicesRequested;
96
use FedexRest\Entity\Weight;
7+
use PHPUnit\Framework\TestCase;
8+
use FedexRest\Entity\Dimensions;
9+
use FedexRest\Entity\CustomerReference;
1010
use FedexRest\Services\Ship\Entity\Value;
11-
use FedexRest\Services\Ship\Type\DangerousGoodsAccessibilityType;
11+
use FedexRest\Entity\DangerousGoodsDetail;
1212
use FedexRest\Services\Ship\Type\LinearUnits;
13-
use FedexRest\Services\Ship\Type\SubPackagingType;
1413
use FedexRest\Services\Ship\Type\WeightUnits;
15-
use PHPUnit\Framework\TestCase;
14+
use FedexRest\Services\Ship\Type\SubPackagingType;
15+
use FedexRest\Entity\PackageSpecialServicesRequested;
16+
use FedexRest\Services\Ship\Type\CustomerReferenceType;
17+
use FedexRest\Services\Ship\Type\DangerousGoodsAccessibilityType;
1618

1719
class ItemEntityTest extends TestCase
1820
{
@@ -42,6 +44,10 @@ public function testItemHasAttributes()
4244
(new DangerousGoodsDetail())
4345
->setAccessibility(DangerousGoodsAccessibilityType::_ACCESSIBLE)
4446
)
47+
)->addCustomerReference(
48+
(new CustomerReference())
49+
->setType(CustomerReferenceType::_CUSTOMER_REFERENCE)
50+
->setValue('123456')
4551
);
4652
$this->assertObjectHasProperty('itemDescription', $item);
4753
$this->assertObjectHasProperty('dimensions', $item);
@@ -51,6 +57,7 @@ public function testItemHasAttributes()
5157
$this->assertObjectHasProperty('subPackagingType', $item);
5258
$this->assertObjectHasProperty('declaredValue', $item);
5359
$this->assertObjectHasProperty('packageSpecialServices', $item);
60+
$this->assertObjectHasProperty('customerReferences', $item);
5461
$test_item = $item->prepare();
5562
$this->assertEquals(1, $test_item['weight']['value']);
5663
$this->assertEquals(WeightUnits::_POUND, $test_item['weight']['units']);
@@ -64,5 +71,7 @@ public function testItemHasAttributes()
6471
$this->assertEquals(100, $test_item['declaredValue']['amount']);
6572
$this->assertEquals('USD', $test_item['declaredValue']['currency']);
6673
$this->assertEquals(DangerousGoodsAccessibilityType::_ACCESSIBLE, $test_item['packageSpecialServices']['dangerousGoodsDetail']['accessibility']);
74+
$this->assertEquals(CustomerReferenceType::_CUSTOMER_REFERENCE, $test_item['customerReferences'][0]['customerReferenceType']);
75+
$this->assertEquals('123456', $test_item['customerReferences'][0]['value']);
6776
}
6877
}

tests/FedexRest/Tests/Ship/CreateShipmentTest.php

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,37 @@
22

33
namespace FedexRest\Tests\Ship;
44

5-
use FedexRest\Authorization\Authorize;
5+
use FedexRest\Entity\Item;
6+
use FedexRest\Entity\Person;
7+
use FedexRest\Entity\Weight;
68
use FedexRest\Entity\Address;
9+
use PHPUnit\Framework\TestCase;
710
use FedexRest\Entity\Dimensions;
11+
use FedexRest\Authorization\Authorize;
12+
use FedexRest\Entity\CustomerReference;
13+
use FedexRest\Services\Ship\Entity\Label;
14+
use GuzzleHttp\Exception\GuzzleException;
15+
use FedexRest\Services\Ship\CreateShipment;
16+
use FedexRest\Services\Ship\Type\ImageType;
17+
use FedexRest\Services\Ship\Type\PickupType;
18+
use FedexRest\Services\Ship\Type\LinearUnits;
19+
use FedexRest\Services\Ship\Type\ServiceType;
20+
use FedexRest\Services\Ship\Type\WeightUnits;
21+
use FedexRest\Services\Ship\Type\PackagingType;
822
use FedexRest\Entity\EmailNotificationRecipient;
9-
use FedexRest\Entity\Item;
23+
use FedexRest\Services\Ship\Type\LabelStockType;
24+
use FedexRest\Exceptions\MissingLineItemException;
25+
use FedexRest\Services\Ship\Type\LabelDocOptionType;
1026
use FedexRest\Exceptions\MissingAccessTokenException;
27+
use FedexRest\Exceptions\MissingAccountNumberException;
1128
use FedexRest\Exceptions\MissingAuthCredentialsException;
12-
use FedexRest\Exceptions\MissingLineItemException;
13-
use FedexRest\Services\Ship\Entity\EmailNotificationDetail;
14-
use FedexRest\Services\Ship\Entity\Label;
15-
use FedexRest\Entity\Person;
1629
use FedexRest\Services\Ship\Entity\ShippingChargesPayment;
17-
use FedexRest\Entity\Weight;
18-
use FedexRest\Exceptions\MissingAccountNumberException;
30+
use FedexRest\Services\Ship\Type\LabelResponseOptionsType;
31+
use FedexRest\Services\Ship\Entity\EmailNotificationDetail;
1932
use FedexRest\Services\Ship\Exceptions\MissingLabelException;
2033
use FedexRest\Services\Ship\Exceptions\MissingLabelResponseOptionsException;
2134
use FedexRest\Services\Ship\Exceptions\MissingShippingChargesPaymentException;
22-
use FedexRest\Services\Ship\CreateShipment;
23-
use FedexRest\Services\Ship\Type\ImageType;
24-
use FedexRest\Services\Ship\Type\LabelDocOptionType;
25-
use FedexRest\Services\Ship\Type\LabelResponseOptionsType;
26-
use FedexRest\Services\Ship\Type\LabelStockType;
27-
use FedexRest\Services\Ship\Type\LinearUnits;
28-
use FedexRest\Services\Ship\Type\PackagingType;
29-
use FedexRest\Services\Ship\Type\PickupType;
30-
use FedexRest\Services\Ship\Type\ServiceType;
31-
use FedexRest\Services\Ship\Type\WeightUnits;
32-
use GuzzleHttp\Exception\GuzzleException;
33-
use PHPUnit\Framework\TestCase;
35+
use FedexRest\Services\Ship\Type\CustomerReferenceType;
3436

3537
class CreateShipmentTest extends TestCase
3638
{
@@ -413,6 +415,14 @@ public function testRequest()
413415
->setLength(12)
414416
->setHeight(12)
415417
->setUnits(LinearUnits::_INCH)
418+
)->addCustomerReference(
419+
(new CustomerReference())
420+
->setType(CustomerReferenceType::_CUSTOMER_REFERENCE)
421+
->setValue('123456')
422+
)->addCustomerReference(
423+
(new CustomerReference())
424+
->setType(CustomerReferenceType::_INVOICE_NUMBER)
425+
->setValue('INVOICE')
416426
)
417427
)
418428
->setEmailNotificationDetail((new EmailNotificationDetail)
@@ -441,6 +451,8 @@ public function testRequest()
441451
$this->assertNotEmpty($new_shipment->pieceResponses);
442452
$this->assertNotEmpty($new_shipment->completedShipmentDetail);
443453
$this->assertEquals('GROUND', $new_shipment->serviceCategory);
454+
$this->assertNotEmpty($new_shipment->pieceResponses[0]->customerReferences);
455+
444456
}
445457

446458
}

0 commit comments

Comments
 (0)