Skip to content

Commit 1306cb7

Browse files
author
Oleksandr Gorkun
committed
MAGETWO-99673: Implement deferred
1 parent 774a39b commit 1306cb7

File tree

6 files changed

+85
-69
lines changed

6 files changed

+85
-69
lines changed

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

Lines changed: 55 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -963,6 +963,60 @@ protected function _addDimension($nodePiece)
963963
}
964964
}
965965

966+
/**
967+
* Process response received from DHL's API for quotes.
968+
*
969+
* @param array $responsesData
970+
* @return Error|Result
971+
*/
972+
private function processQuotesResponses(array $responsesData)
973+
{
974+
usort(
975+
$responsesData,
976+
function (array $a, array $b): int {
977+
return $a['date'] <=> $b['date'];
978+
}
979+
);
980+
/** @var string $lastResponse */
981+
$lastResponse = '';
982+
//Processing different dates
983+
foreach ($responsesData as $responseData) {
984+
$debugPoint = [];
985+
$debugPoint['request'] = $this->filterDebugData($responseData['request']);
986+
$debugPoint['response'] = $this->filterDebugData($responseData['body']);
987+
$debugPoint['from_cache'] = $responseData['from_cache'];
988+
$unavailable = false;
989+
try {
990+
//Getting availability
991+
$bodyXml = $this->_xmlElFactory->create(['data' => $responseData['body']]);
992+
$code = $bodyXml->xpath('//GetQuoteResponse/Note/Condition/ConditionCode');
993+
if (isset($code[0]) && (int)$code[0] == self::CONDITION_CODE_SERVICE_DATE_UNAVAILABLE) {
994+
$debugPoint['info'] = sprintf(
995+
__("DHL service is not available at %s date"),
996+
$responseData['date']
997+
);
998+
$unavailable = true;
999+
}
1000+
} catch (\Throwable $exception) {
1001+
//Failed to read response
1002+
$unavailable = true;
1003+
$this->_errors[$exception->getCode()] = $exception->getMessage();
1004+
}
1005+
if ($unavailable) {
1006+
//Cannot get rates.
1007+
$this->_debug($debugPoint);
1008+
break;
1009+
}
1010+
//Caching rates
1011+
$this->_setCachedQuotes($responseData['request'], $responseData['body']);
1012+
$this->_debug($debugPoint);
1013+
//Will only process rates available for the latest date possible.
1014+
$lastResponse = $responseData['body'];
1015+
}
1016+
1017+
return $this->_parseResponse($lastResponse);
1018+
}
1019+
9661020
/**
9671021
* Get shipping quotes
9681022
*
@@ -1016,44 +1070,8 @@ function () use ($deferredResponses, $responseBodies) {
10161070
'from_cache' => false
10171071
];
10181072
}
1019-
/** @var string $lastResponse */
1020-
$lastResponse = '';
1021-
//Processing different dates
1022-
foreach ($responseBodies as $responseData) {
1023-
$debugPoint = [];
1024-
$debugPoint['request'] = $this->filterDebugData($responseData['request']);
1025-
$debugPoint['response'] = $this->filterDebugData($responseData['body']);
1026-
$debugPoint['from_cache'] = $responseData['from_cache'];
1027-
$unavailable = false;
1028-
try {
1029-
//Getting availability
1030-
$bodyXml = $this->_xmlElFactory->create(['data' => $responseData['body']]);
1031-
$code = $bodyXml->xpath('//GetQuoteResponse/Note/Condition/ConditionCode');
1032-
if (isset($code[0]) && (int)$code[0] == self::CONDITION_CODE_SERVICE_DATE_UNAVAILABLE) {
1033-
$debugPoint['info'] = sprintf(
1034-
__("DHL service is not available at %s date"),
1035-
$responseData['date']
1036-
);
1037-
$unavailable = true;
1038-
}
1039-
} catch (\Throwable $exception) {
1040-
//Failed to read response
1041-
$unavailable = true;
1042-
$this->_errors[$exception->getCode()] = $exception->getMessage();
1043-
}
1044-
if ($unavailable) {
1045-
//Cannot get rates.
1046-
$this->_debug($debugPoint);
1047-
break;
1048-
}
1049-
//Caching rates
1050-
$this->_setCachedQuotes($responseData['request'], $responseData['body']);
1051-
$this->_debug($debugPoint);
1052-
//Will only process rates available for the latest date possible.
1053-
$lastResponse = $responseData['body'];
1054-
}
10551073

1056-
return $this->_parseResponse($lastResponse);
1074+
return $this->processQuotesResponses($responseBodies);
10571075
}
10581076
)
10591077
);

app/code/Magento/Shipping/Model/Rate/PackageResult.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
namespace Magento\Shipping\Model\Rate;
1010

11-
use Magento\Quote\Model\Quote\Address\RateResult\Error;
1211
use Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory;
12+
use Magento\Store\Model\StoreManagerInterface;
1313

1414
/**
1515
* Carriers rates for different packages.
@@ -27,11 +27,11 @@ class PackageResult extends Result
2727
private $errorFactory;
2828

2929
/**
30-
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
30+
* @param StoreManagerInterface $storeManager
3131
* @param ErrorFactory $errorFactory
3232
*/
3333
public function __construct(
34-
\Magento\Store\Model\StoreManagerInterface $storeManager,
34+
StoreManagerInterface $storeManager,
3535
ErrorFactory $errorFactory
3636
) {
3737
parent::__construct($storeManager);

app/code/Magento/Shipping/Test/Unit/Model/Rate/CarrierResultTest.php

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,9 @@ public function testComposing(): void
5151
->setMethods(['getMethod', 'getPrice', 'setPrice'])
5252
->getMock();
5353
$price1 = 3;
54-
$rate1->expects($this->any())->method('getMethod')->willReturn('method');
55-
$rate1->expects($this->any())->method('getPrice')->willReturnReference($price1);
56-
$rate1->expects($this->any())
57-
->method('setPrice')
54+
$rate1->method('getMethod')->willReturn('method');
55+
$rate1->method('getPrice')->willReturnReference($price1);
56+
$rate1->method('setPrice')
5857
->willReturnCallback(
5958
function ($price) use (&$price1) {
6059
$price1 = $price;
@@ -64,39 +63,38 @@ function ($price) use (&$price1) {
6463
$result1 = $this->getMockBuilder(Result::class)
6564
->disableOriginalConstructor()
6665
->getMock();
67-
$result1->expects($this->any())->method('getAllRates')->willReturn([$rate1]);
68-
$result1->expects($this->any())->method('getError')->willReturn(false);
66+
$result1->method('getAllRates')->willReturn([$rate1]);
67+
$result1->method('getError')->willReturn(false);
6968

7069
$rate2 = $this->getMockBuilder(Method::class)
7170
->disableOriginalConstructor()
7271
->setMethods(['getMethod', 'getPrice', 'setPrice'])
7372
->getMock();
7473
$price2 = 4;
75-
$rate2->expects($this->any())->method('getMethod')->willReturn('method');
76-
$rate2->expects($this->any())->method('getPrice')->willReturnReference($price2);
77-
$rate2->expects($this->any())
78-
->method('setPrice')
74+
$rate2->method('getMethod')->willReturn('method');
75+
$rate2->method('getPrice')->willReturnReference($price2);
76+
$rate2->method('setPrice')
7977
->willReturnCallback(
8078
function ($price) use (&$price2) {
8179
$price2 = $price;
8280
}
8381
);
8482
/** @var Result|MockObject $result2 */
8583
$result2 = $this->getMockBuilder(Result::class)->disableOriginalConstructor()->getMock();
86-
$result2->expects($this->any())->method('getAllRates')->willReturn([$rate2]);
87-
$result2->expects($this->any())->method('getError')->willReturn(false);
84+
$result2->method('getAllRates')->willReturn([$rate2]);
85+
$result2->method('getError')->willReturn(false);
8886

8987
$rate3 = $this->getMockBuilder(Error::class)->disableOriginalConstructor()->getMock();
9088
/** @var Result|MockObject $result3 */
9189
$result3 = $this->getMockBuilder(Result::class)->disableOriginalConstructor()->getMock();
92-
$result3->expects($this->any())->method('getAllRates')->willReturn([$rate3]);
93-
$result3->expects($this->any())->method('getError')->willReturn(true);
90+
$result3->method('getAllRates')->willReturn([$rate3]);
91+
$result3->method('getError')->willReturn(true);
9492

9593
$rate4 = $this->getMockBuilder(Error::class)->disableOriginalConstructor()->getMock();
9694
/** @var Result|MockObject $result4 */
9795
$result4 = $this->getMockBuilder(Result::class)->disableOriginalConstructor()->getMock();
98-
$result4->expects($this->any())->method('getAllRates')->willReturn([$rate4]);
99-
$result4->expects($this->any())->method('getError')->willReturn(true);
96+
$result4->method('getAllRates')->willReturn([$rate4]);
97+
$result4->method('getError')->willReturn(true);
10098

10199
//Composing
102100
$this->result->appendResult($result1, false);

dev/tests/integration/testsuite/Magento/Dhl/Model/CarrierTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ protected function tearDown()
7878
* @param string $responseXml
7979
* @param array $expectedTrackingData
8080
* @param string $expectedRequestXml
81-
* @dataProvider getTrackingDataProvider
81+
* @dataProvider trackingDataProvider
8282
*/
8383
public function testGetTracking(
8484
$trackingNumbers,
@@ -99,7 +99,7 @@ public function testGetTracking(
9999
*
100100
* @return array
101101
*/
102-
public function getTrackingDataProvider() : array
102+
public function trackingDataProvider() : array
103103
{
104104
// phpcs:disable Magento2.Functions.DiscouragedFunction
105105
$expectedMultiAWBRequestXml = file_get_contents(__DIR__ . '/../_files/TrackingRequest_MultipleAWB.xml');

lib/internal/Magento/Framework/Async/Code/Generator/ProxyDeferredGenerator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class ProxyDeferredGenerator extends EntityAbstract
2121
/**
2222
* Entity type
2323
*/
24-
const ENTITY_TYPE = 'proxyDeferred';
24+
public const ENTITY_TYPE = 'proxyDeferred';
2525

2626
/**
2727
* @inheritDoc

lib/internal/Magento/Framework/HTTP/AsyncClient/Request.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,25 @@
1313
*/
1414
class Request
1515
{
16-
const METHOD_GET = 'GET';
16+
public const METHOD_GET = 'GET';
1717

18-
const METHOD_POST = 'POST';
18+
public const METHOD_POST = 'POST';
1919

20-
const METHOD_HEAD = 'HEAD';
20+
public const METHOD_HEAD = 'HEAD';
2121

22-
const METHOD_PUT = 'PUT';
22+
public const METHOD_PUT = 'PUT';
2323

24-
const METHOD_DELETE = 'DELETE';
24+
public const METHOD_DELETE = 'DELETE';
2525

26-
const METHOD_CONNECT = 'CONNECT';
26+
public const METHOD_CONNECT = 'CONNECT';
2727

28-
const METHOD_PATCH = 'PATCH';
28+
public const METHOD_PATCH = 'PATCH';
2929

30-
const METHOD_OPTIONS = 'OPTIONS';
30+
public const METHOD_OPTIONS = 'OPTIONS';
3131

32-
const METHOD_PROPFIND = 'PROPFIND';
32+
public const METHOD_PROPFIND = 'PROPFIND';
3333

34-
const METHOD_TRACE = 'TRACE';
34+
public const METHOD_TRACE = 'TRACE';
3535

3636
/**
3737
* @var string

0 commit comments

Comments
 (0)