![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/dev/tests/integration/testsuite/Magento/Dhl/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Dhl\Model; use Magento\Framework\App\Config\ReinitableConfigInterface; use Magento\Framework\App\ProductMetadataInterface; use Magento\Framework\DataObject; use Magento\Framework\HTTP\AsyncClient\HttpException; use Magento\Framework\HTTP\AsyncClient\HttpResponseDeferredInterface; use Magento\Framework\HTTP\AsyncClient\Response; use Magento\Framework\HTTP\AsyncClientInterface; use Magento\Framework\Simplexml\Element; use Magento\Quote\Model\Quote\Address\RateRequest; use Magento\Quote\Model\Quote\Address\RateResult\Error; use Magento\Shipping\Model\Shipment\Request; use Magento\Shipping\Model\Simplexml\Element as ShippingElement; use Magento\Shipping\Model\Tracking\Result\Status; use Magento\Store\Model\ScopeInterface; use Magento\TestFramework\Helper\Bootstrap; use Magento\TestFramework\HTTP\AsyncClientInterfaceMock; use PHPUnit\Framework\TestCase; /** * Test for DHL integration. * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class CarrierTest extends TestCase { private const PRODUCT_NAME_SPECIAL_CHARS = 'Φυστίκι Ψημένο με Αλάτι Συσκευασία'; /** * @var Carrier */ private $dhlCarrier; /** * @var AsyncClientInterfaceMock */ private $httpClient; /** * @var ReinitableConfigInterface */ private $config; /** * @var ProductMetadataInterface */ private $productMetadata; /** * @var string */ private $restoreCountry; /** * @inheritDoc */ protected function setUp(): void { $objectManager = Bootstrap::getObjectManager(); $this->dhlCarrier = $objectManager->get(Carrier::class); $this->httpClient = $objectManager->get(AsyncClientInterface::class); $this->config = $objectManager->get(ReinitableConfigInterface::class); $this->productMetadata = $objectManager->get(ProductMetadataInterface::class); $this->restoreCountry = $this->config->getValue('shipping/origin/country_id', 'store', 'default_store'); } /** * @inheritDoc */ protected function tearDown(): void { $this->config->setValue( 'shipping/origin/country_id', $this->restoreCountry, 'store', 'default_store' ); } /** * Test sending tracking requests. * * @magentoConfigFixture default_store carriers/dhl/id CustomerSiteID * @magentoConfigFixture default_store carriers/dhl/password CustomerPassword * @param string[] $trackingNumbers * @param string $responseXml * @param array $expectedTrackingData * @param string $expectedRequestXml * @dataProvider trackingDataProvider */ public function testGetTracking( $trackingNumbers, string $responseXml, $expectedTrackingData, string $expectedRequestXml = '' ) { $this->httpClient->nextResponses([new Response(200, [], $responseXml)]); $trackingResult = $this->dhlCarrier->getTracking($trackingNumbers); $this->assertTrackingResult($expectedTrackingData, $trackingResult->getAllTrackings()); if ($expectedRequestXml !== '') { $this->assertRequest($expectedRequestXml, $this->httpClient->getLastRequest()->getBody()); } } /** * Get tracking data provider * * @return array */ public function trackingDataProvider() : array { // phpcs:disable Magento2.Functions.DiscouragedFunction $expectedMultiAWBRequestXml = file_get_contents(__DIR__ . '/../_files/TrackingRequest_MultipleAWB.xml'); $multiAWBResponseXml = file_get_contents(__DIR__ . '/../_files/TrackingResponse_MultipleAWB.xml'); $expectedSingleAWBRequestXml = file_get_contents(__DIR__ . '/../_files/TrackingRequest_SingleAWB.xml'); $singleAWBResponseXml = file_get_contents(__DIR__ . '/../_files/TrackingResponse_SingleAWB.xml'); $singleNoDataResponseXml = file_get_contents(__DIR__ . '/../_files/SingleknownTrackResponse-no-data-found.xml'); $failedResponseXml = file_get_contents(__DIR__ . '/../_files/Track-res-XML-Parse-Err.xml'); //phpcs:enable Magento2.Functions.DiscouragedFunction $expectedTrackingDataA = [ 'carrier' => 'dhl', 'carrier_title' => 'DHL', 'tracking' => 4781584780, 'service' => 'DOCUMENT', 'progressdetail' => [ [ 'activity' => 'SD Shipment information received', 'deliverydate' => '2017-12-25', 'deliverytime' => '14:38:00', 'deliverylocation' => 'BEIJING-CHN [PEK]' ] ], 'weight' => '0.5 K', ]; $expectedTrackingDataB = [ 'carrier' => 'dhl', 'carrier_title' => 'DHL', 'tracking' => 4781585060, 'service' => 'NOT RESTRICTED FOR TRANSPORT,', 'progressdetail' => [ [ 'activity' => 'SD Shipment information received', 'deliverydate' => '2017-12-24', 'deliverytime' => '13:35:00', 'deliverylocation' => 'HONG KONG-HKG [HKG]' ] ], 'weight' => '2.0 K', ]; $expectedTrackingDataC = [ 'carrier' => 'dhl', 'carrier_title' => 'DHL', 'tracking' => 5702254250, 'service' => 'CD', 'progressdetail' => [ [ 'activity' => 'SD Shipment information received', 'deliverydate' => '2017-12-24', 'deliverytime' => '04:12:00', 'deliverylocation' => 'BIRMINGHAM-GBR [BHX]' ] ], 'weight' => '0.12 K', ]; $expectedTrackingDataD = [ 'carrier' => 'dhl', 'carrier_title' => 'DHL', 'tracking' => 4781585060, 'error_message' => __('Unable to retrieve tracking') ]; $expectedTrackingDataE = [ 'carrier' => 'dhl', 'carrier_title' => 'DHL', 'tracking' => 111, 'error_message' => __( 'Error #%1 : %2', '111', ' Error Parsing incoming request XML Error: The content of element type "ShipperReference" must match "(ReferenceID,ReferenceType?)". at line 16, column 22' ) ]; return [ 'multi-AWB' => [ ['4781584780', '4781585060', '5702254250'], $multiAWBResponseXml, [$expectedTrackingDataA, $expectedTrackingDataB, $expectedTrackingDataC], $expectedMultiAWBRequestXml ], 'single-AWB' => [ ['4781585060'], $singleAWBResponseXml, [$expectedTrackingDataB], $expectedSingleAWBRequestXml ], 'single-AWB-no-data' => [['4781585061'], $singleNoDataResponseXml, [$expectedTrackingDataD]], 'failed-response' => [['4781585060-failed'], $failedResponseXml, [$expectedTrackingDataE]] ]; } /** * Assert request * * @param string $expectedRequestXml * @param string $requestXml */ private function assertRequest(string $expectedRequestXml, string $requestXml): void { $expectedRequestElement = new Element($expectedRequestXml); $requestElement = new Element($requestXml); $requestMessageTime = $requestElement->Request->ServiceHeader->MessageTime->__toString(); $this->assertEquals( 1, preg_match("/\d{4}\-\d{2}\-\d{2}T\d{2}\:\d{2}\:\d{2}\+\d{2}\:\d{2}/", $requestMessageTime) ); $expectedRequestElement->Request->ServiceHeader->MessageTime = $requestMessageTime; $messageReference = $requestElement->Request->ServiceHeader->MessageReference->__toString(); $this->assertStringStartsWith('MAGE_TRCK_', $messageReference); $this->assertGreaterThanOrEqual(28, strlen($messageReference)); $this->assertLessThanOrEqual(32, strlen($messageReference)); $requestElement->Request->ServiceHeader->MessageReference = 'MAGE_TRCK_28TO32_Char_CHECKED'; $this->assertXmlStringEqualsXmlString($expectedRequestElement->asXML(), $requestElement->asXML()); } /** * Assert tracking * * @param array|null $expectedTrackingData * @param Status[]|null $trackingResults * @return void */ private function assertTrackingResult($expectedTrackingData, $trackingResults): void { if (null === $expectedTrackingData) { $this->assertNull($trackingResults); } else { $ctr = 0; foreach ($trackingResults as $trackingResult) { $this->assertEquals($expectedTrackingData[$ctr++], $trackingResult->getData()); } } } /** * Test sending shipping requests. * * @magentoConfigFixture default_store carriers/dhl/id some ID * @magentoConfigFixture default_store carriers/dhl/password some password * @magentoConfigFixture default_store carriers/dhl/account 1234567890 * @magentoConfigFixture default_store carriers/dhl/gateway_url https://xmlpi-ea.dhl.com/XMLShippingServlet * @magentoConfigFixture default_store carriers/dhl/content_type N * @magentoConfigFixture default_store carriers/dhl/nondoc_methods 1,3,4,8,P,Q,E,F,H,J,M,V,Y * @magentoConfigFixture default_store carriers/dhl/unit_of_measure C * @param string $origCountryId * @param string $expectedRegionCode * @param string $destCountryId * @param bool|null $isProductNameContainsSpecialChars * @return void * @dataProvider requestToShipmentDataProvider */ public function testRequestToShip( string $origCountryId, string $expectedRegionCode, string $destCountryId, bool $isProductNameContainsSpecialChars = false ): void { $this->config->setValue( 'shipping/origin/country_id', $origCountryId, 'store', null ); $convmap = [0x80, 0x10FFFF, 0, 0x1FFFFF]; $content = mb_encode_numericentity( file_get_contents(__DIR__ . '/../_files/response_shipping_label.xml'), $convmap, 'UTF-8' ); //phpcs:disable Magento2.Functions.DiscouragedFunction $this->httpClient->nextResponses( [ new Response( 200, [], $content ) ] ); $productName = $isProductNameContainsSpecialChars ? self::PRODUCT_NAME_SPECIAL_CHARS : 'item_name'; //phpcs:enable Magento2.Functions.DiscouragedFunction $request = new Request( [ 'packages' => [ 'package' => [ 'params' => [ 'width' => '3', 'length' => '3', 'height' => '3', 'dimension_units' => 'CENTIMETER', 'weight_units' => 'KILOGRAM', 'weight' => '0.454000000001', 'customs_value' => '10.00', 'container' => Carrier::DHL_CONTENT_TYPE_NON_DOC, ], 'items' => [ 'item1' => [ 'name' => $productName, 'qty' => 1, 'weight' => '0.454000000001', 'price' => '10.00', ], ], ], ], 'orig_country_id' => $origCountryId, 'dest_country_id' => $destCountryId, 'shipper_address_country_code' => $origCountryId, 'recipient_address_country_code' => $destCountryId, 'package_weight' => '0.454000000001', 'free_method_weight' => '0.454000000001', 'recipient_address_street_1' => '15099 Some Blvd', 'shipper_address_street_1' => '4956 Some Way', 'order_shipment' => new DataObject( [ 'order' => new DataObject( [ 'subtotal' => '10.00' ] ) ] ) ] ); //Generating labels $labels = $this->dhlCarrier->requestToShipment($request); $this->assertNotEmpty($labels); $this->assertNotEmpty($labels->getInfo()); $request = $this->httpClient->getLastRequest()->getBody(); $requestElement = new Element($request); $messageReference = $requestElement->Request->ServiceHeader->MessageReference->__toString(); $this->assertStringStartsWith('MAGE_SHIP_', $messageReference); $this->assertGreaterThanOrEqual(28, strlen($messageReference)); $this->assertLessThanOrEqual(32, strlen($messageReference)); $requestElement->Request->ServiceHeader->MessageReference = 'MAGE_SHIP_28TO32_Char_CHECKED'; $requestElement->Request->ServiceHeader->MessageTime = 'currentTime'; $requestElement->ShipmentDetails->Date = 'currentTime'; $expectedLabelRequest = $this->getExpectedLabelRequestXml( $origCountryId, $destCountryId, $expectedRegionCode, $isProductNameContainsSpecialChars ); $this->assertXmlStringEqualsXmlString($expectedLabelRequest, $requestElement->asXML()); } /** * Cases with different countries. * * @return array */ public function requestToShipmentDataProvider(): array { return [ [ 'GB', 'EU', 'US' ], [ 'SG', 'AP', 'US' ], [ 'DE', 'EU', 'DE' ], [ 'GB', 'EU', 'US', true ], ]; } /** * Generate expected labels request XML. * * @param string $origCountryId * @param string $destCountryId * @param string $regionCode * @param bool $isProductNameContainsSpecialChars * @return string */ private function getExpectedLabelRequestXml( string $origCountryId, string $destCountryId, string $regionCode, bool $isProductNameContainsSpecialChars ): string { $countryNames = [ 'US' => 'United States Of America', 'SG' => 'Singapore', 'GB' => 'United Kingdom', 'DE' => 'Germany', ]; $requestXmlPath = $origCountryId == $destCountryId ? '/../_files/domestic_shipment_request.xml' : '/../_files/shipment_request.xml'; // phpcs:ignore Magento2.Functions.DiscouragedFunction $expectedRequestElement = new ShippingElement(file_get_contents(__DIR__ . $requestXmlPath)); $expectedRequestElement->Request->MetaData->SoftwareVersion = $this->buildSoftwareVersion(); $expectedRequestElement->Consignee->CountryCode = $destCountryId; $expectedRequestElement->Consignee->CountryName = $countryNames[$destCountryId]; $expectedRequestElement->Shipper->CountryCode = $origCountryId; $expectedRequestElement->Shipper->CountryName = $countryNames[$origCountryId]; $expectedRequestElement->RegionCode = $regionCode; if ($origCountryId !== $destCountryId) { $expectedRequestElement->ExportDeclaration->ExportLineItem->ManufactureCountryCode = $origCountryId; } if ($isProductNameContainsSpecialChars) { $expectedRequestElement->ShipmentDetails->Pieces->Piece->PieceContents = self::PRODUCT_NAME_SPECIAL_CHARS; $expectedRequestElement->ExportDeclaration->ExportLineItem->Description = self::PRODUCT_NAME_SPECIAL_CHARS; } return $expectedRequestElement->asXML(); } /** * Builds a string to be used as the request SoftwareVersion. * * @return string */ private function buildSoftwareVersion(): string { return substr($this->productMetadata->getVersion(), 0, 10); } /** * Tests that valid rates are returned when sending a quotes request. * * @magentoConfigFixture default_store carriers/dhl/active 1 * @magentoConfigFixture default_store carriers/dhl/id some ID * @magentoConfigFixture default_store carriers/dhl/shipment_days Mon,Tue,Wed,Thu,Fri,Sat * @magentoConfigFixture default_store carriers/dhl/intl_shipment_days Mon,Tue,Wed,Thu,Fri,Sat * @magentoConfigFixture default_store carriers/dhl/allowed_methods IE * @magentoConfigFixture default_store carriers/dhl/international_service IE * @magentoConfigFixture default_store carriers/dhl/gateway_url https://xmlpi-ea.dhl.com/XMLShippingServlet * @magentoConfigFixture default_store carriers/dhl/id some ID * @magentoConfigFixture default_store carriers/dhl/password some password * @magentoConfigFixture default_store carriers/dhl/content_type N * @magentoConfigFixture default_store carriers/dhl/nondoc_methods 1,3,4,8,P,Q,E,F,H,J,M,V,Y * @magentoConfigFixture default_store carriers/dhl/showmethod' => 1, * @magentoConfigFixture default_store carriers/dhl/title DHL Title * @magentoConfigFixture default_store carriers/dhl/specificerrmsg dhl error message * @magentoConfigFixture default_store carriers/dhl/unit_of_measure K * @magentoConfigFixture default_store carriers/dhl/size 1 * @magentoConfigFixture default_store carriers/dhl/height 1.6 * @magentoConfigFixture default_store carriers/dhl/width 1.6 * @magentoConfigFixture default_store carriers/dhl/depth 1.6 * @magentoConfigFixture default_store carriers/dhl/debug 1 * @magentoConfigFixture default_store shipping/origin/country_id GB */ public function testCollectRates() { $this->setNextResponse(__DIR__ . '/../_files/dhl_quote_response.xml'); $request = $this->createRequest(); $expectedRates = [ ['carrier' => 'dhl', 'carrier_title' => 'DHL Title', 'cost' => 45.85, 'method' => 'E', 'price' => 45.85], ['carrier' => 'dhl', 'carrier_title' => 'DHL Title', 'cost' => 35.26, 'method' => 'Q', 'price' => 35.26], ['carrier' => 'dhl', 'carrier_title' => 'DHL Title', 'cost' => 37.38, 'method' => 'Y', 'price' => 37.38], ['carrier' => 'dhl', 'carrier_title' => 'DHL Title', 'cost' => 35.26, 'method' => 'P', 'price' => 35.26] ]; $actualRates = $this->dhlCarrier->collectRates($request)->getAllRates(); self::assertEquals(count($expectedRates), count($actualRates)); foreach ($actualRates as $i => $actualRate) { $actualRate = $actualRate->getData(); unset($actualRate['method_title']); self::assertEquals($expectedRates[$i], $actualRate); } $requestXml = $this->httpClient->getLastRequest()->getBody(); self::assertStringContainsString('<Weight>18.223</Weight>', $requestXml); self::assertStringContainsString('<Height>0.63</Height>', $requestXml); self::assertStringContainsString('<Width>0.63</Width>', $requestXml); self::assertStringContainsString('<Depth>0.63</Depth>', $requestXml); } /** * Tests that quotes request doesn't contain dimensions when it shouldn't. * * @param string|null $size * @param string|null $height * @param string|null $width * @param string|null $depth * @magentoConfigFixture default_store carriers/dhl/active 1 * @dataProvider collectRatesWithoutDimensionsDataProvider */ public function testCollectRatesWithoutDimensions(?string $size, ?string $height, ?string $width, ?string $depth) { $this->setDhlConfig(['size' => $size, 'height' => $height, 'width' => $width, 'depth' => $depth]); $request = $this->createRequest(); $this->dhlCarrier = Bootstrap::getObjectManager()->create(Carrier::class); $this->dhlCarrier->collectRates($request)->getAllRates(); $requestXml = $this->httpClient->getLastRequest()->getBody(); $this->assertStringNotContainsString('<Width>', $requestXml); $this->assertStringNotContainsString('<Height>', $requestXml); $this->assertStringNotContainsString('<Depth>', $requestXml); $this->config->reinit(); } /** * Test get carriers rates if has HttpException. * * @magentoConfigFixture default_store carriers/dhl/active 1 */ public function testGetRatesWithHttpException(): void { $this->setDhlConfig(['showmethod' => 1]); $deferredResponse = $this->getMockBuilder(HttpResponseDeferredInterface::class) ->onlyMethods(['get']) ->getMockForAbstractClass(); $exception = new HttpException('Exception message'); $deferredResponse->method('get')->willThrowException($exception); $this->httpClient->setDeferredResponseMock($deferredResponse); $request = $this->createRequest(); $this->dhlCarrier = Bootstrap::getObjectManager()->create(Carrier::class); $resultRate = $this->dhlCarrier->collectRates($request)->getAllRates()[0]; $error = Bootstrap::getObjectManager()->get(Error::class); $error->setCarrier('dhl'); $error->setCarrierTitle($this->dhlCarrier->getConfigData('title')); $error->setErrorMessage($this->dhlCarrier->getConfigData('specificerrmsg')); $this->assertEquals($error, $resultRate); } /** * @return array */ public function collectRatesWithoutDimensionsDataProvider() { return [ ['size' => '0', 'height' => '1.1', 'width' => '0.6', 'depth' => '0.7'], ['size' => '1', 'height' => '', 'width' => '', 'depth' => ''], ['size' => null, 'height' => '1.1', 'width' => '0.6', 'depth' => '0.7'], ['size' => '1', 'height' => '1', 'width' => '', 'depth' => ''], ['size' => null, 'height' => null, 'width' => null, 'depth' => null], ]; } /** * Sets DHL config value. * * @param array $params * @return void */ private function setDhlConfig(array $params) { foreach ($params as $name => $val) { if ($val !== null) { $this->config->setValue( 'carriers/dhl/' . $name, $val, ScopeInterface::SCOPE_STORE ); } } } /** * Tests that the free rate is returned when sending a quotes request * * @param array $addRequestData * @param bool $freeShippingExpects * @magentoConfigFixture default_store carriers/dhl/active 1 * @magentoConfigFixture default_store carriers/dhl/id some ID * @magentoConfigFixture default_store carriers/dhl/shipment_days Mon,Tue,Wed,Thu,Fri,Sat * @magentoConfigFixture default_store carriers/dhl/intl_shipment_days Mon,Tue,Wed,Thu,Fri,Sat * @magentoConfigFixture default_store carriers/dhl/allowed_methods IE * @magentoConfigFixture default_store carriers/dhl/international_service IE * @magentoConfigFixture default_store carriers/dhl/gateway_url https://xmlpi-ea.dhl.com/XMLShippingServlet * @magentoConfigFixture default_store carriers/dhl/id some ID * @magentoConfigFixture default_store carriers/dhl/password some password * @magentoConfigFixture default_store carriers/dhl/content_type N * @magentoConfigFixture default_store carriers/dhl/nondoc_methods 1,3,4,8,P,Q,E,F,H,J,M,V,Y * @magentoConfigFixture default_store carriers/dhl/showmethod' => 1, * @magentoConfigFixture default_store carriers/dhl/title DHL Title * @magentoConfigFixture default_store carriers/dhl/specificerrmsg dhl error message * @magentoConfigFixture default_store carriers/dhl/unit_of_measure K * @magentoConfigFixture default_store carriers/dhl/size 1 * @magentoConfigFixture default_store carriers/dhl/height 1.6 * @magentoConfigFixture default_store carriers/dhl/width 1.6 * @magentoConfigFixture default_store carriers/dhl/depth 1.6 * @magentoConfigFixture default_store carriers/dhl/debug 1 * @magentoConfigFixture default_store carriers/dhl/free_method_nondoc P * @magentoConfigFixture default_store carriers/dhl/free_shipping_enable 1 * @magentoConfigFixture default_store carriers/dhl/free_shipping_subtotal 25 * @magentoConfigFixture default_store shipping/origin/country_id GB * @magentoAppIsolation enabled * @dataProvider collectRatesWithFreeShippingDataProvider */ public function testCollectRatesWithFreeShipping(array $addRequestData, bool $freeShippingExpects): void { $this->setNextResponse(__DIR__ . '/../_files/dhl_quote_response.xml'); $request = $this->createRequest($addRequestData); $actualRates = $this->dhlCarrier->collectRates($request)->getAllRates(); $freeRateExists = false; foreach ($actualRates as $actualRate) { $actualRate = $actualRate->getData(); if ($actualRate['method'] === 'P' && (float)$actualRate['price'] === 0.0) { $freeRateExists = true; break; } } self::assertEquals($freeShippingExpects, $freeRateExists); } /** * @return array */ public function collectRatesWithFreeShippingDataProvider(): array { return [ [ ['package_value' => 25, 'package_value_with_discount' => 22], false ], [ ['package_value' => 25, 'package_value_with_discount' => 25], true ], [ ['package_value' => 28, 'package_value_with_discount' => 25], true ], ]; } /** * Returns request data. * * @return array */ private function getRequestData(): array { return [ 'dest_country_id' => 'DE', 'dest_region_id' => '82', 'dest_region_code' => 'BER', 'dest_street' => 'Turmstraße 17', 'dest_city' => 'Berlin', 'dest_postcode' => '10559', 'dest_postal' => '10559', 'package_value' => '5', 'package_value_with_discount' => '5', 'package_weight' => '8.2657', 'package_qty' => '1', 'package_physical_value' => '5', 'free_method_weight' => '5', 'store_id' => '1', 'website_id' => '1', 'free_shipping' => '0', 'limit_carrier' => null, 'base_subtotal_incl_tax' => '5', 'orig_country_id' => 'US', 'orig_region_id' => '12', 'orig_city' => 'Fremont', 'orig_postcode' => '94538', 'dhl_id' => 'MAGEN_8501', 'dhl_password' => 'QR2GO1U74X', 'dhl_account' => '799909537', 'dhl_shipping_intl_key' => '54233F2B2C4E5C4B4C5E5A59565530554B405641475D5659', 'girth' => null, 'height' => null, 'length' => null, 'width' => null, 'weight' => 1, 'dhl_shipment_type' => 'P', 'dhl_duitable' => 0, 'dhl_duty_payment_type' => 'R', 'dhl_content_desc' => 'Big Box', 'limit_method' => 'IE', 'ship_date' => '2014-01-09', 'action' => 'RateEstimate', 'all_items' => [], ]; } /** * Set next response content from file * * @param string $file */ private function setNextResponse(string $file): void { //phpcs:disable Magento2.Functions.DiscouragedFunction $response = new Response( 200, [], file_get_contents($file) ); //phpcs:enable Magento2.Functions.DiscouragedFunction $this->httpClient->nextResponses( array_fill(0, Carrier::UNAVAILABLE_DATE_LOOK_FORWARD + 1, $response) ); } /** * Create Rate Request * * @param array $addRequestData * @return RateRequest */ private function createRequest(array $addRequestData = []): RateRequest { $requestData = $this->getRequestData(); if (!empty($addRequestData)) { $requestData = array_merge($requestData, $addRequestData); } return Bootstrap::getObjectManager()->create(RateRequest::class, ['data' => $requestData]); } }