@@ -443,14 +443,7 @@ private function getExpectedLabelRequestXml(
443
443
public function testCollectRates ()
444
444
{
445
445
$ requestData = $ this ->getRequestData ();
446
- //phpcs:disable Magento2.Functions.DiscouragedFunction
447
- $ response = new Response (
448
- 200 ,
449
- [],
450
- file_get_contents (__DIR__ . '/../_files/dhl_quote_response.xml ' )
451
- );
452
- //phpcs:enable Magento2.Functions.DiscouragedFunction
453
- $ this ->httpClient ->nextResponses (array_fill (0 , Carrier::UNAVAILABLE_DATE_LOOK_FORWARD + 1 , $ response ));
446
+ $ this ->setNextResponse (__DIR__ . '/../_files/dhl_quote_response.xml ' );
454
447
/** @var RateRequest $request */
455
448
$ request = Bootstrap::getObjectManager ()->create (RateRequest::class, $ requestData );
456
449
$ expectedRates = [
@@ -563,6 +556,80 @@ private function setDhlConfig(array $params)
563
556
}
564
557
}
565
558
559
+ /**
560
+ * Tests that the free rate is returned when sending a quotes request
561
+ *
562
+ * @param array $addRequestData
563
+ * @param bool $freeShippingExpects
564
+ * @magentoConfigFixture default_store carriers/dhl/active 1
565
+ * @magentoConfigFixture default_store carriers/dhl/id some ID
566
+ * @magentoConfigFixture default_store carriers/dhl/shipment_days Mon,Tue,Wed,Thu,Fri,Sat
567
+ * @magentoConfigFixture default_store carriers/dhl/intl_shipment_days Mon,Tue,Wed,Thu,Fri,Sat
568
+ * @magentoConfigFixture default_store carriers/dhl/allowed_methods IE
569
+ * @magentoConfigFixture default_store carriers/dhl/international_service IE
570
+ * @magentoConfigFixture default_store carriers/dhl/gateway_url https://xmlpi-ea.dhl.com/XMLShippingServlet
571
+ * @magentoConfigFixture default_store carriers/dhl/id some ID
572
+ * @magentoConfigFixture default_store carriers/dhl/password some password
573
+ * @magentoConfigFixture default_store carriers/dhl/content_type N
574
+ * @magentoConfigFixture default_store carriers/dhl/nondoc_methods 1,3,4,8,P,Q,E,F,H,J,M,V,Y
575
+ * @magentoConfigFixture default_store carriers/dhl/showmethod' => 1,
576
+ * @magentoConfigFixture default_store carriers/dhl/title DHL Title
577
+ * @magentoConfigFixture default_store carriers/dhl/specificerrmsg dhl error message
578
+ * @magentoConfigFixture default_store carriers/dhl/unit_of_measure K
579
+ * @magentoConfigFixture default_store carriers/dhl/size 1
580
+ * @magentoConfigFixture default_store carriers/dhl/height 1.6
581
+ * @magentoConfigFixture default_store carriers/dhl/width 1.6
582
+ * @magentoConfigFixture default_store carriers/dhl/depth 1.6
583
+ * @magentoConfigFixture default_store carriers/dhl/debug 1
584
+ * @magentoConfigFixture default_store carriers/dhl/free_method_nondoc P
585
+ * @magentoConfigFixture default_store carriers/dhl/free_shipping_enable 1
586
+ * @magentoConfigFixture default_store carriers/dhl/free_shipping_subtotal 25
587
+ * @magentoConfigFixture default_store shipping/origin/country_id GB
588
+ * @magentoAppIsolation enabled
589
+ * @dataProvider collectRatesWithFreeShippingDataProvider
590
+ */
591
+ public function testCollectRatesWithFreeShipping (array $ addRequestData , bool $ freeShippingExpects ): void
592
+ {
593
+ $ this ->setNextResponse (__DIR__ . '/../_files/dhl_quote_response.xml ' );
594
+
595
+ $ requestData = $ this ->getRequestData ();
596
+ $ requestData ['data ' ] += $ addRequestData ;
597
+ /** @var RateRequest $request */
598
+ $ request = Bootstrap::getObjectManager ()->create (RateRequest::class, $ requestData );
599
+
600
+ $ actualRates = $ this ->dhlCarrier ->collectRates ($ request )->getAllRates ();
601
+ $ freeRateExists = false ;
602
+ foreach ($ actualRates as $ i => $ actualRate ) {
603
+ $ actualRate = $ actualRate ->getData ();
604
+ if ($ actualRate ['method ' ] === 'P ' && $ actualRate ['price ' ] === 0.0 ) {
605
+ $ freeRateExists = true ;
606
+ }
607
+ }
608
+
609
+ self ::assertEquals ($ freeShippingExpects , $ freeRateExists );
610
+ }
611
+
612
+ /**
613
+ * @return array
614
+ */
615
+ public function collectRatesWithFreeShippingDataProvider (): array
616
+ {
617
+ return [
618
+ [
619
+ ['base_subtotal_incl_tax ' => 25 , 'base_subtotal_with_discount_incl_tax ' => 22 ],
620
+ false
621
+ ],
622
+ [
623
+ ['base_subtotal_incl_tax ' => 25 , 'base_subtotal_with_discount_incl_tax ' => 25 ],
624
+ true
625
+ ],
626
+ [
627
+ ['base_subtotal_incl_tax ' => 28 , 'base_subtotal_with_discount_incl_tax ' => 25 ],
628
+ true
629
+ ],
630
+ ];
631
+ }
632
+
566
633
/**
567
634
* Returns request data.
568
635
*
@@ -614,4 +681,23 @@ private function getRequestData(): array
614
681
]
615
682
];
616
683
}
684
+
685
+ /**
686
+ * Set next response content from file
687
+ *
688
+ * @param string $file
689
+ */
690
+ private function setNextResponse (string $ file ): void
691
+ {
692
+ //phpcs:disable Magento2.Functions.DiscouragedFunction
693
+ $ response = new Response (
694
+ 200 ,
695
+ [],
696
+ file_get_contents ($ file )
697
+ );
698
+ //phpcs:enable Magento2.Functions.DiscouragedFunction
699
+ $ this ->httpClient ->nextResponses (
700
+ array_fill (0 , Carrier::UNAVAILABLE_DATE_LOOK_FORWARD + 1 , $ response )
701
+ );
702
+ }
617
703
}
0 commit comments