Skip to content

Commit 14392fd

Browse files
slavvkaAnna Bukatar
authored andcommitted
MAGETWO-46014: delayed error messages
1 parent 5bf3d94 commit 14392fd

File tree

2 files changed

+102
-68
lines changed

2 files changed

+102
-68
lines changed

dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
*/
1010
namespace Magento\TestFramework\TestCase;
1111

12+
use Magento\Framework\Stdlib\CookieManagerInterface;
13+
use Magento\Theme\Controller\Result\MessagePlugin;
14+
1215
/**
1316
* @SuppressWarnings(PHPMD.NumberOfChildren)
1417
*/
@@ -204,14 +207,48 @@ public function assertSessionMessages(
204207
} else {
205208
$messages = $messageManager->getMessages()->getItemsByType($messageType);
206209
}
210+
207211
$actualMessages = [];
208212
foreach ($messages as $message) {
209213
$actualMessages[] = $message->getText();
210214
}
215+
216+
$actualMessages = array_merge($actualMessages, $this->getCookieMessages($messageType));
217+
211218
$this->assertThat(
212219
$actualMessages,
213220
$constraint,
214221
'Session messages do not meet expectations' . var_export($actualMessages, true)
215222
);
216223
}
224+
225+
/**
226+
* Return messages stored in cookies by type
227+
*
228+
* @param string|null $messageType
229+
* @return array
230+
*/
231+
private function getCookieMessages($messageType = null) {
232+
/** @var $cookieManager CookieManagerInterface */
233+
$cookieManager = $this->_objectManager->get(CookieManagerInterface::class);
234+
try {
235+
$messages = \Zend_Json::decode(
236+
$cookieManager->getCookie(MessagePlugin::MESSAGES_COOKIES_NAME, \Zend_Json::encode([]))
237+
);
238+
if (!is_array($messages)) {
239+
$messages = [];
240+
}
241+
} catch (\Zend_Json_Exception $e) {
242+
$messages = [];
243+
}
244+
245+
$actualMessages = [];
246+
foreach ($messages as $message) {
247+
if ($messageType === null || $message['type'] == $messageType) {
248+
$actualMessages[] = $message['text'];
249+
}
250+
}
251+
252+
return $actualMessages;
253+
}
217254
}

dev/tests/integration/testsuite/Magento/Catalog/Controller/Product/CompareTest.php

Lines changed: 65 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -7,90 +7,86 @@
77
// @codingStandardsIgnoreFile
88

99
namespace Magento\Catalog\Controller\Product;
10+
use Magento\Framework\Message\MessageInterface;
1011

1112
/**
1213
* @magentoDataFixture Magento/Catalog/controllers/_files/products.php
1314
*/
1415
class CompareTest extends \Magento\TestFramework\TestCase\AbstractController
1516
{
17+
/**
18+
* @var \Magento\Catalog\Model\ProductRepository
19+
*/
20+
protected $productRepository;
21+
22+
protected function setUp()
23+
{
24+
parent::setUp();
25+
26+
/** @var $objectManager \Magento\TestFramework\ObjectManager */
27+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
28+
29+
$this->productRepository = $objectManager->create('Magento\Catalog\Model\ProductRepository');
30+
}
31+
1632
public function testAddAction()
1733
{
1834
$this->_requireVisitorWithNoProducts();
1935
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
2036
/** @var \Magento\Framework\Data\Form\FormKey $formKey */
2137
$formKey = $objectManager->get('Magento\Framework\Data\Form\FormKey');
22-
23-
$this->dispatch('catalog/product_compare/add/product/1/form_key/' . $formKey->getFormKey() . '?nocookie=1');
24-
25-
/** @var $messageManager \Magento\Framework\Message\Manager */
26-
$messageManager = $objectManager->get('Magento\Framework\Message\Manager');
27-
$this->assertInstanceOf(
28-
'Magento\Framework\Message\Success',
29-
$messageManager->getMessages()->getLastAddedMessage()
30-
);
31-
$this->assertContains(
32-
'Simple Product 1 Name',
33-
(string)$messageManager->getMessages()->getLastAddedMessage()->getText()
38+
$product = $this->productRepository->get('simple_product_1');
39+
$this->dispatch(
40+
sprintf(
41+
'catalog/product_compare/add/product/%s/form_key/%s?nocookie=1',
42+
$product->getEntityId(),
43+
$formKey->getFormKey()
44+
)
3445
);
3546

47+
$this->assertSessionMessages($this->contains('Simple Product 1 Name'), MessageInterface::TYPE_SUCCESS);
48+
3649
$this->assertRedirect();
3750

38-
$this->_assertCompareListEquals([1]);
51+
$this->_assertCompareListEquals([$product->getEntityId()]);
3952
}
4053

4154
public function testIndexActionAddProducts()
4255
{
4356
$this->_requireVisitorWithNoProducts();
44-
45-
$this->dispatch('catalog/product_compare/index/items/2');
57+
$product = $this->productRepository->get('simple_product_2');
58+
$this->dispatch('catalog/product_compare/index/items/' . $product->getEntityId());
4659

4760
$this->assertRedirect($this->equalTo('http://localhost/index.php/catalog/product_compare/index/'));
4861

49-
$this->_assertCompareListEquals([2]);
62+
$this->_assertCompareListEquals([$product->getEntityId()]);
5063
}
5164

5265
public function testRemoveAction()
5366
{
5467
$this->_requireVisitorWithTwoProducts();
68+
$product = $this->productRepository->get('simple_product_2');
69+
$this->dispatch('catalog/product_compare/remove/product/' . $product->getEntityId());
5570

56-
$this->dispatch('catalog/product_compare/remove/product/2');
57-
58-
/** @var $messageManager \Magento\Framework\Message\Manager */
59-
$messageManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
60-
->get('Magento\Framework\Message\Manager');
61-
$this->assertInstanceOf(
62-
'Magento\Framework\Message\Success',
63-
$messageManager->getMessages()->getLastAddedMessage()
64-
);
65-
$this->assertContains(
66-
'Simple Product 2 Name',
67-
(string)$messageManager->getMessages()->getLastAddedMessage()->getText()
68-
);
71+
$this->assertSessionMessages($this->contains('Simple Product 2 Name'), MessageInterface::TYPE_SUCCESS);
6972

7073
$this->assertRedirect();
71-
72-
$this->_assertCompareListEquals([1]);
74+
$restProduct = $this->productRepository->get('simple_product_1');
75+
$this->_assertCompareListEquals([$restProduct->getEntityId()]);
7376
}
7477

7578
public function testRemoveActionWithSession()
7679
{
7780
$this->_requireCustomerWithTwoProducts();
81+
$product = $this->productRepository->get('simple_product_1');
82+
$this->dispatch('catalog/product_compare/remove/product/' . $product->getEntityId());
83+
$secondProduct = $this->productRepository->get('simple_product_2');
7884

79-
$this->dispatch('catalog/product_compare/remove/product/1');
80-
81-
/** @var $messageManager \Magento\Framework\Message\Manager */
82-
$messageManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
83-
->get('Magento\Framework\Message\Manager');
84-
$this->assertInstanceOf(
85-
'Magento\Framework\Message\Success',
86-
$messageManager->getMessages()->getLastAddedMessage()
87-
);
88-
$this->assertContains('Simple Product 1 Name',
89-
(string)$messageManager->getMessages()->getLastAddedMessage()->getText());
85+
$this->assertSessionMessages($this->contains('Simple Product 1 Name'), MessageInterface::TYPE_SUCCESS);
9086

9187
$this->assertRedirect();
9288

93-
$this->_assertCompareListEquals([2]);
89+
$this->_assertCompareListEquals([$secondProduct->getEntityId()]);
9490
}
9591

9692
public function testIndexActionDisplay()
@@ -125,12 +121,9 @@ public function testClearAction()
125121

126122
$this->dispatch('catalog/product_compare/clear');
127123

128-
/** @var $messageManager \Magento\Framework\Message\Manager */
129-
$messageManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
130-
->get('Magento\Framework\Message\Manager');
131-
$this->assertInstanceOf(
132-
'Magento\Framework\Message\Success',
133-
$messageManager->getMessages()->getLastAddedMessage()
124+
$this->assertSessionMessages(
125+
$this->contains('You cleared the comparison list.'),
126+
MessageInterface::TYPE_SUCCESS
134127
);
135128

136129
$this->assertRedirect();
@@ -144,18 +137,16 @@ public function testClearAction()
144137
public function testRemoveActionProductNameXss()
145138
{
146139
$this->_prepareCompareListWithProductNameXss();
147-
$this->dispatch('catalog/product_compare/remove/product/1?nocookie=1');
148-
$messages = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
149-
'Magento\Framework\Message\Manager'
150-
)->getMessages()->getItems();
151-
$isProductNamePresent = false;
152-
foreach ($messages as $message) {
153-
if (strpos($message->getText(), '<script>alert("xss");</script>') !== false) {
154-
$isProductNamePresent = true;
155-
}
156-
$this->assertNotContains('<script>alert("xss");</script>', (string)$message->getText());
157-
}
158-
$this->assertTrue($isProductNamePresent, 'Product name was not found in session messages');
140+
$product = $this->productRepository->get('product-with-xss');
141+
$this->dispatch('catalog/product_compare/remove/product/' . $product->getEntityId() . '?nocookie=1');
142+
143+
$this->assertSessionMessages(
144+
$this->logicalNot($this->contains('<script>alert("xss");</script>'))
145+
);
146+
$this->assertSessionMessages(
147+
$this->contains('&lt;script&gt;alert(&quot;xss&quot;);&lt;/script&gt;'),
148+
MessageInterface::TYPE_SUCCESS
149+
);
159150
}
160151

161152
protected function _prepareCompareListWithProductNameXss()
@@ -171,7 +162,8 @@ protected function _prepareCompareListWithProductNameXss()
171162
$item = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
172163
'Magento\Catalog\Model\Product\Compare\Item'
173164
);
174-
$item->setVisitorId($visitor->getId())->setProductId(1)->save();
165+
$firstProductEntityId = $this->productRepository->get('product-with-xss')->getEntityId();
166+
$item->setVisitorId($visitor->getId())->setProductId($firstProductEntityId)->save();
175167
\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
176168
'Magento\Customer\Model\Visitor'
177169
)->load(
@@ -211,21 +203,23 @@ protected function _requireVisitorWithTwoProducts()
211203
$item = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
212204
'Magento\Catalog\Model\Product\Compare\Item'
213205
);
214-
$item->setVisitorId($visitor->getId())->setProductId(1)->save();
206+
$firstProductEntityId = $this->productRepository->get('simple_product_1')->getEntityId();
207+
$secondProductEntityId = $this->productRepository->get('simple_product_2')->getEntityId();
208+
$item->setVisitorId($visitor->getId())->setProductId($firstProductEntityId)->save();
215209

216210
/** @var $item \Magento\Catalog\Model\Product\Compare\Item */
217211
$item = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
218212
'Magento\Catalog\Model\Product\Compare\Item'
219213
);
220-
$item->setVisitorId($visitor->getId())->setProductId(2)->save();
214+
$item->setVisitorId($visitor->getId())->setProductId($secondProductEntityId)->save();
221215

222216
\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
223217
'Magento\Customer\Model\Visitor'
224218
)->load(
225219
$visitor->getId()
226220
);
227221

228-
$this->_assertCompareListEquals([1, 2]);
222+
$this->_assertCompareListEquals([$firstProductEntityId, $secondProductEntityId]);
229223
}
230224

231225
protected function _requireCustomerWithTwoProducts()
@@ -262,25 +256,28 @@ protected function _requireCustomerWithTwoProducts()
262256
->setLastVisitAt((new \DateTime())->format(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT))
263257
->save();
264258

259+
$firstProductEntityId = $this->productRepository->get('simple_product_1')->getEntityId();
260+
$secondProductEntityId = $this->productRepository->get('simple_product_2')->getEntityId();
261+
265262
/** @var $item \Magento\Catalog\Model\Product\Compare\Item */
266263
$item = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
267264
->create('Magento\Catalog\Model\Product\Compare\Item');
268265
$item->setVisitorId($visitor->getId())
269266
->setCustomerId(1)
270-
->setProductId(1)
267+
->setProductId($firstProductEntityId)
271268
->save();
272269

273270
/** @var $item \Magento\Catalog\Model\Product\Compare\Item */
274271
$item = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
275272
->create('Magento\Catalog\Model\Product\Compare\Item');
276273
$item->setVisitorId($visitor->getId())
277-
->setProductId(2)
274+
->setProductId($secondProductEntityId)
278275
->save();
279276

280277
\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Customer\Model\Visitor')
281278
->load($visitor->getId());
282279

283-
$this->_assertCompareListEquals([1, 2]);
280+
$this->_assertCompareListEquals([$firstProductEntityId, $secondProductEntityId]);
284281
}
285282

286283
/**

0 commit comments

Comments
 (0)