Skip to content

Commit e7d6b5a

Browse files
committed
MTA-3785: Create auto test to check that shipping rates are reloaded based on City field value
1 parent 64ac8dd commit e7d6b5a

File tree

9 files changed

+215
-132
lines changed

9 files changed

+215
-132
lines changed

dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping/Method.php

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,38 +10,61 @@
1010
use Magento\Mtf\Client\Locator;
1111

1212
/**
13-
* One page checkout status shipping method block
13+
* One page checkout status shipping method block.
1414
*/
1515
class Method extends Block
1616
{
1717
/**
18-
* Shipping method selector
18+
* Shipping method selector.
1919
*
2020
* @var string
2121
*/
2222
protected $shippingMethod = './/tbody//tr[td[contains(., "%s")] and td[contains(., "%s")]]//input';
2323

2424
/**
25-
* Continue checkout button
25+
* Continue checkout button.
2626
*
2727
* @var string
2828
*/
2929
protected $continue = '#shipping-method-buttons-container button';
3030

3131
/**
32-
* Wait element
32+
* Wait element.
3333
*
3434
* @var string
3535
*/
3636
protected $waitElement = '.loading-mask';
3737

3838
/**
39-
* Block wait element
39+
* Block wait element.
4040
*
4141
* @var string
4242
*/
4343
protected $blockWaitElement = '._block-content-loading';
4444

45+
/**
46+
* Wait until shipping rates will appear.
47+
*
48+
* @return void
49+
*/
50+
private function waitForShippingRates()
51+
{
52+
// Code under test uses JavaScript setTimeout at this point as well.
53+
sleep(3);
54+
$this->waitForElementNotVisible($this->blockWaitElement);
55+
}
56+
57+
/**
58+
* Retrieve if the shipping methods loader appears.
59+
*
60+
* @return bool|null
61+
*/
62+
public function isLoaderAppeared()
63+
{
64+
$this->_rootElement->click();
65+
return $this->waitForElementVisible($this->waitElement);
66+
}
67+
4568
/**
4669
* Select shipping method.
4770
*
@@ -50,15 +73,26 @@ class Method extends Block
5073
*/
5174
public function selectShippingMethod(array $method)
5275
{
53-
// Code under test uses JavaScript setTimeout at this point as well.
54-
sleep(3);
76+
$this->waitForShippingRates();
5577
$selector = sprintf($this->shippingMethod, $method['shipping_method'], $method['shipping_service']);
56-
$this->waitForElementNotVisible($this->blockWaitElement);
5778
$this->_rootElement->find($selector, Locator::SELECTOR_XPATH)->click();
5879
}
5980

6081
/**
61-
* Click continue button
82+
* Check whether shipping method is available in the shipping rates.
83+
*
84+
* @param array $method
85+
* @return bool
86+
*/
87+
public function isShippingMethodAvaiable(array $method)
88+
{
89+
$this->waitForShippingRates();
90+
$selector = sprintf($this->shippingMethod, $method['shipping_method'], $method['shipping_service']);
91+
return $this->_rootElement->find($selector, Locator::SELECTOR_XPATH)->isVisible();
92+
}
93+
94+
/**
95+
* Click continue button.
6296
*
6397
* @return void
6498
*/

dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertCityBasedShippingRateChanged.php

Lines changed: 0 additions & 67 deletions
This file was deleted.

dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/CityBasedShippingRateTest.xml

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,38 @@
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
99
<testCase name="Magento\Shipping\Test\TestCase\CityBasedShippingRateTest" summary="Shipping rates can be reloaded based on changes in City field value">
10-
<variation name="CityBasedShippingRateDHLTestVariation2" summary="Shipping rates can be reloaded based on changes in City field value" ticketId="MAGETWO-56124">
10+
<variation name="CityBasedShippingRateDHLTestVariation" summary="Shipping rates can be reloaded based on changes in City field value for DHL shipping method" ticketId="MAGETWO-56124">
1111
<data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data>
1212
<data name="products/0" xsi:type="string">catalogProductSimple::default</data>
13-
<data name="checkoutMethod" xsi:type="string">login</data>
13+
<data name="checkoutMethod" xsi:type="string">guest</data>
1414
<data name="customer/dataset" xsi:type="string">default</data>
15-
<data name="address/dataset" xsi:type="string">DE_address</data>
16-
<data name="shippingAddresses/0/dataset" xsi:type="string">DE_address</data>
17-
<data name="shippingAddresses/1/dataset" xsi:type="string">DE_address_Frankfurt</data>
18-
<data name="shipping/shipping_service" xsi:type="string">DHL</data>
19-
<data name="shipping/shipping_method" xsi:type="string">Express easy</data>
20-
<data name="cart/data/shipping_method" xsi:type="string">Express easy</data>
21-
<data name="payment/method" xsi:type="string">checkmo</data>
22-
<data name="configData" xsi:type="string">checkmo, dhl_eu, shipping_origin_CH, config_base_currency_ch</data>
15+
<data name="shippingMethod/shipping_service" xsi:type="string">DHL</data>
16+
<data name="shippingMethod/shipping_method" xsi:type="string">Express easy</data>
17+
<data name="clearShippingAddress/postcode" xsi:type="string" />
18+
<data name="clearShippingAddress/city" xsi:type="string" />
19+
<data name="clearShippingAddress/country_id" xsi:type="string" />
20+
<data name="shippingAddresses/0/country_id" xsi:type="string">Kenya</data>
21+
<data name="shippingAddresses/1/country_id" xsi:type="string">Kenya</data>
22+
<data name="shippingAddresses/1/postcode" xsi:type="string">12345</data>
23+
<data name="shippingAddresses/2/country_id" xsi:type="string">Kenya</data>
24+
<data name="shippingAddresses/2/postcode" xsi:type="string">12345</data>
25+
<data name="shippingAddresses/2/city" xsi:type="string">Nairobi</data>
26+
<data name="shippingAddresses/3/country_id" xsi:type="string">Kenya</data>
27+
<data name="shippingAddresses/3/postcode" xsi:type="string">12345</data>
28+
<data name="shippingAddresses/3/city" xsi:type="string">Mombasa</data>
29+
<data name="shippingAddresses/4/country_id" xsi:type="string">Kenya</data>
30+
<data name="shippingAddresses/4/city" xsi:type="string">Mombasa</data>
31+
<data name="shippingAddresses/5/country_id" xsi:type="string">Kenya</data>
32+
<data name="shippingAddresses/5/city" xsi:type="string">Nairobi</data>
33+
<data name="isShippingAvailable" xsi:type="array">
34+
<item name="0" xsi:type="boolean">false</item>
35+
<item name="1" xsi:type="boolean">false</item>
36+
<item name="2" xsi:type="boolean">true</item>
37+
<item name="3" xsi:type="boolean">true</item>
38+
<item name="4" xsi:type="boolean">true</item>
39+
<item name="5" xsi:type="boolean">true</item>
40+
</data>
41+
<data name="configData" xsi:type="string">dhl_eu, shipping_origin_CH, config_base_currency_ch</data>
2342
</variation>
2443
</testCase>
2544
</config>

dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/CityBasedShippingRateTest.xml

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,38 @@
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
99
<testCase name="Magento\Shipping\Test\TestCase\CityBasedShippingRateTest" summary="Shipping rates can be reloaded based on changes in City field value">
10-
<variation name="CityBasedShippingRateFedexTestVariation1" summary="Shipping rates can be reloaded based on changes in City field value" ticketId="MAGETWO-56124">
10+
<variation name="CityBasedShippingRateFedexTestVariation" summary="Shipping rates can be reloaded based on changes in City field value for Fedex shipping method" ticketId="MAGETWO-56124">
1111
<data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data>
1212
<data name="products/0" xsi:type="string">catalogProductSimple::default</data>
13-
<data name="checkoutMethod" xsi:type="string">login</data>
13+
<data name="checkoutMethod" xsi:type="string">guest</data>
1414
<data name="customer/dataset" xsi:type="string">default</data>
15-
<data name="addresses/address/dataset" xsi:type="string">US_address_1</data>
16-
<data name="shippingAddresses/0/dataset" xsi:type="string">KE_Nairobi</data>
17-
<data name="shippingAddresses/1/dataset" xsi:type="string">KE_Mombasa</data>
18-
<data name="shipping/shipping_service" xsi:type="string">Federal Express</data>
19-
<data name="shipping/shipping_method" xsi:type="string">Ground</data>
20-
<data name="cart/data/shipping_method" xsi:type="string">Ground</data>
21-
<data name="payment/method" xsi:type="string">checkmo</data>
22-
<data name="configData" xsi:type="string">checkmo, fedex, shipping_origin_US_CA</data>
23-
</variation>-->
15+
<data name="shippingMethod/shipping_service" xsi:type="string">Federal Express</data>
16+
<data name="shippingMethod/shipping_method" xsi:type="string">International Economy</data>
17+
<data name="clearShippingAddress/postcode" xsi:type="string" />
18+
<data name="clearShippingAddress/city" xsi:type="string" />
19+
<data name="clearShippingAddress/country_id" xsi:type="string" />
20+
<data name="shippingAddresses/0/country_id" xsi:type="string">Kenya</data>
21+
<data name="shippingAddresses/1/country_id" xsi:type="string">Kenya</data>
22+
<data name="shippingAddresses/1/postcode" xsi:type="string">12345</data>
23+
<data name="shippingAddresses/2/country_id" xsi:type="string">Kenya</data>
24+
<data name="shippingAddresses/2/postcode" xsi:type="string">12345</data>
25+
<data name="shippingAddresses/2/city" xsi:type="string">Nairobi</data>
26+
<data name="shippingAddresses/3/country_id" xsi:type="string">Kenya</data>
27+
<data name="shippingAddresses/3/postcode" xsi:type="string">12345</data>
28+
<data name="shippingAddresses/3/city" xsi:type="string">Mombasa</data>
29+
<data name="shippingAddresses/4/country_id" xsi:type="string">Kenya</data>
30+
<data name="shippingAddresses/4/city" xsi:type="string">Mombasa</data>
31+
<data name="shippingAddresses/5/country_id" xsi:type="string">Kenya</data>
32+
<data name="shippingAddresses/5/city" xsi:type="string">Nairobi</data>
33+
<data name="isShippingAvailable" xsi:type="array">
34+
<item name="0" xsi:type="boolean">false</item>
35+
<item name="1" xsi:type="boolean">true</item>
36+
<item name="2" xsi:type="boolean">true</item>
37+
<item name="3" xsi:type="boolean">true</item>
38+
<item name="4" xsi:type="boolean">false</item>
39+
<item name="5" xsi:type="boolean">false</item>
40+
</data>
41+
<data name="configData" xsi:type="string">fedex, shipping_origin_US_CA</data>
42+
</variation>
2443
</testCase>
2544
</config>
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Shipping\Test\Constraint;
8+
9+
use Magento\Checkout\Test\Page\CheckoutOnepage;
10+
use Magento\Mtf\Constraint\AbstractConstraint;
11+
12+
/**
13+
* Check that Shipping rate changes due to City change.
14+
*/
15+
class AssertCityBasedShippingRateChanged extends AbstractConstraint
16+
{
17+
/**
18+
* Assert that Shipping rate changed on City change.
19+
*
20+
* @param CheckoutOnepage $checkoutOnepage
21+
* @param array $shippingMethod
22+
* @param bool $isShippingAvailable
23+
* @return void
24+
*/
25+
public function processAssert(CheckoutOnepage $checkoutOnepage, $shippingMethod, $isShippingAvailable)
26+
{
27+
if ($isShippingAvailable) {
28+
\PHPUnit_Framework_Assert::assertTrue(
29+
$checkoutOnepage->getShippingMethodBlock()->isLoaderAppeared(),
30+
'Shipping rate has not been changed.'
31+
);
32+
}
33+
$shippingAvaialability = $isShippingAvailable ? 'avaiable' : 'unavailable';
34+
\PHPUnit_Framework_Assert::assertEquals(
35+
$isShippingAvailable,
36+
$checkoutOnepage->getShippingMethodBlock()->isShippingMethodAvaiable($shippingMethod),
37+
"Shipping rates for {$shippingMethod['shipping_service']} should be $shippingAvaialability."
38+
);
39+
}
40+
41+
/**
42+
* Returns a string representation of successful assertion.
43+
*
44+
* @return string
45+
*/
46+
public function toString()
47+
{
48+
return "Shipping rate has been changed.";
49+
}
50+
}

dev/tests/functional/tests/app/Magento/Shipping/Test/TestCase/CityBasedShippingRateTest.php

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,35 +11,25 @@
1111
/**
1212
* Preconditions:
1313
* 1. Configure shipping method.
14-
* 2. Configure payment method.
15-
* 3. Create products.
16-
* 4. Create and setup customer.
17-
* 5. Create sales rule according to dataset.
14+
* 2. Create products.
15+
* 3. Create and setup customer.
1816
*
1917
* Steps:
2018
* 1. Go to Frontend.
2119
* 2. Add products to the cart.
22-
* 3. Apply discounts in shopping cart according to dataset.
23-
* 4. In 'Estimate Shipping and Tax' section specify destination using values from Test Data.
24-
* 5. Click the 'Get a Quote' button.
25-
* 6. In the section appeared select Shipping method, click the 'Update Total' button.
26-
* 7. Click the 'Proceed to Checkout' button.
27-
* 8. Select checkout method according to dataset.
28-
* 9. Fill billing information and select the 'Ship to this address' option.
29-
* 10. Select shipping method.
30-
* 11. Select payment method (use reward points and store credit if available).
31-
* 12. Verify order total on review step.
32-
* 13. Place order.
33-
* 14. Perform assertions.
20+
* 3. Click the 'Proceed to Checkout' button.
21+
* 4. Fill shipping information.
22+
* 5. Perform assertions.
3423
*
35-
* @group Order_Management
24+
* @group Shipping
3625
* @ZephyrId MAGETWO-56124
3726
*/
3827
class CityBasedShippingRateTest extends Scenario
3928
{
4029
/* tags */
4130
const MVP = 'yes';
4231
const TEST_TYPE = '3rd_party_test';
32+
const SEVERITY = 'S1';
4333
/* end tags */
4434

4535
/**

0 commit comments

Comments
 (0)