diff --git a/app/code/Magento/Customer/Model/Customer/Attribute/Backend/Password.php b/app/code/Magento/Customer/Model/Customer/Attribute/Backend/Password.php index 992c63cf893f5..59d183ee6510e 100644 --- a/app/code/Magento/Customer/Model/Customer/Attribute/Backend/Password.php +++ b/app/code/Magento/Customer/Model/Customer/Attribute/Backend/Password.php @@ -53,17 +53,8 @@ public function beforeSave($object) ); } - if ($this->string->substr( - $password, - 0, - 1 - ) == ' ' || $this->string->substr( - $password, - $length - 1, - 1 - ) == ' ' - ) { - throw new LocalizedException(__('The password can\'t begin or end with a space.')); + if (trim($password) != $password) { + throw new LocalizedException(__('The password can not begin or end with a space.')); } $object->setPasswordHash($object->hashPassword($password)); diff --git a/app/code/Magento/Customer/view/base/ui_component/customer_form.xml b/app/code/Magento/Customer/view/base/ui_component/customer_form.xml index 21762022d84e5..8bf281411f8b1 100644 --- a/app/code/Magento/Customer/view/base/ui_component/customer_form.xml +++ b/app/code/Magento/Customer/view/base/ui_component/customer_form.xml @@ -303,6 +303,9 @@ true + + ${ $.provider }:data.customer.firstname + @@ -325,6 +328,9 @@ true + + ${ $.provider }:data.customer.lastname + diff --git a/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js b/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js index 112f9406bdaf4..2ed8935a30cf8 100644 --- a/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js +++ b/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js @@ -32,7 +32,8 @@ define([ this._on(events); }, _updateWishlistData: function(event) { - var dataToAdd = {}; + var dataToAdd = {}, + isFileUploaded = false; if (event.handleObj.selector == this.options.qtyInfo) { this._updateAddToWishlistButton({}); event.stopPropagation(); @@ -40,15 +41,22 @@ define([ } var self = this; $(event.handleObj.selector).each(function(index, element){ - if ($(element).attr('type') == 'text') { + if ($(element).is('input[type=text]') + || $(element).is('input[type=checkbox]:checked') + || $(element).is('input[type=radio]:checked') + || $('#' + element.id + ' option:selected').length + || $(element).is('textarea') + ) { dataToAdd = $.extend({}, dataToAdd, self._getElementData(element)); return; } - if ($(element).is(':checked') || $(element).find(':checked').length) { - dataToAdd = $.extend({}, dataToAdd, self._getElementData(element)); + if ($(element).is('input[type=file]') && $(element).val()) { + isFileUploaded = true; } }); - + if (isFileUploaded) { + this.bindFormSubmit(); + } this._updateAddToWishlistButton(dataToAdd); event.stopPropagation(); }, @@ -90,7 +98,9 @@ define([ data[elementName + '[' + option + ']'] = option; }); } else { - data[elementName] = elementValue; + if (elementValue) { + data[elementName] = elementValue; + } } return data; }, @@ -99,6 +109,23 @@ define([ $.each(dataToRemove, function(key, value) { delete params.data[key]; }); + }, + bindFormSubmit: function() { + var self = this; + $('[data-action="add-to-wishlist"]').on('click', function(event) { + event.stopPropagation(); + event.preventDefault(); + + var element = $('input[type=file]' + self.options.customOptionsInfo), + params = $(event.currentTarget).data('post'), + form = $(element).closest('form'), + action = params.action; + if (params.data.uenc) { + action += 'uenc/' + params.data.uenc; + } + + $(form).attr('action', action).submit(); + }); } }); diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/GiftOptions.php b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/GiftOptions.php new file mode 100644 index 0000000000000..0cdd46da28ece --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/GiftOptions.php @@ -0,0 +1,66 @@ +getAllowGiftMessagesForOrder() === 'Yes') { + $this->_rootElement->find($this->allowGiftOptions)->click(); + $giftMessageForm = $this->blockFactory->create( + 'Magento\GiftMessage\Test\Block\Cart\GiftOptions\GiftMessageForm', + ['element' => $this->_rootElement->find($this->giftMessageOrderForm)] + ); + $giftMessageForm->fill($giftMessage); + $this->_rootElement->find($this->giftMessageOrderButton)->click(); + $this->waitForElementVisible($this->giftMessageSummary); + } + } +} diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Inline/GiftMessageForm.php b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/GiftOptions/GiftMessageForm.php similarity index 80% rename from dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Inline/GiftMessageForm.php rename to dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/GiftOptions/GiftMessageForm.php index 2c1a696e6929d..a8b0c26d71072 100644 --- a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Inline/GiftMessageForm.php +++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/GiftOptions/GiftMessageForm.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\GiftMessage\Test\Block\Message\Inline; +namespace Magento\GiftMessage\Test\Block\Cart\GiftOptions; use Magento\Mtf\Block\Form; diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Inline/GiftMessageForm.xml b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/GiftOptions/GiftMessageForm.xml similarity index 58% rename from dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Inline/GiftMessageForm.xml rename to dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/GiftOptions/GiftMessageForm.xml index 220c89ef22a04..43407c31535f5 100644 --- a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Inline/GiftMessageForm.xml +++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/GiftOptions/GiftMessageForm.xml @@ -8,13 +8,13 @@ - [id^='gift-message'][name$='[from]'] + [id='gift-message-whole-from'] - [id^='gift-message'][name$='[to]'] + [id='gift-message-whole-to'] - [id^='gift-message'][name$='[message]'] + [id='gift-message-whole-message'] diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/Item/GiftOptions.php b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/Item/GiftOptions.php new file mode 100644 index 0000000000000..78ce8fe619261 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/Item/GiftOptions.php @@ -0,0 +1,82 @@ +getAllowGiftOptionsForItems() === 'Yes') { + foreach ($products as $product) { + if ($product->getIsVirtual() !== 'Yes') { + $this->_rootElement->find( + sprintf($this->allowGiftOptions, $product->getName()), + Locator::SELECTOR_XPATH + )->click(); + $giftMessageForm = $this->blockFactory->create( + 'Magento\GiftMessage\Test\Block\Cart\GiftOptions\GiftMessageForm', + [ + 'element' => $this->_rootElement->find( + sprintf($this->giftMessageItemForm, $product->getName()), + Locator::SELECTOR_XPATH + ) + ] + ); + $giftMessageForm->fill($giftMessage); + $this->_rootElement->find($this->giftMessageItemButton)->click(); + $this->waitForElementVisible( + sprintf($this->giftMessageSummary, $product->getName()), + Locator::SELECTOR_XPATH + ); + } + } + } + } +} diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Inline.xml b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/Item/GiftOptions.xml similarity index 100% rename from dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Inline.xml rename to dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Cart/Item/GiftOptions.xml diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Inline.php b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Inline.php deleted file mode 100644 index 0c41872447b77..0000000000000 --- a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Inline.php +++ /dev/null @@ -1,87 +0,0 @@ - a"; - - /** - * Fill gift message form - * - * @param GiftMessage $giftMessage - * @param array $products - * @return void - */ - public function fillGiftMessage(GiftMessage $giftMessage, $products = []) - { - $this->fill($giftMessage); - - /** @var \Magento\GiftMessage\Test\Block\Message\Inline\GiftMessageForm $giftMessageForm */ - if ($giftMessage->getAllowGiftMessagesForOrder() === 'Yes') { - $this->_rootElement->find($this->giftMessageOrderButton)->click(); - $giftMessageForm = $this->blockFactory->create( - 'Magento\GiftMessage\Test\Block\Message\Inline\GiftMessageForm', - ['element' => $this->_rootElement->find($this->giftMessageOrderForm)] - ); - $giftMessageForm->fill($giftMessage); - } - - if ($giftMessage->getAllowGiftOptionsForItems() === 'Yes') { - foreach ($products as $product) { - $this->_rootElement->find( - sprintf($this->giftMessageItemButton, $product->getName()), - Locator::SELECTOR_XPATH - )->click(); - $giftMessageForm = $this->blockFactory->create( - 'Magento\GiftMessage\Test\Block\Message\Inline\GiftMessageForm', - [ - 'element' => $this->_rootElement->find( - sprintf($this->giftMessageItemForm, $product->getName()), - Locator::SELECTOR_XPATH - ) - ] - ); - $giftMessageForm->fill($giftMessage); - } - } - } -} diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Order/Items/View.php b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Order/Items/View.php index b3c29e2252085..c680b61b485b4 100644 --- a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Order/Items/View.php +++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Block/Message/Order/Items/View.php @@ -57,6 +57,9 @@ class View extends Block */ public function getGiftMessage($itemName) { + if (!$this->giftMessageButtonIsVisible($itemName)) { + return []; + } $message = []; $labelsToSkip = []; $this->clickGiftMessageButton($itemName); @@ -88,4 +91,18 @@ protected function clickGiftMessageButton($itemName) Locator::SELECTOR_XPATH )->click(); } + + /** + * Click "Gift Message" for special item. + * + * @param string $itemName + * @return bool + */ + protected function giftMessageButtonIsVisible($itemName) + { + return $this->_rootElement->find( + sprintf($this->giftMessageButtonSelector, $itemName), + Locator::SELECTOR_XPATH + )->isVisible(); + } } diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Constraint/AssertGiftMessageInFrontendOrderItems.php b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Constraint/AssertGiftMessageInFrontendOrderItems.php index a9a17c123c4c1..932115cdf37ab 100644 --- a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Constraint/AssertGiftMessageInFrontendOrderItems.php +++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Constraint/AssertGiftMessageInFrontendOrderItems.php @@ -62,6 +62,10 @@ public function processAssert( 'message' => $itemGiftMessage->getMessage(), ]; } + if ($product->getIsVirtual() == 'Yes') { + $expectedData = []; + } + \PHPUnit_Framework_Assert::assertEquals( $expectedData, $customerOrderView->getGiftMessageForItemBlock()->getGiftMessage($product->getName()), diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Page/CheckoutCart.xml b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Page/CheckoutCart.xml new file mode 100644 index 0000000000000..c911cebf77f4a --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Page/CheckoutCart.xml @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Page/CheckoutOnepage.xml b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Page/CheckoutOnepage.xml deleted file mode 100644 index 0a83605791e22..0000000000000 --- a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Page/CheckoutOnepage.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/TestStep/AddGiftMessageStep.php b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/TestStep/AddGiftMessageStep.php index 190de05c9eecd..35c7994df9e54 100644 --- a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/TestStep/AddGiftMessageStep.php +++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/TestStep/AddGiftMessageStep.php @@ -6,7 +6,7 @@ namespace Magento\GiftMessage\Test\TestStep; -use Magento\Checkout\Test\Page\CheckoutOnepage; +use Magento\Checkout\Test\Page\CheckoutCart; use Magento\GiftMessage\Test\Fixture\GiftMessage; use Magento\Mtf\TestStep\TestStepInterface; @@ -19,9 +19,9 @@ class AddGiftMessageStep implements TestStepInterface /** * Onepage checkout page * - * @var CheckoutOnepage + * @var CheckoutCart */ - protected $checkoutOnepage; + protected $checkoutCart; /** * Gift message fixture @@ -39,13 +39,13 @@ class AddGiftMessageStep implements TestStepInterface /** * @constructor - * @param CheckoutOnepage $checkoutOnepage + * @param CheckoutCart $checkoutCart * @param GiftMessage $giftMessage * @param array $products */ - public function __construct(CheckoutOnepage $checkoutOnepage, GiftMessage $giftMessage, array $products = []) + public function __construct(CheckoutCart $checkoutCart, GiftMessage $giftMessage, array $products = []) { - $this->checkoutOnepage = $checkoutOnepage; + $this->checkoutCart = $checkoutCart; $this->giftMessage = $giftMessage; $this->products = $products; } @@ -57,6 +57,8 @@ public function __construct(CheckoutOnepage $checkoutOnepage, GiftMessage $giftM */ public function run() { - $this->checkoutOnepage->getGiftMessagesBlock()->fillGiftMessage($this->giftMessage, $this->products); + $this->checkoutCart->open(); + $this->checkoutCart->getGiftMessagesItemBlock()->fillGiftMessageItem($this->giftMessage, $this->products); + $this->checkoutCart->getGiftMessagesOrderBlock()->fillGiftMessageOrder($this->giftMessage, $this->products); } } diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/etc/testcase.xml b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/etc/testcase.xml index de5469059a9b8..0dfdf20437f1c 100644 --- a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/etc/testcase.xml +++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/etc/testcase.xml @@ -13,10 +13,10 @@ - + + - - +