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 +