diff --git a/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_index.xml b/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_index.xml
index 7d0fc8c6ab2f2..da3abaada38c7 100644
--- a/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_index.xml
+++ b/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_index.xml
@@ -62,6 +62,9 @@
- Magento_Checkout/js/view/cart/shipping-estimation
- checkoutProvider
- 1
+ -
+
- block-summary.block-shipping.address-fieldsets
+
-
-
- uiComponent
diff --git a/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Edit/Form.php b/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Edit/Form.php
index 104c89f822765..24a48e097b867 100644
--- a/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Edit/Form.php
+++ b/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Edit/Form.php
@@ -121,7 +121,7 @@ protected function _prepareForm()
if (!$this->_storeManager->isSingleStoreMode()) {
$field = $fieldset->addField(
- 'store_id',
+ 'stores',
'multiselect',
[
'name' => 'stores[]',
@@ -137,7 +137,7 @@ protected function _prepareForm()
$field->setRenderer($renderer);
} else {
$fieldset->addField(
- 'store_id',
+ 'stores',
'hidden',
['name' => 'stores[]', 'value' => $this->_storeManager->getStore(true)->getId()]
);
diff --git a/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Grid.php b/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Grid.php
index 8e4694266cb22..a3249ca8b127e 100644
--- a/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Grid.php
+++ b/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Grid.php
@@ -78,10 +78,10 @@ protected function _prepareColumns()
if (!$this->_storeManager->isSingleStoreMode()) {
$this->addColumn(
- 'store_id',
+ 'stores',
[
'header' => __('Store View'),
- 'index' => 'store_id',
+ 'index' => 'stores',
'type' => 'store',
'store_all' => true,
'store_view' => true,
diff --git a/app/code/Magento/CheckoutAgreements/Model/CheckoutAgreementsRepository.php b/app/code/Magento/CheckoutAgreements/Model/CheckoutAgreementsRepository.php
index 01653546d38bc..6f920d9ee3374 100644
--- a/app/code/Magento/CheckoutAgreements/Model/CheckoutAgreementsRepository.php
+++ b/app/code/Magento/CheckoutAgreements/Model/CheckoutAgreementsRepository.php
@@ -124,7 +124,7 @@ public function save(\Magento\CheckoutAgreements\Api\Data\AgreementInterface $da
if ($storeId === null) {
$storeId = $this->storeManager->getStore()->getId();
}
- $data->setStores($storeId);
+ $data->setStores([$storeId]);
try {
$this->resourceModel->save($data);
} catch (\Exception $e) {
diff --git a/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php
index 1be4a14823274..bedd5838a84d0 100644
--- a/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php
+++ b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php
@@ -70,13 +70,16 @@ protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object)
*/
protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
{
- $condition = ['agreement_id = ?' => $object->getId()];
- $this->getConnection()->delete($this->getTable('checkout_agreement_store'), $condition);
+ $this->getConnection()->delete(
+ $this->getTable('checkout_agreement_store'),
+ ['agreement_id = ?' => $object->getId()]
+ );
- foreach ((array)$object->getData('stores') as $store) {
- $storeArray = [];
- $storeArray['agreement_id'] = $object->getId();
- $storeArray['store_id'] = $store;
+ foreach ((array)$object->getData('stores') as $storeId) {
+ $storeArray = [
+ 'agreement_id' => $object->getId(),
+ 'store_id' => $storeId
+ ];
$this->getConnection()->insert($this->getTable('checkout_agreement_store'), $storeArray);
}
@@ -96,8 +99,10 @@ protected function _afterLoad(\Magento\Framework\Model\AbstractModel $object)
->from($this->getTable('checkout_agreement_store'), ['store_id'])
->where('agreement_id = :agreement_id');
- if ($stores = $this->getConnection()->fetchCol($select, [':agreement_id' => $object->getId()])) {
- $object->setData('store_id', $stores);
+ $stores = $this->getConnection()->fetchCol($select, [':agreement_id' => $object->getId()]);
+
+ if ($stores) {
+ $object->setData('stores', $stores);
}
return parent::_afterLoad($object);
diff --git a/app/code/Magento/CheckoutAgreements/view/frontend/web/template/checkout/checkout-agreements.html b/app/code/Magento/CheckoutAgreements/view/frontend/web/template/checkout/checkout-agreements.html
index 3f0429aa0fca3..2305aa15db4a9 100644
--- a/app/code/Magento/CheckoutAgreements/view/frontend/web/template/checkout/checkout-agreements.html
+++ b/app/code/Magento/CheckoutAgreements/view/frontend/web/template/checkout/checkout-agreements.html
@@ -37,7 +37,6 @@
diff --git a/app/code/Magento/GiftMessage/Test/Unit/Model/GuestItemRepositoryTest.php b/app/code/Magento/GiftMessage/Test/Unit/Model/GuestItemRepositoryTest.php
index 51e4e7795fdb5..8d9f37ee941d3 100644
--- a/app/code/Magento/GiftMessage/Test/Unit/Model/GuestItemRepositoryTest.php
+++ b/app/code/Magento/GiftMessage/Test/Unit/Model/GuestItemRepositoryTest.php
@@ -82,7 +82,7 @@ protected function setUp()
);
$this->messageMock = $this->getMock('Magento\GiftMessage\Model\Message', [], [], '', false);
$this->quoteItemMock = $this->getMock(
- '\Magento\Qote\Model\Quote\Item',
+ '\Magento\Quote\Model\Quote\Item',
[
'getGiftMessageId',
'__wakeup'
diff --git a/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php b/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php
index 3c1204fd1bc83..69e55c905fc3d 100644
--- a/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php
+++ b/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php
@@ -82,7 +82,7 @@ protected function setUp()
);
$this->messageMock = $this->getMock('Magento\GiftMessage\Model\Message', [], [], '', false);
$this->quoteItemMock = $this->getMock(
- '\Magento\Qote\Model\Quote\Item',
+ '\Magento\Quote\Model\Quote\Item',
[
'getGiftMessageId',
'__wakeup'
diff --git a/app/code/Magento/GiftMessage/view/frontend/web/js/view/gift-message.js b/app/code/Magento/GiftMessage/view/frontend/web/js/view/gift-message.js
index fc4d6931be2e0..50bd8f91ed516 100644
--- a/app/code/Magento/GiftMessage/view/frontend/web/js/view/gift-message.js
+++ b/app/code/Magento/GiftMessage/view/frontend/web/js/view/gift-message.js
@@ -70,7 +70,7 @@ define([
hasActiveOptions: function() {
var regionData = this.getRegion('additionalOptions');
var options = regionData();
- for (var i in options) {
+ for (var i = 0; i < options.length; i++) {
if (options[i].isActive()) {
return true;
}
diff --git a/app/code/Magento/Quote/etc/webapi.xml b/app/code/Magento/Quote/etc/webapi.xml
index 8dac619706594..bb64e240f6d3b 100644
--- a/app/code/Magento/Quote/etc/webapi.xml
+++ b/app/code/Magento/Quote/etc/webapi.xml
@@ -104,6 +104,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml
index b41addebd2c62..545a21785129e 100644
--- a/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml
@@ -23,6 +23,7 @@
authorizenet
test_type:3rd_party_test
+
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.php
index f07aa25251d4c..e0fb19cb9e69b 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.php
@@ -45,6 +45,7 @@ class Shipping extends Form
/**
* Fields that are used in estimation shipping form.
+ * Indexes of this array should be numeric, they are used in compare() method.
*
* @var array
*/
@@ -102,6 +103,21 @@ public function fillEstimateShippingAndTax(Address $address)
$this->openEstimateShippingAndTax();
$data = $address->getData();
$mapping = $this->dataMapping(array_intersect_key($data, array_flip($this->estimationFields)));
+ // sort array according to $this->estimationFields elements order
+ uksort($mapping, function ($a, $b) {
+ $a = array_search($a, $this->estimationFields);
+ $b = array_search($b, $this->estimationFields);
+ switch (true) {
+ case false !== $a && false !== $b:
+ return $a - $b;
+ case false !== $a:
+ return -1;
+ case false !== $b:
+ return 1;
+ default:
+ return 0;
+ }
+ });
// Test environment may become unstable when form fields are filled in a default manner.
// Imitating behavior closer to the real user.
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar.php
index 04f4d4569f94a..388fc69bff50a 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar.php
@@ -29,6 +29,20 @@ class Sidebar extends Block
*/
protected $cartLink = 'a.showcart';
+ /**
+ * Minicart items quantity
+ *
+ * @var string
+ */
+ protected $productCounter = './/*[@class="counter-number"]';
+
+ /**
+ * Empty minicart message
+ *
+ * @var string
+ */
+ protected $emptyCartMessage = './/*[@id="minicart-content-wrapper"]//*[@class="subtitle empty"]';
+
/**
* Mini cart content selector.
*
@@ -101,6 +115,27 @@ function () use ($browser, $selector) {
);
}
+ /**
+ * Get empty minicart message
+ *
+ * @return string
+ */
+ public function getEmptyMessage()
+ {
+ $this->_rootElement->find($this->cartLink)->click();
+ return $this->_rootElement->find($this->emptyCartMessage, Locator::SELECTOR_XPATH)->getText();
+ }
+
+ /**
+ * Is minicart items quantity block visible
+ *
+ * @return bool
+ */
+ public function isItemsQtyVisible()
+ {
+ return $this->_rootElement->find($this->productCounter, Locator::SELECTOR_XPATH)->isVisible();
+ }
+
/**
* Get product quantity.
*
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertMinicartEmpty.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertMinicartEmpty.php
new file mode 100644
index 0000000000000..80de7ea365fa8
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertMinicartEmpty.php
@@ -0,0 +1,51 @@
+getCartSidebarBlock()->getEmptyMessage(),
+ 'Empty minicart message not found'
+ );
+
+ \PHPUnit_Framework_Assert::assertFalse(
+ $cmsIndex->getCartSidebarBlock()->isItemsQtyVisible(),
+ 'Minicart is not empty'
+ );
+ }
+
+ /**
+ * Returns a string representation of the object
+ *
+ * @return string
+ */
+ public function toString()
+ {
+ return 'Minicart is empty';
+ }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutTest.xml
index 0b86f927eef12..8ba8208a18aa8 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutTest.xml
@@ -20,6 +20,7 @@
Back, Send Email, Cancel, Hold, Invoice, Edit
checkmo_specificcountry_gb
+
@@ -40,6 +41,7 @@
Back, Send Email, Cancel, Hold, Ship, Invoice, Edit
banktransfer
+
@@ -59,6 +61,7 @@
Back, Send Email, Cancel, Hold, Ship, Invoice, Edit
banktransfer_specificcountry_gb
+
@@ -81,6 +84,7 @@
test_type:acceptance_test
checkmo
+
@@ -102,6 +106,7 @@
checkmo, freeshipping_minimum_order_amount_100
test_type:acceptance_test
+
diff --git a/dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/OnePageCheckoutTest.xml
index 5b8bedaf9b977..6c921d21a2e5c 100644
--- a/dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/OnePageCheckoutTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/OnePageCheckoutTest.xml
@@ -20,6 +20,7 @@
checkmo, dhl_eu, shipping_origin_CH, config_base_currency_ch
test_type:3rd_party_test
+
diff --git a/dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/OnePageCheckoutTest.xml
index 580de1cac6f91..92b074830b9f7 100644
--- a/dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/OnePageCheckoutTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/OnePageCheckoutTest.xml
@@ -20,6 +20,7 @@
checkmo, fedex, shipping_origin_US_CA
test_type:3rd_party_test
+
@@ -36,6 +37,7 @@
checkmo, fedex, shipping_origin_US_CA
test_type:3rd_party_test
+
diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/TestCase/CheckoutWithGiftMessagesTest.xml b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/TestCase/CheckoutWithGiftMessagesTest.xml
index d91f2b5a10140..337d4a9fbe2aa 100644
--- a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/TestCase/CheckoutWithGiftMessagesTest.xml
+++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/TestCase/CheckoutWithGiftMessagesTest.xml
@@ -22,6 +22,7 @@
text_gift_message
cashondelivery
+
@@ -40,6 +41,7 @@
default
cashondelivery
+
diff --git a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutFromProductPageTest.xml b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutFromProductPageTest.xml
index f54b7ec49b63a..83dfe5e439a23 100644
--- a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutFromProductPageTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutFromProductPageTest.xml
@@ -29,6 +29,7 @@
paypal_express, freeshipping
test_type:3rd_party_test
+
diff --git a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutFromShoppingCartTest.xml b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutFromShoppingCartTest.xml
index ff3026f814cbe..f47a4c9635a1d 100644
--- a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutFromShoppingCartTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutFromShoppingCartTest.xml
@@ -28,6 +28,7 @@
payflowpro
test_type:3rd_party_test
+
diff --git a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutOnePageTest.xml b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutOnePageTest.xml
index b879a84567a1c..8677d2de93c2b 100644
--- a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutOnePageTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ExpressCheckoutOnePageTest.xml
@@ -30,6 +30,7 @@
paypal_express
test_type:3rd_party_test
+
@@ -57,6 +58,7 @@
payflowlink
test_type:3rd_party_test
+
@@ -84,6 +86,7 @@
paypal_express
test_type:3rd_party_test
+
diff --git a/dev/tests/functional/tests/app/Magento/Ups/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Ups/Test/TestCase/OnePageCheckoutTest.xml
index d739d5bae2626..31a1bc9a90a1e 100644
--- a/dev/tests/functional/tests/app/Magento/Ups/Test/TestCase/OnePageCheckoutTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Ups/Test/TestCase/OnePageCheckoutTest.xml
@@ -19,6 +19,7 @@
checkmo, ups, shipping_origin_US_CA
test_type:3rd_party_test
+
@@ -35,6 +36,7 @@
checkmo, ups, shipping_origin_US_CA
test_type:3rd_party_test
+
diff --git a/dev/tests/functional/tests/app/Magento/Usps/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Usps/Test/TestCase/OnePageCheckoutTest.xml
index cf2ad50688a9e..e89cd863ae4aa 100644
--- a/dev/tests/functional/tests/app/Magento/Usps/Test/TestCase/OnePageCheckoutTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Usps/Test/TestCase/OnePageCheckoutTest.xml
@@ -19,6 +19,7 @@
checkmo, usps, shipping_origin_US_CA
test_type:3rd_party_test
+
@@ -35,6 +36,7 @@
checkmo, usps, shipping_origin_US_CA
test_type:3rd_party_test
+