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 @@
-
+
+
-
-
+