Skip to content

Commit 7f76633

Browse files
author
lestare
committed
MAGETWO-61564: [Backport] - [Github] Can't modify product link widget conditions #6616 - for 2.0
1 parent 5202297 commit 7f76633

File tree

10 files changed

+265
-7
lines changed

10 files changed

+265
-7
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Mtf\Client\Element;
7+
8+
/**
9+
* @inheritdoc
10+
*/
11+
class WidgetconditionsElement extends ConditionsElement
12+
{
13+
/**
14+
* Rule param input selector.
15+
*
16+
* @var string
17+
*/
18+
protected $ruleParamInput = '[name^="parameters"]';
19+
}

dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Edit/Tab/Content.php

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@ public function getWidgetBlock()
124124
*/
125125
public function fillFormTab(array $fields, SimpleElement $element = null)
126126
{
127-
$element->find($this->content)->setValue($fields['content']['value']['content']);
127+
if (isset($fields['content']['value']['content'])) {
128+
$element->find($this->content)->setValue($fields['content']['value']['content']);
129+
}
128130
if (isset($fields['content_heading']['value'])) {
129131
$element->find($this->contentHeading)->setValue($fields['content_heading']['value']);
130132
}
@@ -158,4 +160,17 @@ public function getDataFormTab($fields = null, SimpleElement $element = null)
158160
'content_heading' => ''
159161
];
160162
}
163+
164+
/**
165+
* @return string
166+
*/
167+
public function getContent()
168+
{
169+
$contentElement = $this->_rootElement->find($this->content);
170+
$content = '';
171+
if ($contentElement->isVisible()) {
172+
$content = $contentElement->getText() ? : $contentElement->getValue();
173+
}
174+
return $content;
175+
}
161176
}

dev/tests/functional/tests/app/Magento/Cms/Test/Block/Page.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ class Page extends Block
4242
*/
4343
protected $textSelector = "//div[contains(.,'%s')]";
4444

45+
/**
46+
* Cms page products grid class.
47+
*
48+
* @var string
49+
*/
50+
protected $productsGrid = ".products-grid";
51+
4552
/**
4653
* Widgets selectors.
4754
*
@@ -77,6 +84,20 @@ public function getPageTitle()
7784
return $this->_rootElement->find($this->cmsPageTitle)->getText();
7885
}
7986

87+
/**
88+
* Get products-grid content text.
89+
*
90+
* @return string
91+
*/
92+
public function getProductsGridContent()
93+
{
94+
$content = '';
95+
if ($this->_rootElement->find($this->productsGrid)->isVisible()) {
96+
$content = $this->_rootElement->find($this->productsGrid)->getText();
97+
}
98+
return $content;
99+
}
100+
80101
/**
81102
* Wait for text is visible in the block.
82103
*
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Cms\Test\Constraint;
7+
8+
use Magento\Cms\Test\Fixture\CmsPage;
9+
use Magento\Cms\Test\Page\Adminhtml\CmsPageIndex;
10+
use Magento\Cms\Test\Page\CmsIndex as FrontCmsIndex;
11+
use Magento\Cms\Test\Page\CmsPage as FrontCmsPage;
12+
use Magento\Mtf\Client\BrowserInterface;
13+
use Magento\Mtf\Constraint\AbstractConstraint;
14+
15+
/**
16+
* Assert that content of created cms page displays product list.
17+
*/
18+
class AssertCmsPageProductListPrevew extends AbstractConstraint
19+
{
20+
/* tags */
21+
const SEVERITY = 'low';
22+
/* end tags */
23+
24+
/**
25+
* Assert that content of created cms page display product list.
26+
*
27+
* @param CmsPageIndex $cmsIndex
28+
* @param FrontCmsIndex $frontCmsIndex
29+
* @param FrontCmsPage $frontCmsPage
30+
* @param CmsPage $cms
31+
* @param BrowserInterface $browser
32+
* @return void
33+
*/
34+
public function processAssert(
35+
CmsPageIndex $cmsIndex,
36+
FrontCmsIndex $frontCmsIndex,
37+
FrontCmsPage $frontCmsPage,
38+
CmsPage $cms,
39+
BrowserInterface $browser
40+
) {
41+
$cmsIndex->open();
42+
$filter = ['title' => $cms->getTitle()];
43+
$cmsIndex->getCmsPageGridBlock()->searchAndPreview($filter);
44+
$browser->selectWindow();
45+
46+
\PHPUnit_Framework_Assert::assertNotEmpty(
47+
$frontCmsPage->getCmsPageBlock()->getProductsGridContent(),
48+
'No Products in product list.'
49+
);
50+
51+
if ($cms->getContentHeading()) {
52+
\PHPUnit_Framework_Assert::assertEquals(
53+
$cms->getContentHeading(),
54+
$frontCmsIndex->getTitleBlock()->getTitle(),
55+
'Wrong title is displayed.'
56+
);
57+
}
58+
}
59+
60+
/**
61+
* Returns a string representation of the object.
62+
*
63+
* @return string
64+
*/
65+
public function toString()
66+
{
67+
return 'CMS Page content has products.';
68+
}
69+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Cms\Test\Constraint;
7+
8+
use Magento\Cms\Test\Fixture\CmsPage;
9+
use Magento\Cms\Test\Page\Adminhtml\CmsPageIndex;
10+
use Magento\Cms\Test\Page\Adminhtml\CmsPageNew;
11+
use Magento\Mtf\Constraint\AbstractAssertForm;
12+
13+
class AssertCmsPageWidgetConditions extends AbstractAssertForm
14+
{
15+
16+
/**
17+
* Assert that widget conditions are properly saved on CMS page.
18+
*
19+
* @param CmsPage $cms
20+
* @param CmsPageIndex $cmsIndex
21+
* @param CmsPageNew $cmsPageNew
22+
* @param string $conditions
23+
* @return void
24+
*/
25+
public function processAssert(
26+
CmsPage $cms,
27+
CmsPageIndex $cmsIndex,
28+
CmsPageNew $cmsPageNew,
29+
$conditions
30+
) {
31+
$cmsIndex->open();
32+
$filter = ['title' => $cms->getTitle()];
33+
$cmsIndex->getCmsPageGridBlock()->searchAndOpen($filter);
34+
35+
$cmsPageNew->getPageForm()->openTab('content');
36+
$content = $cmsPageNew->getPageForm()->getTab('content')->getContent();
37+
\PHPUnit_Framework_Assert::assertEquals($content, $conditions);
38+
}
39+
40+
/**
41+
* Widget conditions on CMS Page are saved.
42+
*
43+
* @return string
44+
*/
45+
public function toString()
46+
{
47+
return 'Widget conditions are saved.';
48+
}
49+
}

dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage/Content.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,15 @@ protected function prepareWidgetData(array $widgets)
9494
if ($widget['widget_type'] == 'Catalog New Products List') {
9595
$this->createProduct();
9696
}
97+
if ($widget['widget_type'] == 'Catalog Products List') {
98+
$data['widget']['dataset'][$key]['widget_type'] = $widget['widget_type'];
99+
$data['widget']['dataset'][$key]['title'] = $widget['title'];
100+
$data['widget']['dataset'][$key]['template'] = $widget['template'];
101+
$data['widget']['dataset'][$key]['serialized_conditions'] = $this->prepareConditions(
102+
$widget['conditions'],
103+
$widget['entities']
104+
);
105+
}
97106
if ($widget['widget_type'] == 'CMS Static Block') {
98107
$block = $this->createBlock($widget);
99108
$blockIdentifier = $block->getIdentifier();
@@ -158,4 +167,28 @@ protected function createBlock($widget)
158167

159168
return $block;
160169
}
170+
171+
/**
172+
* @param array $conditions
173+
* @param array $entities
174+
* @return string
175+
*/
176+
private function prepareConditions(array $conditions, array $entities)
177+
{
178+
$products = [];
179+
$serializedCondition = '';
180+
foreach ($entities as $entity) {
181+
$params = explode('::', $entity);
182+
/** @var CatalogProductSimple $product */
183+
$product = $this->fixtureFactory->createByCode($params[0], ['dataset' => $params[1]]);
184+
$product->persist();
185+
array_push($products, $product);
186+
}
187+
foreach ($conditions as $key => $condition) {
188+
$product = array_shift($products);
189+
$value = $product->getData($key);
190+
$serializedCondition .= str_replace("%{$key}%", $value, $condition);
191+
}
192+
return $serializedCondition;
193+
}
161194
}

dev/tests/functional/tests/app/Magento/Cms/Test/Repository/CmsPage/Content.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,20 @@
1919
</field>
2020
</dataset>
2121

22+
<dataset name="product_list_with_attribute_set_condition">
23+
<field name="widget_1" xsi:type="array">
24+
<item name="widget_type" xsi:type="string">Catalog Products List</item>
25+
<item name="title" xsi:type="string">Catalog Products List %isolation%</item>
26+
<item name="template" xsi:type="string">Products Grid Template</item>
27+
<item name="entities" xsi:type="array">
28+
<item name="0" xsi:type="string">catalogProductSimple::default</item>
29+
</item>
30+
<item name="conditions" xsi:type="array">
31+
<item name="attribute_set_id" xsi:type="string">[Attribute Set|is|%attribute_set_id%]</item>
32+
</item>
33+
</field>
34+
</dataset>
35+
2236
<dataset name="all_widgets">
2337
<field name="widget_1" xsi:type="array">
2438
<item name="widget_type" xsi:type="string">CMS Page Link</item>

dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/CreateCmsPageEntityTest.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Magento\Cms\Test\Page\Adminhtml\CmsPageIndex;
1111
use Magento\Cms\Test\Page\Adminhtml\CmsPageNew;
1212
use Magento\Mtf\Fixture\FixtureFactory;
13+
use Magento\Mtf\Fixture\FixtureInterface;
1314
use Magento\Mtf\TestCase\Injectable;
1415

1516
/**
@@ -84,8 +85,28 @@ public function test(array $data, $fixtureType)
8485
//TODO: remove cms page new refresh after resolve issue with static js files publication (MAGETWO-37898)
8586
$this->cmsPageNew->open();
8687
$this->cmsPageNew->getPageForm()->fill($cms);
88+
$conditions = $this->getConditions($cms);
8789
$this->cmsPageNew->getPageMainActions()->save();
8890

89-
return ['cms' => $cms];
91+
return ['cms' => $cms, 'conditions' => $conditions];
92+
}
93+
94+
/**
95+
* @param FixtureInterface $cms
96+
* @return string
97+
*/
98+
private function getConditions($cms)
99+
{
100+
$conditions = '';
101+
if (isset($cms->getData('content')['widget']['dataset'])) {
102+
foreach ($cms->getData('content')['widget']['dataset'] as $dataset) {
103+
if (isset($dataset['serialized_conditions'])) {
104+
$this->cmsPageNew->getPageForm()->openTab('content');
105+
$conditions = $this->cmsPageNew->getPageForm()->getTab('content')->getContent();
106+
break;
107+
}
108+
}
109+
}
110+
return $conditions;
90111
}
91112
}

dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/CreateCmsPageEntityTest.xml

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageSuccessSaveMessage" />
2828
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageForm" />
2929
</variation>
30-
<variation name="CreateCmsPageEntityTestVariation3">
30+
<variation name="CreateCmsPageEntityTestVariation3">
3131
<data name="description" xsi:type="string">Create page with widget and system variable</data>
3232
<data name="fixtureType" xsi:type="string">cmsPage</data>
3333
<data name="data/title" xsi:type="string">NewCmsPage%isolation%</data>
@@ -41,16 +41,28 @@
4141
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPagePreview" />
4242
</variation>
4343
<variation name="CreateCmsPageEntityTestVariation4">
44-
<data name="description" xsi:type="string">Create disabled page</data>
44+
<data name="description" xsi:type="string">Create disabled page</data>
45+
<data name="fixtureType" xsi:type="string">cmsPage</data>
46+
<data name="data/title" xsi:type="string">NewCmsPage%isolation%</data>
47+
<data name="data/store_id" xsi:type="string">Main Website/Main Website Store/Default Store View</data>
48+
<data name="data/is_active" xsi:type="string">Disabled</data>
49+
<data name="data/content/content" xsi:type="string">cms_page_text_content%isolation%</data>
50+
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageSuccessSaveMessage" />
51+
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageForm" />
52+
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageInGrid" />
53+
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageDisabledOnFrontend" />
54+
</variation>
55+
<variation name="CreateCmsPageEntityTestVariation5">
56+
<data name="description" xsi:type="string">Create page with widget condition</data>
4557
<data name="fixtureType" xsi:type="string">cmsPage</data>
4658
<data name="data/title" xsi:type="string">NewCmsPage%isolation%</data>
4759
<data name="data/store_id" xsi:type="string">Main Website/Main Website Store/Default Store View</data>
48-
<data name="data/is_active" xsi:type="string">Disabled</data>
49-
<data name="data/content/content" xsi:type="string">cms_page_text_content%isolation%</data>
60+
<data name="data/content/widget/dataset" xsi:type="string">product_list_with_attribute_set_condition</data>
5061
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageSuccessSaveMessage" />
5162
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageForm" />
63+
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageWidgetConditions" />
5264
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageInGrid" />
53-
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageDisabledOnFrontend" />
65+
<constraint name="Magento\Cms\Test\Constraint\AssertCmsPageProductListPrevew" />
5466
</variation>
5567
</testCase>
5668
</config>

dev/tests/functional/tests/app/Magento/Widget/Test/Block/Adminhtml/WidgetForm.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,10 @@
3030
<products_count />
3131
<cache_lifetime />
3232
<page_size />
33+
<serialized_conditions>
34+
<selector>.rule-tree</selector>
35+
<strategy>css selector</strategy>
36+
<input>widgetconditions</input>
37+
</serialized_conditions>
3338
</fields>
3439
</mapping>

0 commit comments

Comments
 (0)