Skip to content

Commit 88ea57e

Browse files
committed
AC-9030::Fedex API Upgrade - Fix PHPUnit and State Error
1 parent 394d49d commit 88ea57e

File tree

3 files changed

+249
-195
lines changed

3 files changed

+249
-195
lines changed

app/code/Magento/Fedex/Model/Carrier.php

Lines changed: 34 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
6565
*/
6666
public const TRACK_REQUEST_END_POINT = 'track/v1/trackingnumbers';
6767

68+
/**
69+
* REST end point of Tracking API
70+
*
71+
* @var string
72+
*/
73+
public const AUTHENTICATION_GRANT_TYPE = 'client_credentials';
74+
6875
/**
6976
* Code of the carrier
7077
*
@@ -153,12 +160,6 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
153160
*/
154161
private static $trackServiceVersion = 10;
155162

156-
/**
157-
* List of TrackReply errors
158-
* @var array
159-
*/
160-
private static $trackingErrors = ['FAILURE', 'ERROR'];
161-
162163
/**
163164
* @var Json
164165
*/
@@ -174,11 +175,6 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
174175
*/
175176
private $baseCurrencyRate;
176177

177-
/**
178-
* @var DataObject
179-
*/
180-
private $_rawTrackingRequest;
181-
182178
/**
183179
* @var CurlFactory
184180
*/
@@ -301,16 +297,6 @@ protected function _createShipSoapClient()
301297
return $this->_createSoapClient($this->_shipServiceWsdl, 1);
302298
}
303299

304-
/**
305-
* Create track soap client
306-
*
307-
* @return \SoapClient
308-
*/
309-
protected function _createTrackSoapClient()
310-
{
311-
return $this->_createSoapClient($this->_trackServiceWsdl, 1);
312-
}
313-
314300
/**
315301
* Collect and get rates
316302
*
@@ -1107,12 +1093,10 @@ public function getCurrencyCode()
11071093
* Get tracking
11081094
*
11091095
* @param string|string[] $trackings
1110-
* @return Result|null
1096+
* @return \Magento\Shipping\Model\Tracking\Result|null
11111097
*/
1112-
public function getTracking($trackings)
1098+
public function getTracking($trackings) : \Magento\Shipping\Model\Tracking\Result | null
11131099
{
1114-
$this->setTrackingReqeust();
1115-
11161100
if (!is_array($trackings)) {
11171101
$trackings = [$trackings];
11181102
}
@@ -1124,27 +1108,12 @@ public function getTracking($trackings)
11241108
return $this->_result;
11251109
}
11261110

1127-
/**
1128-
* Set tracking request
1129-
*
1130-
* @return void
1131-
*/
1132-
protected function setTrackingReqeust()
1133-
{
1134-
$r = new \Magento\Framework\DataObject();
1135-
1136-
$account = $this->getConfigData('account');
1137-
$r->setAccount($account);
1138-
1139-
$this->_rawTrackingRequest = $r;
1140-
}
1141-
11421111
/**
11431112
* Get Base Url for REST API
11441113
*
11451114
* @return string
11461115
*/
1147-
protected function _getBaseUrl()
1116+
protected function _getBaseUrl() : string
11481117
{
11491118
return $this->getConfigFlag('rest_sandbox_mode') ? $this->getConfigData('rest_sandbox_webservices_url')
11501119
: $this->getConfigData('rest_production_webservices_url');
@@ -1155,19 +1124,19 @@ protected function _getBaseUrl()
11551124
* @param string $tracking
11561125
* @return string|null
11571126
*/
1158-
protected function _getAccessToken($tracking)
1127+
protected function _getAccessToken($tracking) : string | null
11591128
{
11601129
$apiKey = $this->getConfigData('api_key') ?? null;
11611130
$secretKey = $this->getConfigData('secret_key') ?? null;
11621131

11631132
if (!$apiKey || !$secretKey) {
11641133
$this->_debug('Authentication keys are missing.');
11651134
$this->appendTrackingError($tracking, __('Authentication keys are missing.'));
1166-
return;
1135+
return null;
11671136
}
11681137

11691138
$requestArray = [
1170-
'grant_type' => 'client_credentials',
1139+
'grant_type' => self::AUTHENTICATION_GRANT_TYPE,
11711140
'client_id' => $apiKey,
11721141
'client_secret' => $secretKey
11731142
];
@@ -1176,7 +1145,7 @@ protected function _getAccessToken($tracking)
11761145
$url = $this->_getBaseUrl() . self::OAUTH_REQUEST_END_POINT;
11771146

11781147
$accessToken = null;
1179-
$headers = ["Content-Type" => "application/x-www-form-urlencoded"];
1148+
$headers = ['Content-Type' => 'application/x-www-form-urlencoded'];
11801149
$curlClient = $this->curlFactory->create();
11811150

11821151
try {
@@ -1194,6 +1163,7 @@ protected function _getAccessToken($tracking)
11941163
} catch (\Exception $e) {
11951164
$this->_logger->critical($e);
11961165
}
1166+
11971167
return $accessToken;
11981168
}
11991169
/**
@@ -1202,18 +1172,17 @@ protected function _getAccessToken($tracking)
12021172
* @param string $tracking
12031173
* @return void
12041174
*/
1205-
protected function _getTrackingInformation($tracking)
1175+
protected function _getTrackingInformation($tracking) : void
12061176
{
1207-
// authentication
12081177
$accessToken = $this->_getAccessToken($tracking);
12091178
if (!empty($accessToken)) {
12101179

12111180
$trackRequest = [
1212-
"includeDetailedScans" => true,
1213-
"trackingInfo" => [
1181+
'includeDetailedScans' => true,
1182+
'trackingInfo' => [
12141183
[
1215-
"trackingNumberInfo" => [
1216-
"trackingNumber"=> $tracking
1184+
'trackingNumberInfo' => [
1185+
'trackingNumber'=> $tracking
12171186
]
12181187
]
12191188
]
@@ -1225,17 +1194,18 @@ protected function _getTrackingInformation($tracking)
12251194

12261195
if ($response === null) {
12271196
$headers = [
1228-
"Content-Type" => "application/json",
1229-
"Authorization" => "Bearer ".$accessToken,
1230-
"X-locale" => "en_US",
1197+
'Content-Type' => 'application/json',
1198+
'Authorization' => 'Bearer '.$accessToken,
1199+
'X-locale' => 'en_US',
12311200

12321201
];
1202+
12331203
$url = $this->_getBaseUrl() . self::TRACK_REQUEST_END_POINT;
12341204
$curlClient = $this->curlFactory->create();
12351205

12361206
try {
12371207
$curlClient->setHeaders($headers);
1238-
$curlClient->setOptions([CURLOPT_ENCODING => "gzip,deflate,sdch"]);
1208+
$curlClient->setOptions([CURLOPT_ENCODING => 'gzip,deflate,sdch']);
12391209
$curlClient->post($url, $requestString);
12401210
$response = $curlClient->getBody();
12411211
$response = $this->serializer->unserialize($response);
@@ -1266,14 +1236,14 @@ protected function _getTrackingInformation($tracking)
12661236
* @param array $response
12671237
* @return void
12681238
*/
1269-
protected function _parseTrackingResponse($trackingValue, $response)
1239+
protected function _parseTrackingResponse($trackingValue, $response) : void
12701240
{
12711241
if (!is_array($response) || empty($response['output'])) {
12721242
$this->_debug($response);
12731243
$this->appendTrackingError($trackingValue, __('Invalid response from carrier'));
12741244
return;
12751245
} elseif (empty(reset($response['output']['completeTrackResults'])['trackResults'])) {
1276-
$this->_debug('No available tracking items.');
1246+
$this->_debug('No available tracking items');
12771247
$this->appendTrackingError($trackingValue, __('No available tracking items'));
12781248
return;
12791249
}
@@ -1736,7 +1706,7 @@ protected function filterDebugData($data)
17361706
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
17371707
* @SuppressWarnings(PHPMD.NPathComplexity)
17381708
*/
1739-
private function processTrackingDetails($trackInfo)
1709+
private function processTrackingDetails($trackInfo) : array
17401710
{
17411711
$result = [
17421712
'shippeddate' => null,
@@ -1825,22 +1795,23 @@ private function processTrackingDetails($trackInfo)
18251795
* @param array $trackInfo
18261796
* @return \Datetime|null
18271797
*/
1828-
private function getDeliveryDateTime($trackInfo)
1798+
private function getDeliveryDateTime($trackInfo) : \Datetime | null
18291799
{
18301800
$timestamp = null;
1831-
18321801
if (!empty($trackInfo['dateAndTimes']) && is_array($trackInfo['dateAndTimes'])) {
18331802
foreach ($trackInfo['dateAndTimes'] as $dateAndTimeInfo) {
18341803
if (!empty($dateAndTimeInfo['type']) &&
18351804
($dateAndTimeInfo['type'] == 'ESTIMATED_DELIVERY' || $dateAndTimeInfo['type'] == 'ACTUAL_DELIVERY')
1805+
&& !empty($dateAndTimeInfo['dateTime'])
18361806
) {
18371807
$timestamp = $dateAndTimeInfo['dateTime'];
18381808
break;
18391809
}
18401810
}
18411811
}
18421812

1843-
return $timestamp ? $this->parseDate($timestamp) : null;
1813+
$timestamp = $timestamp ? $this->parseDate($timestamp) : null;
1814+
return $timestamp ?: null;
18441815
}
18451816

18461817
/**
@@ -1849,7 +1820,7 @@ private function getDeliveryDateTime($trackInfo)
18491820
* @param array $address
18501821
* @return \Magento\Framework\Phrase|string
18511822
*/
1852-
private function getDeliveryAddress($address)
1823+
private function getDeliveryAddress($address) : \Magento\Framework\Phrase | string
18531824
{
18541825
$details = [];
18551826

@@ -1876,7 +1847,7 @@ private function getDeliveryAddress($address)
18761847
* @param array $events
18771848
* @return array
18781849
*/
1879-
private function processTrackDetailsEvents(array $events)
1850+
private function processTrackDetailsEvents(array $events) : array
18801851
{
18811852
$result = [];
18821853
foreach ($events as $event) {

0 commit comments

Comments
 (0)