From 982731a1e6db3644531a16994ed02a706b17d8ca Mon Sep 17 00:00:00 2001
From: Serhii Dzhepa <sdzhepa@magento.com>
Date: Tue, 8 Nov 2016 11:20:05 +0200
Subject: [PATCH] MAGETWO-59308: Design theme dropdown does not display all
 themes in Widgets

---
 .../Block/Adminhtml/Widget/WidgetGrid.php     |  4 ++
 ...tWithDifferentThemesArePresentedInGrid.php | 63 +++++++++++++++++++
 .../Magento/Widget/Test/Repository/Widget.xml | 14 +++++
 .../AbstractCreateWidgetEntityTest.php        | 12 +++-
 .../Test/TestCase/CreateWidgetEntityTest.php  | 18 ++++--
 .../Test/TestCase/CreateWidgetEntityTest.xml  | 11 ++++
 .../tests/app/Magento/Widget/Test/etc/di.xml  |  5 ++
 7 files changed, 120 insertions(+), 7 deletions(-)
 create mode 100644 dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetWithDifferentThemesArePresentedInGrid.php

diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/Block/Adminhtml/Widget/WidgetGrid.php b/dev/tests/functional/tests/app/Magento/Widget/Test/Block/Adminhtml/Widget/WidgetGrid.php
index 50a5657a478..3906631741b 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/Block/Adminhtml/Widget/WidgetGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/Block/Adminhtml/Widget/WidgetGrid.php
@@ -36,5 +36,9 @@ class WidgetGrid extends AbstractGrid
         'title' => [
             'selector' => 'input[name="title"]',
         ],
+        'theme_id' => [
+            'selector' => 'select[name="theme_id"]',
+            'input' => 'select',
+        ],
     ];
 }
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetWithDifferentThemesArePresentedInGrid.php b/dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetWithDifferentThemesArePresentedInGrid.php
new file mode 100644
index 00000000000..445357bd5f9
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetWithDifferentThemesArePresentedInGrid.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Widget\Test\Constraint;
+
+use Magento\Widget\Test\Fixture\Widget;
+use Magento\Widget\Test\Page\Adminhtml\WidgetInstanceIndex;
+use Magento\Mtf\Constraint\AbstractConstraint;
+
+/**
+ * Class AssertWidgetInGrid
+ */
+class AssertWidgetWithDifferentThemesArePresentedInGrid extends AbstractConstraint
+{
+    /**
+     * Assert widgets with different themes availability in widget grid
+     *
+     * @param Widget $widget
+     * @param WidgetInstanceIndex $widgetInstanceIndex
+     * @param array $additionalWidgets
+     * @return void
+     */
+    public function processAssert(
+        Widget $widget,
+        WidgetInstanceIndex $widgetInstanceIndex,
+        array $additionalWidgets = []
+    ) {
+        $additionalWidgets[] = $widget;
+        $expectedData = [];
+        $actualData = [];
+        $widgetInstanceIndex->open();
+        $widgetGrid = $widgetInstanceIndex->getWidgetGrid();
+
+        foreach ($additionalWidgets as $widget) {
+            $filter = [
+                'title' => $widget->getTitle(),
+                'theme_id' => $widget->getThemeId(),
+            ];
+            $widgetGrid->search($filter);
+            $expectedData[] = $filter;
+            $actualData[] = $widgetGrid->getRowsData(array_keys($filter))[0];
+        }
+
+        \PHPUnit_Framework_Assert::assertEquals(
+            $expectedData,
+            $actualData,
+            'Not all expected widgets are present in grid.'
+        );
+    }
+
+    /**
+     * Returns a string representation of the object
+     *
+     * @return string
+     */
+    public function toString()
+    {
+        return 'Widgets with different themes are present in widget grid.';
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/Repository/Widget.xml b/dev/tests/functional/tests/app/Magento/Widget/Test/Repository/Widget.xml
index dc39ed7fa12..81c6ea28f56 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/Repository/Widget.xml
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/Repository/Widget.xml
@@ -25,5 +25,19 @@
                 <item name="dataset" xsi:type="string">cmsPageLink</item>
             </field>
         </dataset>
+        <dataset name="simple_widget">
+            <field name="code" xsi:type="string">Recently Viewed Products</field>
+            <field name="title" xsi:type="string">Title_%isolation%</field>
+            <field name="theme_id" xsi:type="string">Magento Blank</field>
+            <field name="store_ids" xsi:type="array">
+                <item name="dataset" xsi:type="string">all_store_views</item>
+            </field>
+            <field name="widget_instance" xsi:type="array">
+                <item name="dataset" xsi:type="string">for_viewed_products</item>
+            </field>
+            <field name="parameters" xsi:type="array">
+                <item name="dataset" xsi:type="string">recentlyViewedProducts</item>
+            </field>
+        </dataset>
     </repository>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/AbstractCreateWidgetEntityTest.php b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/AbstractCreateWidgetEntityTest.php
index 235361aee8b..c5f920a6c89 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/AbstractCreateWidgetEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/AbstractCreateWidgetEntityTest.php
@@ -6,6 +6,7 @@
 
 namespace Magento\Widget\Test\TestCase;
 
+use Magento\Mtf\Fixture\FixtureFactory;
 use Magento\Widget\Test\Page\Adminhtml\WidgetInstanceEdit;
 use Magento\Widget\Test\Page\Adminhtml\WidgetInstanceIndex;
 use Magento\Widget\Test\Page\Adminhtml\WidgetInstanceNew;
@@ -53,6 +54,11 @@ abstract class AbstractCreateWidgetEntityTest extends Injectable
      */
     protected $cache;
 
+    /**
+     * @var FixtureFactory
+     */
+    protected $fixtureFactory;
+
     /**
      * Injection data.
      *
@@ -61,20 +67,22 @@ abstract class AbstractCreateWidgetEntityTest extends Injectable
      * @param WidgetInstanceEdit $widgetInstanceEdit
      * @param CmsIndex $cmsIndex
      * @param Cache $cache
-     * @return void
+     * @param FixtureFactory $fixtureFactory
      */
     public function __inject(
         WidgetInstanceIndex $widgetInstanceIndex,
         WidgetInstanceNew $widgetInstanceNew,
         WidgetInstanceEdit $widgetInstanceEdit,
         CmsIndex $cmsIndex,
-        Cache $cache
+        Cache $cache,
+        FixtureFactory $fixtureFactory
     ) {
         $this->widgetInstanceIndex = $widgetInstanceIndex;
         $this->widgetInstanceNew = $widgetInstanceNew;
         $this->widgetInstanceEdit = $widgetInstanceEdit;
         $this->cmsIndex = $cmsIndex;
         $this->cache = $cache;
+        $this->fixtureFactory = $fixtureFactory;
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.php b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.php
index 6358ac8821f..a61bc7f060a 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.php
@@ -25,8 +25,7 @@ class CreateWidgetEntityTest extends AbstractCreateWidgetEntityTest
 {
     /* tags */
     const MVP = 'yes';
-    const TEST_TYPE = 'extended_acceptance_test';
-    const SEVERITY = 'S1';
+    const SEVERITY = 'S3';
     /* end tags */
 
     /**
@@ -40,20 +39,29 @@ class CreateWidgetEntityTest extends AbstractCreateWidgetEntityTest
      * Create for New Widget.
      *
      * @param Widget $widget
+     * @param array $additionalWidgets
      * @param array $caches [optional]
-     * @return void
+     * @return array
      */
-    public function test(Widget $widget, array $caches = [])
+    public function test(Widget $widget, array $additionalWidgets = [], array $caches = [])
     {
         // Preconditions
         $this->caches = $caches;
         $this->adjustCacheSettings();
-        
+
         // Steps
         $this->widgetInstanceIndex->open();
         $this->widgetInstanceIndex->getPageActionsBlock()->addNew();
         $this->widgetInstanceNew->getWidgetForm()->fill($widget);
         $this->widgetInstanceEdit->getPageActionsBlock()->save();
+
+        foreach ($additionalWidgets as $key => $additionalWidget) {
+            $additionalWidget = $this->fixtureFactory->createByCode('widget', ['dataset' => $additionalWidget]);
+            $additionalWidget->persist();
+            $additionalWidgets[$key] = $additionalWidget;
+        }
+
+        return ['additionalWidgets' => $additionalWidgets];
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.xml b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.xml
index 225759df91f..15610625f31 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.xml
@@ -118,5 +118,16 @@
             <constraint name="Magento\Widget\Test\Constraint\AssertWidgetSuccessSaveMessage" />
             <constraint name="Magento\Widget\Test\Constraint\AssertWidgetCatalogNewProductsList" />
         </variation>
+        <variation name="CreateWidgetEntityTestWithDifferentThemes">
+            <data name="tag" xsi:type="string">severity:S3</data>
+            <data name="widget/data/code" xsi:type="string">Recently Viewed Products</data>
+            <data name="widget/data/theme_id" xsi:type="string">Magento Blank</data>
+            <data name="widget/data/title" xsi:type="string">Title_%isolation%</data>
+            <data name="widget/data/store_ids/dataset" xsi:type="string">all_store_views</data>
+            <data name="widget/data/widget_instance/dataset" xsi:type="string">for_viewed_products</data>
+            <data name="widget/data/parameters/dataset" xsi:type="string">recentlyViewedProducts</data>
+            <data name="additionalWidgets/0" xsi:type="string">simple_widget</data>
+            <constraint name="Magento\Widget\Test\Constraint\AssertWidgetWithDifferentThemesArePresentedInGrid" />
+        </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/etc/di.xml b/dev/tests/functional/tests/app/Magento/Widget/Test/etc/di.xml
index 122a9659cf2..6fba66a3db3 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/etc/di.xml
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/etc/di.xml
@@ -66,4 +66,9 @@
             <argument name="severity" xsi:type="string">S1</argument>
         </arguments>
     </type>
+    <type name="Magento\Widget\Test\Constraint\AssertWidgetWithDifferentThemesArePresentedInGrid">
+        <arguments>
+            <argument name="severity" xsi:type="string">S3</argument>
+        </arguments>
+    </type>
 </config>
-- 
GitLab