diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Rss/Grid/Link.php b/app/code/Magento/Catalog/Block/Adminhtml/Rss/Grid/Link.php index c630e455bd4c3..aede90bc9eabb 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Rss/Grid/Link.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Rss/Grid/Link.php @@ -7,7 +7,6 @@ /** * Class Link - * @package Magento\Review\Block\Adminhtml\Grid\Rss */ class Link extends \Magento\Framework\View\Element\Template { diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Template/Filter/FactoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Template/Filter/FactoryTest.php index ec50e2fcbc476..bc15652c83252 100755 --- a/app/code/Magento/Catalog/Test/Unit/Model/Template/Filter/FactoryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Template/Filter/FactoryTest.php @@ -13,7 +13,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase protected $_objectManagerMock; /** - * @var \Magento\Newsletter\Model\Template\Filter\Factory + * @var \Magento\Catalog\Model\Template\Filter\Factory */ protected $_factory; diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php index 8f5bdc39025cb..c3f4b5dcc4d01 100644 --- a/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php +++ b/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php @@ -13,6 +13,7 @@ /** * Interface StockCollectionInterface + * @api */ interface StockCollectionInterface extends SearchResultsInterface { diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php index 47bd9b85cc321..8908ea0ee96af 100644 --- a/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php +++ b/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php @@ -9,6 +9,7 @@ /** * Interface Stock + * @api */ interface StockInterface extends ExtensibleDataInterface { diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php index fad64f575cc00..bd649dc6f41c3 100644 --- a/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php +++ b/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php @@ -13,7 +13,7 @@ /** * Interface StockItemCollectionInterface - * @package Magento\CatalogInventory\Api\Data + * @api */ interface StockItemCollectionInterface extends SearchResultsInterface { diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php index 0a620ce1562d5..0c4216fd46a99 100644 --- a/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php +++ b/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php @@ -9,6 +9,7 @@ /** * Interface StockItem + * @api */ interface StockItemInterface extends ExtensibleDataInterface { diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php index c20852455ee36..6f53ba8238eb0 100644 --- a/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php +++ b/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php @@ -9,6 +9,7 @@ /** * Stock Status collection interface + * @api */ interface StockStatusCollectionInterface extends SearchResultsInterface { diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php index 3c90ea451776a..f4996ac62ec6b 100644 --- a/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php +++ b/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php @@ -9,6 +9,7 @@ /** * Interface StockStatusInterface + * @api */ interface StockStatusInterface extends ExtensibleDataInterface { diff --git a/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php b/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php index 5052ea004b256..7b4179c7a7188 100644 --- a/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php +++ b/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php @@ -7,6 +7,7 @@ /** * Interface StockConfigurationInterface + * @api */ interface StockConfigurationInterface { diff --git a/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php b/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php index 537db0ce5aff1..15e299f8591c7 100644 --- a/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php +++ b/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php @@ -7,6 +7,7 @@ /** * Interface StockCriteriaInterface + * @api */ interface StockCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface { diff --git a/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php b/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php index 6edba0a23b537..f57936402f0c9 100644 --- a/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php +++ b/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php @@ -7,6 +7,7 @@ /** * Interface StockIndexInterface + * @api */ interface StockIndexInterface { diff --git a/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php b/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php index 878aa26d3c2f7..df76cc37f3153 100644 --- a/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php +++ b/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php @@ -7,6 +7,7 @@ /** * Interface StockItemCriteriaInterface + * @api */ interface StockItemCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface { diff --git a/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php b/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php index 17a2287692281..97804d7043750 100644 --- a/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php +++ b/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php @@ -7,6 +7,7 @@ /** * Interface StockItemRepository + * @api */ interface StockItemRepositoryInterface { diff --git a/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php b/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php index 748ed9b39cfc7..b4cd1008bf5ce 100644 --- a/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php +++ b/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php @@ -7,6 +7,7 @@ /** * Interface StockManagementInterface + * @api */ interface StockManagementInterface { diff --git a/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php b/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php index 27f90e740f961..95c848f1865b7 100644 --- a/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php +++ b/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php @@ -7,6 +7,7 @@ /** * Interface StockRegistryInterface + * @api */ interface StockRegistryInterface { diff --git a/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php b/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php index 06f5d2f4e9cf7..28b839c6fedb6 100644 --- a/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php +++ b/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php @@ -7,6 +7,7 @@ /** * Interface StockRepositoryInterface + * @api */ interface StockRepositoryInterface { diff --git a/app/code/Magento/CatalogInventory/Api/StockStateInterface.php b/app/code/Magento/CatalogInventory/Api/StockStateInterface.php index 490f92644df78..140ccee031bfa 100644 --- a/app/code/Magento/CatalogInventory/Api/StockStateInterface.php +++ b/app/code/Magento/CatalogInventory/Api/StockStateInterface.php @@ -7,6 +7,7 @@ /** * Interface StockStateInterface + * @api */ interface StockStateInterface { diff --git a/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php b/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php index af80ddd5c5caf..7b5dfafa3116a 100644 --- a/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php +++ b/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php @@ -7,6 +7,7 @@ /** * Interface StockStatusCriteriaInterface + * @api */ interface StockStatusCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface { diff --git a/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php b/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php index b531c815ceb55..7a8ac82565413 100644 --- a/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php +++ b/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php @@ -7,6 +7,7 @@ /** * Interface StockStatusRepositoryInterface + * @api */ interface StockStatusRepositoryInterface { diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Indexer/Stock/StockInterface.php b/app/code/Magento/CatalogInventory/Model/Resource/Indexer/Stock/StockInterface.php index bbb3df89c8688..860c889637094 100644 --- a/app/code/Magento/CatalogInventory/Model/Resource/Indexer/Stock/StockInterface.php +++ b/app/code/Magento/CatalogInventory/Model/Resource/Indexer/Stock/StockInterface.php @@ -7,8 +7,7 @@ /** * CatalogInventory Stock Indexer Interface - * - * @author Magento Core Team + * @api */ interface StockInterface { diff --git a/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php b/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php new file mode 100644 index 0000000000000..3e1c5cd675948 --- /dev/null +++ b/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php @@ -0,0 +1,59 @@ +getMockBuilder('Magento\Framework\UrlInterface') + ->disableOriginalConstructor() + ->getMock(); + $inputUrl = 'href/url/for/edit/action'; + + /** @var \Magento\Cms\Ui\Component\Listing\Column\PageActions $model */ + $model = $objectManager->getObject( + 'Magento\Cms\Ui\Component\Listing\Column\PageActions', + [ + 'urlBuilder' => $urlBuilderMock, + 'url' => $inputUrl + ] + ); + + // Define test input and expectations + $items = [['page_id' => 1]]; + $fullUrl = 'full-url-including-base.com/href/url/for/edit/action'; + $name = 'item_name'; + + $editArray = [ + 'href' => $fullUrl, + 'label' => __('Edit'), + 'hidden' => true + ]; + $expectedItems = [ + [ + 'page_id' => 1, + $name => ['edit' => $editArray] + ] + ]; + + // Configure mocks and object data + $urlBuilderMock->expects($this->once()) + ->method('getUrl') + ->with($inputUrl, ['page_id' => 1]) + ->willReturn($fullUrl); + + $model->setName($name); + // Run test + $this->assertEquals( + $expectedItems, + $model->prepareItems($items) + ); + } +} diff --git a/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php b/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php index 2a8140c0923cf..9bfd30a04669e 100644 --- a/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php +++ b/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php @@ -16,31 +16,27 @@ */ class PageActions extends Column { - /** - * Url path - */ - const URL_PATH = 'cms/page/edit'; + /** Url path */ + const CMS_URL_PATH = 'cms/page/edit'; - /** - * @var UrlBuilder - */ + /** @var UrlBuilder */ protected $actionUrlBuilder; - /** - * @var UrlInterface - */ + /** @var UrlInterface */ protected $urlBuilder; + /** @var string */ + private $url; + /** - * Constructor - * * @param ContextInterface $context * @param UiComponentFactory $uiComponentFactory * @param UrlBuilder $actionUrlBuilder * @param UrlInterface $urlBuilder * @param array $components * @param array $data + * @param string $url */ public function __construct( ContextInterface $context, @@ -48,10 +44,12 @@ public function __construct( UrlBuilder $actionUrlBuilder, UrlInterface $urlBuilder, array $components = [], - array $data = [] + array $data = [], + $url = self::CMS_URL_PATH ) { $this->urlBuilder = $urlBuilder; $this->actionUrlBuilder = $actionUrlBuilder; + $this->url = $url; parent::__construct($context, $uiComponentFactory, $components, $data); } @@ -64,7 +62,7 @@ public function prepareItems(array & $items) foreach ($items as & $item) { if (isset($item['page_id'])) { $item[$this->getData('name')]['edit'] = [ - 'href' => $this->urlBuilder->getUrl(static::URL_PATH, ['page_id' => $item['page_id']]), + 'href' => $this->urlBuilder->getUrl($this->url, ['page_id' => $item['page_id']]), 'label' => __('Edit'), 'hidden' => true ]; diff --git a/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Preview.php b/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Preview.php index 27494f5272324..a03aac30892ad 100644 --- a/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Preview.php +++ b/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Preview.php @@ -11,23 +11,18 @@ */ namespace Magento\Newsletter\Block\Adminhtml\Queue; -class Preview extends \Magento\Backend\Block\Widget +class Preview extends \Magento\Newsletter\Block\Adminhtml\Template\Preview { /** - * @var \Magento\Newsletter\Model\TemplateFactory + * {@inheritdoc} */ - protected $_templateFactory; + protected $profilerName = "newsletter_queue_proccessing"; /** * @var \Magento\Newsletter\Model\QueueFactory */ protected $_queueFactory; - /** - * @var \Magento\Newsletter\Model\SubscriberFactory - */ - protected $_subscriberFactory; - /** * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Newsletter\Model\TemplateFactory $templateFactory @@ -38,68 +33,26 @@ class Preview extends \Magento\Backend\Block\Widget public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Newsletter\Model\TemplateFactory $templateFactory, - \Magento\Newsletter\Model\QueueFactory $queueFactory, \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory, + \Magento\Newsletter\Model\QueueFactory $queueFactory, array $data = [] ) { - $this->_templateFactory = $templateFactory; $this->_queueFactory = $queueFactory; - $this->_subscriberFactory = $subscriberFactory; - parent::__construct($context, $data); + parent::__construct($context, $templateFactory, $subscriberFactory, $data); } /** - * Get html code - * - * @return string + * @param \Magento\Newsletter\Model\Template $template + * @param string $id + * @return $this */ - protected function _toHtml() + protected function loadTemplate(\Magento\Newsletter\Model\Template $template, $id) { - /* @var $template \Magento\Newsletter\Model\Template */ - $template = $this->_templateFactory->create(); - - if ($id = (int)$this->getRequest()->getParam('id')) { - $queue = $this->_queueFactory->create()->load($id); - $template->setTemplateType($queue->getNewsletterType()); - $template->setTemplateText($queue->getNewsletterText()); - $template->setTemplateStyles($queue->getNewsletterStyles()); - } else { - $template->setTemplateType($this->getRequest()->getParam('type')); - $template->setTemplateText($this->getRequest()->getParam('text')); - $template->setTemplateStyles($this->getRequest()->getParam('styles')); - } - - $storeId = (int)$this->getRequest()->getParam('store_id'); - if (!$storeId) { - $defaultStore = $this->_storeManager->getDefaultStoreView(); - if (!$defaultStore) { - $allStores = $this->_storeManager->getStores(); - if (isset($allStores[0])) { - $defaultStore = $allStores[0]; - } - } - $storeId = $defaultStore ? $defaultStore->getId() : null; - } - - \Magento\Framework\Profiler::start("newsletter_queue_proccessing"); - $vars = []; - - $vars['subscriber'] = $this->_subscriberFactory->create(); - - $template->emulateDesign($storeId); - $templateProcessed = $this->_appState->emulateAreaCode( - \Magento\Newsletter\Model\Template::DEFAULT_DESIGN_AREA, - [$template, 'getProcessedTemplate'], - [$vars, true] - ); - $template->revertDesign(); - - if ($template->isPlain()) { - $templateProcessed = "
" . htmlspecialchars($templateProcessed) . "
"; - } - - \Magento\Framework\Profiler::stop("newsletter_queue_proccessing"); - - return $templateProcessed; + /** @var \Magento\Newsletter\Model\Queue $queue */ + $queue = $this->_queueFactory->create()->load($id); + $template->setTemplateType($queue->getNewsletterType()); + $template->setTemplateText($queue->getNewsletterText()); + $template->setTemplateStyles($queue->getNewsletterStyles()); + return $this; } } diff --git a/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview.php b/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview.php index bc298348c71de..1166eca0d4d88 100644 --- a/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview.php +++ b/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview.php @@ -6,13 +6,18 @@ /** * Newsletter template preview block - * - * @author Magento Core Team */ namespace Magento\Newsletter\Block\Adminhtml\Template; class Preview extends \Magento\Backend\Block\Widget { + /** + * Name for profiler + * + * @var string + */ + protected $profilerName = "newsletter_template_proccessing"; + /** * @var \Magento\Newsletter\Model\TemplateFactory */ @@ -51,26 +56,14 @@ protected function _toHtml() $template = $this->_templateFactory->create(); if ($id = (int)$this->getRequest()->getParam('id')) { - $template->load($id); + $this->loadTemplate($template, $id); } else { $template->setTemplateType($this->getRequest()->getParam('type')); $template->setTemplateText($this->getRequest()->getParam('text')); $template->setTemplateStyles($this->getRequest()->getParam('styles')); } - $storeId = (int)$this->getRequest()->getParam('store_id'); - if (!$storeId) { - $defaultStore = $this->_storeManager->getDefaultStoreView(); - if (!$defaultStore) { - $allStores = $this->_storeManager->getStores(); - if (isset($allStores[0])) { - $defaultStore = $allStores[0]; - } - } - $storeId = $defaultStore ? $defaultStore->getId() : null; - } - - \Magento\Framework\Profiler::start("newsletter_template_proccessing"); + \Magento\Framework\Profiler::start($this->profilerName); $vars = []; $vars['subscriber'] = $this->_subscriberFactory->create(); @@ -78,7 +71,7 @@ protected function _toHtml() $vars['subscriber']->load($this->getRequest()->getParam('subscriber')); } - $template->emulateDesign($storeId); + $template->emulateDesign($this->getStoreId()); $templateProcessed = $this->_appState->emulateAreaCode( \Magento\Newsletter\Model\Template::DEFAULT_DESIGN_AREA, [$template, 'getProcessedTemplate'], @@ -90,8 +83,42 @@ protected function _toHtml() $templateProcessed = "
" . htmlspecialchars($templateProcessed) . "
"; } - \Magento\Framework\Profiler::stop("newsletter_template_proccessing"); + \Magento\Framework\Profiler::stop($this->profilerName); return $templateProcessed; } + + /** + * Get Store Id from request or default + * + * @return int|null + */ + protected function getStoreId() + { + $storeId = (int)$this->getRequest()->getParam('store_id'); + if ($storeId) { + return $storeId; + } + + $defaultStore = $this->_storeManager->getDefaultStoreView(); + if (!$defaultStore) { + $allStores = $this->_storeManager->getStores(); + if (isset($allStores[0])) { + $defaultStore = $allStores[0]; + } + } + + return $defaultStore ? $defaultStore->getId() : null; + } + + /** + * @param \Magento\Newsletter\Model\Template $template + * @param string $id + * @return $this + */ + protected function loadTemplate(\Magento\Newsletter\Model\Template $template, $id) + { + $template->load($id); + return $this; + } } diff --git a/app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Queue/PreviewTest.php b/app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Queue/PreviewTest.php new file mode 100644 index 0000000000000..db1bcddc9192c --- /dev/null +++ b/app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Queue/PreviewTest.php @@ -0,0 +1,96 @@ +getMock('Magento\Newsletter\Model\TemplateFactory', ['create'], [], '', false); + $this->template = $this->getMock('Magento\Newsletter\Model\Template', [], [], '', false); + $templateFactory->expects($this->once())->method('create')->will($this->returnValue($this->template)); + $queueFactory = $this->getMock('Magento\Newsletter\Model\QueueFactory', ['create'], [], '', false); + $this->queue = $this->getMock('Magento\Newsletter\Model\Queue', ['load'], [], '', false); + $queueFactory->expects($this->any())->method('create')->will($this->returnValue($this->queue)); + + $this->request = $this->getMock('Magento\Framework\App\Request\Http', [], [], '', false); + $this->storeManager = $this->getMock( + 'Magento\Store\Model\StoreManager', + ['getStores', 'getDefaultStoreView'], + [], + '', + false + ); + + $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $this->preview = $this->objectManager->getObject( + 'Magento\Newsletter\Block\Adminhtml\Queue\Preview', + [ + 'templateFactory' => $templateFactory, + 'queueFactory' => $queueFactory, + 'request' => $this->request, + 'storeManager' => $this->storeManager + ] + ); + } + + public function testToHtmlEmpty() + { + /** @var \Magento\Store\Model\Store $store */ + $store = $this->getMock('Magento\Store\Model\Store', ['getId'], [], '', false); + $this->storeManager->expects($this->once())->method('getDefaultStoreView')->will($this->returnValue($store)); + $result = $this->preview->toHtml(); + $this->assertEquals('', $result); + } + + public function testToHtmlWithId() + { + $this->request->expects($this->any())->method('getParam')->will($this->returnValueMap( + [ + ['id', null, 1], + ['store_id', null, 0] + ] + )); + $this->queue->expects($this->once())->method('load')->will($this->returnSelf()); + $this->template->expects($this->any())->method('isPlain')->will($this->returnValue(true)); + /** @var \Magento\Store\Model\Store $store */ + $this->storeManager->expects($this->once())->method('getDefaultStoreView')->will($this->returnValue(null)); + $store = $this->getMock('Magento\Store\Model\Store', ['getId'], [], '', false); + $this->storeManager->expects($this->once())->method('getStores')->will($this->returnValue([0 => $store])); + $result = $this->preview->toHtml(); + $this->assertEquals('
', $result);
+    }
+}
diff --git a/app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Template/PreviewTest.php b/app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Template/PreviewTest.php
new file mode 100644
index 0000000000000..a0c04a1af24c1
--- /dev/null
+++ b/app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Template/PreviewTest.php
@@ -0,0 +1,168 @@
+request = $this->getMock('Magento\Framework\App\RequestInterface', [], [], '', false);
+        $this->appState = $this->getMock('Magento\Framework\App\State', [], [], '', false);
+        $this->storeManager = $this->getMock('Magento\Store\Model\StoreManagerInterface', [], [], '', false);
+        $this->template = $this->getMock(
+            'Magento\Newsletter\Model\Template',
+            [
+                'setTemplateType',
+                'setTemplateText',
+                'setTemplateStyles',
+                'isPlain',
+                'emulateDesign',
+                'revertDesign',
+                'getProcessedTemplate',
+                'load'
+            ],
+            [],
+            '',
+            false
+        );
+        $templateFactory = $this->getMock('Magento\Newsletter\Model\TemplateFactory', [], [], '', false);
+        $templateFactory->expects($this->once())->method('create')->willReturn($this->template);
+        $this->subscriberFactory = $this->getMock('Magento\Newsletter\Model\SubscriberFactory', [], [], '', false);
+
+        $this->objectManagerHelper = new ObjectManagerHelper($this);
+        $this->preview = $this->objectManagerHelper->getObject(
+            'Magento\Newsletter\Block\Adminhtml\Template\Preview',
+            [
+                'appState' => $this->appState,
+                'storeManager' => $this->storeManager,
+                'request' => $this->request,
+                'templateFactory' => $templateFactory,
+                'subscriberFactory' => $this->subscriberFactory
+            ]
+        );
+    }
+
+    public function testToHtml()
+    {
+        $this->request->expects($this->any())->method('getParam')->willReturnMap([
+            ['id', null, 1],
+            ['store_id', null, 1]
+        ]);
+
+        $this->template->expects($this->atLeastOnce())->method('emulateDesign')->with(1);
+        $this->template->expects($this->atLeastOnce())->method('revertDesign');
+
+        $this->appState->expects($this->atLeastOnce())->method('emulateAreaCode')
+            ->with(
+                \Magento\Newsletter\Model\Template::DEFAULT_DESIGN_AREA,
+                [$this->template, 'getProcessedTemplate'],
+                [['subscriber' => null], true]
+            )
+            ->willReturn('Processed Template');
+
+        $this->assertEquals('Processed Template', $this->preview->toHtml());
+    }
+
+    public function testToHtmlForNewTemplate()
+    {
+        $this->request->expects($this->any())->method('getParam')->willReturnMap([
+            ['type', null, TemplateTypesInterface::TYPE_TEXT],
+            ['text', null, 'Processed Template'],
+            ['styles', null, '.class-name{color:red;}']
+        ]);
+
+        $this->template->expects($this->once())->method('setTemplateType')->with(TemplateTypesInterface::TYPE_TEXT)
+            ->willReturnSelf();
+        $this->template->expects($this->once())->method('setTemplateText')->with('Processed Template')
+            ->willReturnSelf();
+        $this->template->expects($this->once())->method('setTemplateStyles')->with('.class-name{color:red;}')
+            ->willReturnSelf();
+        $this->template->expects($this->atLeastOnce())->method('isPlain')->willReturn(true);
+        $this->template->expects($this->atLeastOnce())->method('emulateDesign')->with(1);
+        $this->template->expects($this->atLeastOnce())->method('revertDesign');
+
+        $store = $this->getMock('Magento\Store\Model\Store', [], [], '', false);
+        $store->expects($this->atLeastOnce())->method('getId')->willReturn(1);
+
+        $this->storeManager->expects($this->atLeastOnce())->method('getStores')->willReturn([$store]);
+
+
+        $this->appState->expects($this->atLeastOnce())->method('emulateAreaCode')
+            ->with(
+                \Magento\Newsletter\Model\Template::DEFAULT_DESIGN_AREA,
+                [
+                    $this->template,
+                    'getProcessedTemplate'
+                ],
+                [
+                    [
+                        'subscriber' => null
+                    ],
+                    true
+                ]
+            )
+            ->willReturn('Processed Template');
+
+        $this->assertEquals('
Processed Template
', $this->preview->toHtml()); + } + + public function testToHtmlWithSubscriber() + { + $this->request->expects($this->any())->method('getParam')->willReturnMap([ + ['id', null, 2], + ['store_id', null, 1], + ['subscriber', null, 3] + ]); + $subscriber = $this->getMock('Magento\Newsletter\Model\Subscriber', [], [], '', false); + $subscriber->expects($this->atLeastOnce())->method('load')->with(3)->willReturnSelf(); + $this->subscriberFactory->expects($this->atLeastOnce())->method('create')->willReturn($subscriber); + + $this->template->expects($this->atLeastOnce())->method('emulateDesign')->with(1); + $this->template->expects($this->atLeastOnce())->method('revertDesign'); + + $this->appState->expects($this->atLeastOnce())->method('emulateAreaCode') + ->with( + \Magento\Newsletter\Model\Template::DEFAULT_DESIGN_AREA, + [ + $this->template, + 'getProcessedTemplate' + ], + [ + [ + 'subscriber' => $subscriber + ], + true + ] + ) + ->willReturn('Processed Template'); + + $this->assertEquals('Processed Template', $this->preview->toHtml()); + } +} diff --git a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_preview.xml b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_preview.xml index 76f9bc780ae85..cb7ac6cb26d42 100644 --- a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_preview.xml +++ b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_preview.xml @@ -15,6 +15,7 @@ + diff --git a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_preview.xml b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_preview.xml index cb7ac6cb26d42..d468c2a843414 100644 --- a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_preview.xml +++ b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_preview.xml @@ -12,7 +12,7 @@ - + diff --git a/app/code/Magento/Newsletter/view/adminhtml/templates/subscriber/list.phtml b/app/code/Magento/Newsletter/view/adminhtml/templates/subscriber/list.phtml index b273b7dd4a35b..9ff5ae3d09619 100644 --- a/app/code/Magento/Newsletter/view/adminhtml/templates/subscriber/list.phtml +++ b/app/code/Magento/Newsletter/view/adminhtml/templates/subscriber/list.phtml @@ -20,8 +20,6 @@ diff --git a/app/code/Magento/Review/Model/Resource/Rating.php b/app/code/Magento/Review/Model/Resource/Rating.php index e09fa16992692..86601a0bb1156 100644 --- a/app/code/Magento/Review/Model/Resource/Rating.php +++ b/app/code/Magento/Review/Model/Resource/Rating.php @@ -159,90 +159,111 @@ public function getStores($ratingId) * * @param \Magento\Framework\Model\AbstractModel|\Magento\Review\Model\Rating $object * @return $this - * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function _afterSave(\Magento\Framework\Model\AbstractModel $object) { parent::_afterSave($object); - - $adapter = $this->_getWriteAdapter(); - $ratingId = (int)$object->getId(); - if ($object->hasRatingCodes()) { - $ratingTitleTable = $this->getTable('rating_title'); - $adapter->beginTransaction(); - try { - $select = $adapter->select()->from( - $ratingTitleTable, - ['store_id', 'value'] - )->where( - 'rating_id = :rating_id' - ); - $old = $adapter->fetchPairs($select, [':rating_id' => $ratingId]); - $new = array_filter(array_map('trim', $object->getRatingCodes())); - - $insert = array_diff_assoc($new, $old); - $delete = array_diff_assoc($old, $new); - if (!empty($delete)) { - $where = ['rating_id = ?' => $ratingId, 'store_id IN(?)' => array_keys($delete)]; - $adapter->delete($ratingTitleTable, $where); - } - - if ($insert) { - $data = []; - foreach ($insert as $storeId => $title) { - $data[] = ['rating_id' => $ratingId, 'store_id' => (int)$storeId, 'value' => $title]; - } - if (!empty($data)) { - $adapter->insertMultiple($ratingTitleTable, $data); - } - } - $adapter->commit(); - } catch (\Exception $e) { - $this->_logger->critical($e); - $adapter->rollBack(); - } + $this->processRatingCodes($object); } if ($object->hasStores()) { - $ratingStoreTable = $this->getTable('rating_store'); - $adapter->beginTransaction(); - try { - $select = $adapter->select()->from( - $ratingStoreTable, - ['store_id'] - )->where( - 'rating_id = :rating_id' - ); - $old = $adapter->fetchCol($select, [':rating_id' => $ratingId]); - $new = $object->getStores(); - - $insert = array_diff($new, $old); - $delete = array_diff($old, $new); - - if ($delete) { - $where = ['rating_id = ?' => $ratingId, 'store_id IN(?)' => $delete]; - $adapter->delete($ratingStoreTable, $where); - } + $this->processRatingStores($object); + } - if ($insert) { - $data = []; - foreach ($insert as $storeId) { - $data[] = ['rating_id' => $ratingId, 'store_id' => (int)$storeId]; - } - $adapter->insertMultiple($ratingStoreTable, $data); - } + return $this; + } - $adapter->commit(); - } catch (\Exception $e) { - $this->_logger->critical($e); - $adapter->rollBack(); - } + /** + * @param \Magento\Framework\Model\AbstractModel $object + * @return $this + */ + protected function processRatingCodes(\Magento\Framework\Model\AbstractModel $object) + { + $adapter = $this->_getWriteAdapter(); + $ratingId = (int)$object->getId(); + $table = $this->getTable('rating_title'); + $select = $adapter->select()->from($table, ['store_id', 'value']) + ->where('rating_id = :rating_id'); + $old = $adapter->fetchPairs($select, [':rating_id' => $ratingId]); + $new = array_filter(array_map('trim', $object->getRatingCodes())); + $this->deleteRatingData($ratingId, $table, array_diff_assoc($old, $new)); + + $insert = []; + foreach (array_diff_assoc($new, $old) as $storeId => $title) { + $insert[] = ['rating_id' => $ratingId, 'store_id' => (int)$storeId, 'value' => $title]; } + $this->insertRatingData($table, $insert); + return $this; + } + /** + * @param \Magento\Framework\Model\AbstractModel $object + * @return $this + */ + protected function processRatingStores(\Magento\Framework\Model\AbstractModel $object) + { + $adapter = $this->_getWriteAdapter(); + $ratingId = (int)$object->getId(); + $table = $this->getTable('rating_store'); + $select = $adapter->select()->from($table, ['store_id']) + ->where('rating_id = :rating_id'); + $old = $adapter->fetchCol($select, [':rating_id' => $ratingId]); + $new = $object->getStores(); + $this->deleteRatingData($ratingId, $table, array_diff_assoc($old, $new)); + + $insert = []; + foreach (array_keys(array_diff_assoc($new, $old)) as $storeId) { + $insert[] = ['rating_id' => $ratingId, 'store_id' => (int)$storeId]; + } + $this->insertRatingData($table, $insert); return $this; } + /** + * @param int $ratingId + * @param string $table + * @param array $data + * @return void + */ + protected function deleteRatingData($ratingId, $table, array $data) + { + if (empty($data)) { + return; + } + $adapter = $this->_getWriteAdapter(); + $adapter->beginTransaction(); + try { + $where = ['rating_id = ?' => $ratingId, 'store_id IN(?)' => array_keys($data)]; + $adapter->delete($table, $where); + $adapter->commit(); + } catch (\Exception $e) { + $this->_logger->critical($e); + $adapter->rollBack(); + } + } + + /** + * @param string $table + * @param array $data + * @return void + */ + protected function insertRatingData($table, array $data) + { + if (empty($data)) { + return; + } + $adapter = $this->_getWriteAdapter(); + $adapter->beginTransaction(); + try { + $adapter->insertMultiple($table, $data); + $adapter->commit(); + } catch (\Exception $e) { + $this->_logger->critical($e); + $adapter->rollBack(); + } + } + /** * Perform actions after object delete * Prepare rating data for reaggregate all data for reviews diff --git a/app/code/Magento/Review/Model/Resource/Review.php b/app/code/Magento/Review/Model/Resource/Review.php index 9ca5b4617f759..16798e3f8b1e5 100644 --- a/app/code/Magento/Review/Model/Resource/Review.php +++ b/app/code/Magento/Review/Model/Resource/Review.php @@ -322,8 +322,6 @@ public function getTotalReviews($entityPkValue, $approvedOnly = false, $storeId */ public function aggregate($object) { - $readAdapter = $this->_getReadAdapter(); - $writeAdapter = $this->_getWriteAdapter(); if (!$object->getEntityPkValue() && $object->getId()) { $object->load($object->getReviewId()); } @@ -332,48 +330,74 @@ public function aggregate($object) $ratingSummaries = $ratingModel->getEntitySummary($object->getEntityPkValue(), false); foreach ($ratingSummaries as $ratingSummaryObject) { - if ($ratingSummaryObject->getCount()) { - $ratingSummary = round($ratingSummaryObject->getSum() / $ratingSummaryObject->getCount()); - } else { - $ratingSummary = $ratingSummaryObject->getSum(); - } + $this->aggregateReviewSummary($object, $ratingSummaryObject); + } + } - $reviewsCount = $this->getTotalReviews( - $object->getEntityPkValue(), - true, - $ratingSummaryObject->getStoreId() - ); - $select = $readAdapter->select()->from($this->_aggregateTable) - ->where('entity_pk_value = :pk_value') - ->where('entity_type = :entity_type') - ->where('store_id = :store_id'); - $bind = [ - ':pk_value' => $object->getEntityPkValue(), - ':entity_type' => $object->getEntityId(), - ':store_id' => $ratingSummaryObject->getStoreId(), - ]; - $oldData = $readAdapter->fetchRow($select, $bind); - - $data = new \Magento\Framework\Object(); - - $data->setReviewsCount($reviewsCount) - ->setEntityPkValue($object->getEntityPkValue()) - ->setEntityType($object->getEntityId()) - ->setRatingSummary($ratingSummary > 0 ? $ratingSummary : 0) - ->setStoreId($ratingSummaryObject->getStoreId()); - - $writeAdapter->beginTransaction(); - try { - if ($oldData['primary_id'] > 0) { - $condition = ["{$this->_aggregateTable}.primary_id = ?" => $oldData['primary_id']]; - $writeAdapter->update($this->_aggregateTable, $data->getData(), $condition); - } else { - $writeAdapter->insert($this->_aggregateTable, $data->getData()); - } - $writeAdapter->commit(); - } catch (\Exception $e) { - $writeAdapter->rollBack(); + /** + * Aggregate review summary + * + * @param \Magento\Framework\Model\AbstractModel $object + * @param \Magento\Review\Model\Rating $ratingSummaryObject + * @return void + */ + protected function aggregateReviewSummary($object, $ratingSummaryObject) + { + $readAdapter = $this->_getReadAdapter(); + + if ($ratingSummaryObject->getCount()) { + $ratingSummary = round($ratingSummaryObject->getSum() / $ratingSummaryObject->getCount()); + } else { + $ratingSummary = $ratingSummaryObject->getSum(); + } + + $reviewsCount = $this->getTotalReviews( + $object->getEntityPkValue(), + true, + $ratingSummaryObject->getStoreId() + ); + $select = $readAdapter->select()->from($this->_aggregateTable) + ->where('entity_pk_value = :pk_value') + ->where('entity_type = :entity_type') + ->where('store_id = :store_id'); + $bind = [ + ':pk_value' => $object->getEntityPkValue(), + ':entity_type' => $object->getEntityId(), + ':store_id' => $ratingSummaryObject->getStoreId(), + ]; + $oldData = $readAdapter->fetchRow($select, $bind); + $data = new \Magento\Framework\Object(); + + $data->setReviewsCount($reviewsCount) + ->setEntityPkValue($object->getEntityPkValue()) + ->setEntityType($object->getEntityId()) + ->setRatingSummary($ratingSummary > 0 ? $ratingSummary : 0) + ->setStoreId($ratingSummaryObject->getStoreId()); + + $this->writeReviewSummary($oldData, $data); + } + + /** + * Write rating summary + * + * @param array|bool $oldData + * @param \Magento\Framework\Object $data + * @return void + */ + protected function writeReviewSummary($oldData, \Magento\Framework\Object $data) + { + $writeAdapter = $this->_getWriteAdapter(); + $writeAdapter->beginTransaction(); + try { + if (isset($oldData['primary_id']) && $oldData['primary_id'] > 0) { + $condition = ["{$this->_aggregateTable}.primary_id = ?" => $oldData['primary_id']]; + $writeAdapter->update($this->_aggregateTable, $data->getData(), $condition); + } else { + $writeAdapter->insert($this->_aggregateTable, $data->getData()); } + $writeAdapter->commit(); + } catch (\Exception $e) { + $writeAdapter->rollBack(); } } diff --git a/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Rating/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Rating/CollectionTest.php new file mode 100644 index 0000000000000..d5a9161cb4184 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Rating/CollectionTest.php @@ -0,0 +1,57 @@ +collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + 'Magento\Review\Model\Resource\Rating\Collection' + ); + } + + /** + * @magentoDataFixture Magento/Review/_files/customer_review_with_rating.php + */ + public function testAddEntitySummaryToItem() + { + $ratingData = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\Framework\Registry') + ->registry('rating_data'); + + $result = $this->collection->addEntitySummaryToItem($ratingData->getEntityId(), $ratingData->getStoreId()); + $this->assertEquals($this->collection, $result); + } + + /** + * @magentoDbIsolation enabled + */ + public function testAddEntitySummaryToItemEmpty() + { + foreach ($this->collection->getItems() as $item) { + $item->delete(); + } + $this->collection->clear(); + $result = $this->collection->addEntitySummaryToItem(1, 1); + $this->assertEquals($this->collection, $result); + } + + public function testAddStoreData() + { + $this->collection->addStoreData(); + } + + public function testSetStoreFilter() + { + $this->collection->setStoreFilter(1); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Review/Model/Resource/RatingTest.php b/dev/tests/integration/testsuite/Magento/Review/Model/Resource/RatingTest.php new file mode 100644 index 0000000000000..910fb6b0c42ef --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Review/Model/Resource/RatingTest.php @@ -0,0 +1,80 @@ +get('Magento\Store\Model\StoreManagerInterface') + ->getStore()->getId(); + + $rating = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Review\Model\Rating'); + $rating->setData([ + 'rating_code' => 'Test Rating', + 'position' => 0, + 'is_active' => true, + 'entity_id' => 1 + ]); + $rating->setRatingCodes([$storeId => 'Test Rating']); + $rating->setStores([$storeId]); + $rating->save(); + $this->id = $rating->getId(); + } + + /** + * @magentoDbIsolation enabled + */ + public function testRatingLoad() + { + $rating = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Review\Model\Rating'); + $rating->load($this->id); + $this->assertEquals('Test Rating', $rating->getRatingCode()); + } + + /** + * @magentoDbIsolation enabled + */ + public function testRatingEdit() + { + $rating = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Review\Model\Rating'); + $rating->load($this->id); + $this->assertEquals('Test Rating', $rating->getRatingCode()); + $storeId = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\Store\Model\StoreManagerInterface') + ->getStore()->getId(); + $rating->setRatingCode('Test Rating Edited'); + $rating->setRatingCodes([$storeId => 'Test Rating Edited']); + $rating->save(); + + $this->assertEquals('Test Rating Edited', $rating->getRatingCode()); + $this->assertEquals([$storeId => 'Test Rating Edited'], $rating->getRatingCodes()); + } + + /** + * @magentoDbIsolation enabled + */ + public function testRatingSaveWithError() + { + $this->setExpectedException('Exception', 'Rolled back transaction has not been completed correctly'); + $rating = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Review\Model\Rating'); + $rating->load($this->id); + $rating->setRatingCodes([222 => 'Test Rating Edited']); + $rating->save(); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Review/ReviewTest.php b/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Review/ReviewTest.php new file mode 100644 index 0000000000000..7a1216f6717e0 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Review/ReviewTest.php @@ -0,0 +1,64 @@ +objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $this->resource = $this->objectManager->get('Magento\Framework\App\Resource'); + $this->adapter = $this->resource->getConnection('core_read'); + $this->reviewCollection = $this->objectManager->create('Magento\Review\Model\Resource\Review\Collection'); + $this->reviewResource = $this->objectManager->create('Magento\Review\Model\Resource\Review'); + } + + /** + * @magentoDataFixture Magento/Review/_files/customer_review_with_rating.php + */ + public function testAggregate() + { + $rating = $this->reviewCollection->getFirstItem(); + $this->reviewResource->aggregate($rating); + + $select = $this->adapter->select()->from($this->resource->getTableName('review_entity_summary')); + $result = $this->adapter->fetchRow($select); + + $this->assertEquals(1, $result['reviews_count']); + $this->assertEquals(40, $result['rating_summary']); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Review/_files/customer_review_with_rating.php b/dev/tests/integration/testsuite/Magento/Review/_files/customer_review_with_rating.php new file mode 100644 index 0000000000000..9de0a3b0a52ae --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Review/_files/customer_review_with_rating.php @@ -0,0 +1,66 @@ +loadArea( + \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE +); + +require __DIR__ . '/../../../Magento/Customer/_files/customer.php'; +require __DIR__ . '/../../../Magento/Catalog/_files/product_simple.php'; + +$storeId = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Store\Model\StoreManagerInterface') + ->getStore()->getId(); + +$review = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + 'Magento\Review\Model\Review', + ['data' => [ + 'customer_id' => $customer->getId(), + 'title' => 'Review Summary', + 'detail' => 'Review text', + 'nickname' => 'Nickname', + ]] +); + +$review + ->setEntityId($review->getEntityIdByCode(\Magento\Review\Model\Review::ENTITY_PRODUCT_CODE)) + ->setEntityPkValue($product->getId()) + ->setStatusId(\Magento\Review\Model\Review::STATUS_APPROVED) + ->setStoreId($storeId) + ->setStores([$storeId]) + ->save(); + +\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\Registry')->register( + 'review_data', + $review +); + +/** @var \Magento\Review\Model\Resource\Review\Collection $ratingCollection */ +$ratingCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + '\Magento\Review\Model\Rating' +)->getCollection() + ->setPageSize(2) + ->setCurPage(1); + +foreach ($ratingCollection as $rating) { + $rating->setStores([$storeId])->setIsActive(1)->save(); +} + +foreach ($ratingCollection as $rating) { + $ratingOption = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->create('\Magento\Review\Model\Rating\Option') + ->getCollection() + ->setPageSize(1) + ->setCurPage(2) + ->addRatingFilter($rating->getId()) + ->getFirstItem(); + $rating->setReviewId($review->getId()) + ->addOptionVote($ratingOption->getId(), $product->getId()); +} + +\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\Registry')->register( + 'rating_data', + $ratingCollection->getFirstItem() +); diff --git a/lib/internal/Magento/Framework/App/Rss/UrlBuilder.php b/lib/internal/Magento/Framework/App/Rss/UrlBuilder.php index e70f242262452..b421b8f608db7 100644 --- a/lib/internal/Magento/Framework/App/Rss/UrlBuilder.php +++ b/lib/internal/Magento/Framework/App/Rss/UrlBuilder.php @@ -7,13 +7,12 @@ /** * Class UrlBuilder - * @package Magento\Rss\Model */ class UrlBuilder implements UrlBuilderInterface { /** - * @param array $queryParams - * @return string + * {@inheritdoc} + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function getUrl(array $queryParams = []) {