diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog.php
index 3b20dec460b319b8386ec39fde6ce99298870cfc..5ab7a97bf4a0048e6f4bbfb29a2e35594370b517 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 /**
  * Backend Catalog Price Rules controller
  *
@@ -36,11 +34,15 @@ class Catalog extends Action
     protected $_coreRegistry = null;
 
     /**
+     * Date filter instance
+     *
      * @var \Magento\Framework\Stdlib\DateTime\Filter\Date
      */
     protected $_dateFilter;
 
     /**
+     * Constructor
+     *
      * @param Context $context
      * @param Registry $coreRegistry
      * @param Date $dateFilter
@@ -53,6 +55,8 @@ class Catalog extends Action
     }
 
     /**
+     * Init action
+     *
      * @return $this
      */
     protected function _initAction()
@@ -68,6 +72,8 @@ class Catalog extends Action
     }
 
     /**
+     * Is access to section allowed
+     *
      * @return bool
      */
     protected function _isAllowed()
@@ -94,7 +100,8 @@ class Catalog extends Action
     public function getDirtyRulesNoticeMessage()
     {
         $defaultMessage = __(
-            'There are rules that have been changed but were not applied. Please, click Apply Rules in order to see immediate effect in the catalog.'
+            'There are rules that have been changed but were not applied. '
+            . 'Please, click Apply Rules in order to see immediate effect in the catalog.'
         );
         return $this->_dirtyRulesNoticeMessage ? $this->_dirtyRulesNoticeMessage : $defaultMessage;
     }
diff --git a/app/code/Magento/CatalogRule/Helper/Data.php b/app/code/Magento/CatalogRule/Helper/Data.php
index 439cff46006938de35eb744508e7b7424413c2fa..33ff883655675bf067876ac24d74ef0248ed99ce 100644
--- a/app/code/Magento/CatalogRule/Helper/Data.php
+++ b/app/code/Magento/CatalogRule/Helper/Data.php
@@ -12,13 +12,12 @@ namespace Magento\CatalogRule\Helper;
 class Data extends \Magento\Framework\App\Helper\AbstractHelper
 {
     /**
-     * Algorithm for calculating price rule
+     * Algorithm for calculating price by rule
      *
      * @param  string $actionOperator
      * @param  int $ruleAmount
      * @param  float $price
      * @return float|int
-     * @api
      */
     public function calcPriceRule($actionOperator, $ruleAmount, $price)
     {
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Helper/DataTest.php b/app/code/Magento/CatalogRule/Test/Unit/Helper/DataTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d75d688a07a164bb674fa343d97800049173af0
--- /dev/null
+++ b/app/code/Magento/CatalogRule/Test/Unit/Helper/DataTest.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\CatalogRule\Test\Unit\Helper;
+
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
+class DataTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * Helper object
+     *
+     * @var \Magento\CatalogRule\Helper\Data
+     */
+    protected $helper;
+
+    protected function setUp()
+    {
+        $this->helper = (new ObjectManager($this))->getObject('Magento\CatalogRule\Helper\Data');
+    }
+
+    /**
+     * Test price rule calculation
+     *
+     * @param string $actionOperator
+     * @param int|float $ruleAmount
+     * @param int|float $price
+     * @param int|float $expectedAmount
+     *
+     * @dataProvider calcPriceRuleDataProvider
+     */
+    public function testCalcPriceRule($actionOperator, $ruleAmount, $price, $expectedAmount)
+    {
+        $this->assertEquals($expectedAmount, $this->helper->calcPriceRule($actionOperator, $ruleAmount, $price));
+    }
+
+    /**
+     * Data provider for cal price rule test
+     *
+     * @return array
+     */
+    public function calcPriceRuleDataProvider()
+    {
+        return [
+            ['to_fixed', 10, 10, 10],
+            ['to_fixed', 0, 10, 0],
+            ['to_fixed', 10, 0, 0],
+            ['to_fixed', 0, 0, 0],
+            ['to_percent', 100, 100, 100],
+            ['to_percent', 10, 100, 10],
+            ['to_percent', 10, 70, 7],
+            ['to_percent', 100, 10, 10],
+            ['by_fixed', 100, 100, 0],
+            ['by_fixed', 10, 100, 90],
+            ['by_fixed', 100, 10, 0],
+            ['by_percent', 100, 100, 0],
+            ['by_percent', 100, 10, 0],
+            ['by_percent', 100, 1, 0],
+            ['by_percent', 10, 100, 90],
+            ['by_percent', 10, 10, 9],
+            ['by_percent', 1, 10, 9.90],
+        ];
+    }
+}
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Model/CronTest.php b/app/code/Magento/CatalogRule/Test/Unit/Model/CronTest.php
index 07e27c6398a6a8678788390b12e5fd0076cea02e..2d8f4b8b8a6a95955be084fcda3a2a6ad25dab6c 100644
--- a/app/code/Magento/CatalogRule/Test/Unit/Model/CronTest.php
+++ b/app/code/Magento/CatalogRule/Test/Unit/Model/CronTest.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\CatalogRule\Test\Unit\Model;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
@@ -13,23 +11,35 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class CronTest extends \PHPUnit_Framework_TestCase
 {
     /**
+     * Processor
+     *
      * @var \Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $ruleProductProcessor;
 
     /**
+     * Cron object
+     *
      * @var \Magento\CatalogRule\Model\Cron
      */
     protected $cron;
 
     protected function setUp()
     {
-        $this->ruleProductProcessor = $this->getMock('Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor',
-            [], [], '', false);
-
-        $this->cron = (new ObjectManager($this))->getObject('Magento\CatalogRule\Model\Cron', [
-            'ruleProductProcessor' => $this->ruleProductProcessor,
-        ]);
+        $this->ruleProductProcessor = $this->getMock(
+            'Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor',
+            [],
+            [],
+            '',
+            false
+        );
+
+        $this->cron = (new ObjectManager($this))->getObject(
+            'Magento\CatalogRule\Model\Cron',
+            [
+                'ruleProductProcessor' => $this->ruleProductProcessor,
+            ]
+        );
     }
 
     public function testDailyCatalogUpdate()
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/CategoryTest.php b/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/CategoryTest.php
index 4814767f39d9e8017bd8e45804c5b8a670a2bd1c..59bd89d00579eff03f37dc0293027240c303c5e3 100644
--- a/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/CategoryTest.php
+++ b/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/CategoryTest.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\CatalogRule\Test\Unit\Plugin\Indexer;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
@@ -29,20 +27,37 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->productRuleProcessor = $this->getMock('Magento\CatalogRule\Model\Indexer\Product\ProductRuleProcessor',
-            [], [], '', false);
-        $this->subject = $this->getMock('Magento\Catalog\Model\Category', ['getAffectedProductIds', '__wakeUp'], [],
-            '', false);
-
-        $this->plugin = (new ObjectManager($this))->getObject('Magento\CatalogRule\Plugin\Indexer\Category', [
-            'productRuleProcessor' => $this->productRuleProcessor,
-        ]);
+        $this->productRuleProcessor = $this->getMock(
+            'Magento\CatalogRule\Model\Indexer\Product\ProductRuleProcessor',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->subject = $this->getMock(
+            'Magento\Catalog\Model\Category',
+            ['getAffectedProductIds', '__wakeUp'],
+            [],
+            '',
+            false
+        );
+
+        $this->plugin = (new ObjectManager($this))->getObject(
+            'Magento\CatalogRule\Plugin\Indexer\Category',
+            [
+                'productRuleProcessor' => $this->productRuleProcessor,
+            ]
+        );
     }
 
     public function testAfterSaveWithoutAffectedProductIds()
     {
-        $this->subject->expects($this->any())->method('getAffectedProductIds')->will($this->returnValue([]));
-        $this->productRuleProcessor->expects($this->never())->method('reindexList');
+        $this->subject->expects($this->any())
+            ->method('getAffectedProductIds')
+            ->will($this->returnValue([]));
+
+        $this->productRuleProcessor->expects($this->never())
+            ->method('reindexList');
 
         $this->assertEquals($this->subject, $this->plugin->afterSave($this->subject, $this->subject));
     }
@@ -51,15 +66,21 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
     {
         $productIds = [1, 2, 3];
 
-        $this->subject->expects($this->any())->method('getAffectedProductIds')->will($this->returnValue($productIds));
-        $this->productRuleProcessor->expects($this->once())->method('reindexList')->with($productIds);
+        $this->subject->expects($this->any())
+            ->method('getAffectedProductIds')
+            ->will($this->returnValue($productIds));
+
+        $this->productRuleProcessor->expects($this->once())
+            ->method('reindexList')
+            ->with($productIds);
 
         $this->assertEquals($this->subject, $this->plugin->afterSave($this->subject, $this->subject));
     }
 
     public function testAfterDelete()
     {
-        $this->productRuleProcessor->expects($this->once())->method('markIndexerAsInvalid');
+        $this->productRuleProcessor->expects($this->once())
+            ->method('markIndexerAsInvalid');
 
         $this->assertEquals($this->subject, $this->plugin->afterDelete($this->subject, $this->subject));
     }
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/CustomerGroupTest.php b/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/CustomerGroupTest.php
index f0c7283f1d4eb081ed736b11591521036d21560d..fb911fb1cdbd7211e3d39b5ea2528587d9c3f343 100644
--- a/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/CustomerGroupTest.php
+++ b/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/CustomerGroupTest.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\CatalogRule\Test\Unit\Plugin\Indexer;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
@@ -13,34 +11,55 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class CustomerGroupTest extends \PHPUnit_Framework_TestCase
 {
     /**
+     * Rule processor mock
+     *
      * @var \Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $ruleProductProcessor;
 
     /**
+     * Subject group
+     *
      * @var \Magento\Customer\Model\Group|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $subject;
 
     /**
+     * Tested plugin
+     *
      * @var \Magento\CatalogRule\Plugin\Indexer\CustomerGroup
      */
     protected $plugin;
 
     protected function setUp()
     {
-        $this->ruleProductProcessor = $this->getMock('Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor',
-            [], [], '', false);
-        $this->subject = $this->getMock('Magento\Customer\Model\Group', [], [], '', false);
+        $this->ruleProductProcessor = $this->getMock(
+            'Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->subject = $this->getMock(
+            'Magento\Customer\Model\Group',
+            [],
+            [],
+            '',
+            false
+        );
 
-        $this->plugin = (new ObjectManager($this))->getObject('Magento\CatalogRule\Plugin\Indexer\CustomerGroup', [
-            'ruleProductProcessor' => $this->ruleProductProcessor,
-        ]);
+        $this->plugin = (new ObjectManager($this))->getObject(
+            'Magento\CatalogRule\Plugin\Indexer\CustomerGroup',
+            [
+                'ruleProductProcessor' => $this->ruleProductProcessor,
+            ]
+        );
     }
 
     public function testAfterDelete()
     {
-        $this->ruleProductProcessor->expects($this->once())->method('markIndexerAsInvalid');
+        $this->ruleProductProcessor->expects($this->once())
+            ->method('markIndexerAsInvalid');
 
         $this->assertEquals($this->subject, $this->plugin->afterDelete($this->subject, $this->subject));
     }
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/ImportExportTest.php b/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/ImportExportTest.php
index eac185dcc129f308874f6c412f24655dbcaaf0b1..68a4dae5ef04fae0434f9af375015454afe8e238 100644
--- a/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/ImportExportTest.php
+++ b/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/ImportExportTest.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\CatalogRule\Test\Unit\Plugin\Indexer;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
@@ -13,36 +11,51 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class ImportExportTest extends \PHPUnit_Framework_TestCase
 {
     /**
+     * Indexer processor mock
+     *
      * @var \Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $ruleProductProcessor;
 
     /**
+     * Import model mock
+     *
      * @var \Magento\ImportExport\Model\Import|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $subject;
 
     /**
+     * Tested plugin
+     *
      * @var \Magento\CatalogRule\Plugin\Indexer\ImportExport
      */
     protected $plugin;
 
     protected function setUp()
     {
-        $this->ruleProductProcessor = $this->getMock('Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor',
-            [], [], '', false);
+        $this->ruleProductProcessor = $this->getMock(
+            'Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor',
+            [],
+            [],
+            '',
+            false
+        );
         $this->subject = $this->getMock('Magento\ImportExport\Model\Import', [], [], '', false);
 
-        $this->plugin = (new ObjectManager($this))->getObject('Magento\CatalogRule\Plugin\Indexer\ImportExport', [
-            'ruleProductProcessor' => $this->ruleProductProcessor,
-        ]);
+        $this->plugin = (new ObjectManager($this))->getObject(
+            'Magento\CatalogRule\Plugin\Indexer\ImportExport',
+            [
+                'ruleProductProcessor' => $this->ruleProductProcessor,
+            ]
+        );
     }
 
     public function testAfterImportSource()
     {
         $result = true;
 
-        $this->ruleProductProcessor->expects($this->once())->method('markIndexerAsInvalid');
+        $this->ruleProductProcessor->expects($this->once())
+            ->method('markIndexerAsInvalid');
 
         $this->assertEquals($result, $this->plugin->afterImportSource($this->subject, $result));
     }
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/WebsiteTest.php b/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/WebsiteTest.php
index 2fca372e8e4ac7d196b2ac4bff988dc8c57a41f7..39571d32c38003914838a6d702817d09e44e8e76 100644
--- a/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/WebsiteTest.php
+++ b/app/code/Magento/CatalogRule/Test/Unit/Plugin/Indexer/WebsiteTest.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\CatalogRule\Test\Unit\Plugin\Indexer;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
@@ -13,34 +11,49 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class WebsiteTest extends \PHPUnit_Framework_TestCase
 {
     /**
+     * Indexer processor mock
+     *
      * @var \Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $ruleProductProcessor;
 
     /**
+     * Website mock
+     *
      * @var \Magento\Store\Model\Website|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $subject;
 
     /**
+     * Tested plugin
+     *
      * @var \Magento\CatalogRule\Plugin\Indexer\Website
      */
     protected $plugin;
 
     protected function setUp()
     {
-        $this->ruleProductProcessor = $this->getMock('Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor',
-            [], [], '', false);
+        $this->ruleProductProcessor = $this->getMock(
+            'Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor',
+            [],
+            [],
+            '',
+            false
+        );
         $this->subject = $this->getMock('Magento\Store\Model\Website', [], [], '', false);
 
-        $this->plugin = (new ObjectManager($this))->getObject('Magento\CatalogRule\Plugin\Indexer\Website', [
-            'ruleProductProcessor' => $this->ruleProductProcessor,
-        ]);
+        $this->plugin = (new ObjectManager($this))->getObject(
+            'Magento\CatalogRule\Plugin\Indexer\Website',
+            [
+                'ruleProductProcessor' => $this->ruleProductProcessor,
+            ]
+        );
     }
 
     public function testAfterDelete()
     {
-        $this->ruleProductProcessor->expects($this->once())->method('markIndexerAsInvalid');
+        $this->ruleProductProcessor->expects($this->once())
+            ->method('markIndexerAsInvalid');
 
         $this->assertEquals($this->subject, $this->plugin->afterDelete($this->subject, $this->subject));
     }
diff --git a/app/code/Magento/Contact/Test/Unit/Controller/Index/IndexTest.php b/app/code/Magento/Contact/Test/Unit/Controller/Index/IndexTest.php
index bb59c0e78c7425e6c3e38d1428574a7b738758c2..ccaec64fabb98588414aac86ae67c5e8b14bd956 100644
--- a/app/code/Magento/Contact/Test/Unit/Controller/Index/IndexTest.php
+++ b/app/code/Magento/Contact/Test/Unit/Controller/Index/IndexTest.php
@@ -1,32 +1,37 @@
 <?php
 /**
- *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Contact\Test\Unit\Controller\Index;
 
 class IndexTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Contact\Controller\Index\Index|\PHPUnit_Framework_MockObject_MockObject
+     * Controller
+     *
+     * @var \Magento\Contact\Controller\Index\Index
      */
     protected $_controller;
 
     /**
+     * Scope config mock
+     *
      * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_scopeConfig;
 
     /**
+     * View mock
+     *
      * @var \Magento\Framework\App\ViewInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_view;
 
     /**
+     * Url mock
+     *
      * @var \Magento\Framework\UrlInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_url;
@@ -34,7 +39,10 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->_scopeConfig = $this->getMockForAbstractClass(
-            '\Magento\Framework\App\Config\ScopeConfigInterface', ['isSetFlag'], '', false
+            '\Magento\Framework\App\Config\ScopeConfigInterface',
+            ['isSetFlag'],
+            '',
+            false
         );
         $context = $this->getMock(
             '\Magento\Framework\App\Action\Context',
diff --git a/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php b/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php
index 9db82a0300c8dfcc1fb590aa2f7bf329596dd736..609eaddcc4b579de6c613e1855fda232937ea2d2 100644
--- a/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php
+++ b/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php
@@ -4,18 +4,20 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Contact\Test\Unit\Controller;
 
 class IndexTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Contact\Controller\Index|\PHPUnit_Framework_MockObject_MockObject
+     * Controller instance
+     *
+     * @var \Magento\Contact\Controller\Index
      */
     protected $_controller;
 
     /**
+     * Scope config instance
+     *
      * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_scopeConfig;
@@ -23,7 +25,10 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->_scopeConfig = $this->getMockForAbstractClass(
-            '\Magento\Framework\App\Config\ScopeConfigInterface', ['isSetFlag'], '', false
+            '\Magento\Framework\App\Config\ScopeConfigInterface',
+            ['isSetFlag'],
+            '',
+            false
         );
         $context = $this->getMock(
             '\Magento\Framework\App\Action\Context',
@@ -33,23 +38,21 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $context->expects(
-            $this->any()
-        )->method(
-            'getRequest'
-        )->will(
-            $this->returnValue($this->getMockForAbstractClass('\Magento\Framework\App\RequestInterface', [], '', false))
-        );
+        $context->expects($this->any())
+            ->method('getRequest')
+            ->will(
+                $this->returnValue(
+                    $this->getMockForAbstractClass('\Magento\Framework\App\RequestInterface', [], '', false)
+                )
+            );
 
-        $context->expects(
-            $this->any()
-        )->method(
-            'getResponse'
-        )->will(
-            $this->returnValue(
-                $this->getMockForAbstractClass('\Magento\Framework\App\ResponseInterface', [], '', false)
-            )
-        );
+        $context->expects($this->any())
+            ->method('getResponse')
+            ->will(
+                $this->returnValue(
+                    $this->getMockForAbstractClass('\Magento\Framework\App\ResponseInterface', [], '', false)
+                )
+            );
 
         $this->_controller = new \Magento\Contact\Controller\Index(
             $context,
@@ -61,20 +64,20 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
+     * Dispatch test
+     *
      * @expectedException \Magento\Framework\Exception\NotFoundException
      */
     public function testDispatch()
     {
-        $this->_scopeConfig->expects(
-            $this->once()
-        )->method(
-            'isSetFlag'
-        )->with(
-            \Magento\Contact\Controller\Index::XML_PATH_ENABLED,
-            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
-        )->will(
-            $this->returnValue(false)
-        );
+        $this->_scopeConfig->expects($this->once())
+            ->method('isSetFlag')
+            ->with(
+                \Magento\Contact\Controller\Index::XML_PATH_ENABLED,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            )
+            ->will($this->returnValue(false));
+
         $this->_controller->dispatch(
             $this->getMockForAbstractClass('\Magento\Framework\App\RequestInterface', [], '', false)
         );
diff --git a/app/code/Magento/Contact/Test/Unit/Helper/DataTest.php b/app/code/Magento/Contact/Test/Unit/Helper/DataTest.php
index cffd617f422b4327608f4a626a17a5772dc94a12..057cc4672acf0dcf72ce5b5df73a778e8bbd5f57 100644
--- a/app/code/Magento/Contact/Test/Unit/Helper/DataTest.php
+++ b/app/code/Magento/Contact/Test/Unit/Helper/DataTest.php
@@ -4,28 +4,34 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Contact\Test\Unit\Helper;
 
 class DataTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Contact\Helper\Data|\PHPUnit_Framework_MockObject_MockObject
+     * Helper
+     *
+     * @var \Magento\Contact\Helper\Data
      */
     protected $_helper;
 
     /**
+     * Scope config mock
+     *
      * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_scopeConfig;
 
     /**
+     * Customer session mock
+     *
      * @var \Magento\Customer\Model\Session|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_customerSession;
 
     /**
+     * Customer view helper mock
+     *
      * @var \Magento\Customer\Helper\View|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_customerViewHelper;
@@ -35,7 +41,9 @@ class DataTest extends \PHPUnit_Framework_TestCase
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $className = '\Magento\Contact\Helper\Data';
         $arguments = $objectManagerHelper->getConstructArguments($className);
-        /** @var \Magento\Framework\App\Helper\Context $context */
+        /**
+         * @var \Magento\Framework\App\Helper\Context $context
+         */
         $context = $arguments['context'];
         $this->_scopeConfig = $context->getScopeConfig();
         $this->_customerSession = $arguments['customerSession'];
@@ -58,7 +66,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
             ->method('getValue')
             ->will($this->returnValue(null));
 
-        $this->assertTrue(is_null($this->_helper->isEnabled()));
+        $this->assertTrue(null === $this->_helper->isEnabled());
     }
 
     public function testGetUserNameNotLoggedIn()
@@ -104,8 +112,12 @@ class DataTest extends \PHPUnit_Framework_TestCase
         $this->_customerSession->expects($this->once())
             ->method('isLoggedIn')
             ->will($this->returnValue(true));
+
         $customerDataObject = $this->getMock('\Magento\Customer\Api\Data\CustomerInterface', [], [], '', false);
-        $customerDataObject->expects($this->once())->method('getEmail')->will($this->returnValue('customer@email.com'));
+        $customerDataObject->expects($this->once())
+            ->method('getEmail')
+            ->will($this->returnValue('customer@email.com'));
+
         $this->_customerSession->expects($this->once())
             ->method('getCustomerDataObject')
             ->will($this->returnValue($customerDataObject));
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Processor/InvalidateCacheTest.php b/app/code/Magento/Indexer/Test/Unit/Model/Processor/InvalidateCacheTest.php
index 29628de82f5459902a9996b0e47e4beeb179ac2b..90c5606b85da7ec8612250701c9adfbc9d075742 100644
--- a/app/code/Magento/Indexer/Test/Unit/Model/Processor/InvalidateCacheTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Model/Processor/InvalidateCacheTest.php
@@ -4,33 +4,41 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Indexer\Test\Unit\Model\Processor;
 
 class InvalidateCacheTest extends \PHPUnit_Framework_TestCase
 {
     /**
+     * Tested plugin
+     *
      * @var \Magento\Indexer\Model\Processor\InvalidateCache
      */
     protected $plugin;
 
     /**
+     * Mock for context
+     *
      * @var \Magento\Indexer\Model\CacheContext|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $contextMock;
 
     /**
+     * Subject mock
+     *
      * @var \Magento\Indexer\Model\ActionInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $subjectMock;
 
     /**
+     * Event manager mock
+     *
      * @var \Magento\Framework\Event\Manager|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $eventManagerMock;
 
     /**
+     * Module manager mock
+     *
      * @var \Magento\Framework\Module\Manager|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $moduleManager;
@@ -40,20 +48,21 @@ class InvalidateCacheTest extends \PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->subjectMock = $this->getMock('Magento\Indexer\Model\Processor',
-            [], [], '', false);
-        $this->contextMock = $this->getMock('Magento\Indexer\Model\CacheContext',
-            [], [], '', false);
-        $this->eventManagerMock = $this->getMock('Magento\Framework\Event\Manager',
-            [], [], '', false);
-        $this->moduleManager = $this->getMock('Magento\Framework\Module\Manager',
-            [], [], '', false);
+        $this->subjectMock = $this->getMock('Magento\Indexer\Model\Processor', [], [], '', false);
+        $this->contextMock = $this->getMock('Magento\Indexer\Model\CacheContext', [], [], '', false);
+        $this->eventManagerMock = $this->getMock('Magento\Framework\Event\Manager', [], [], '', false);
+        $this->moduleManager = $this->getMock('Magento\Framework\Module\Manager', [], [], '', false);
         $this->plugin = new \Magento\Indexer\Model\Processor\InvalidateCache(
-            $this->contextMock, $this->eventManagerMock, $this->moduleManager);
+            $this->contextMock,
+            $this->eventManagerMock,
+            $this->moduleManager
+        );
     }
 
     /**
      * Test afterUpdateMview with enabled PageCache module
+     *
+     * @return void
      */
     public function testAfterUpdateMviewPageCacheEnabled()
     {
@@ -63,14 +72,17 @@ class InvalidateCacheTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(true));
         $this->eventManagerMock->expects($this->once())
             ->method('dispatch')
-            ->with($this->equalTo('clean_cache_after_reindex'),
-                $this->equalTo(['object' => $this->contextMock]));
-        $actualResult = $this->plugin->afterUpdateMview($this->subjectMock);
-        $this->assertNull($actualResult);
+            ->with(
+                $this->equalTo('clean_cache_after_reindex'),
+                $this->equalTo(['object' => $this->contextMock])
+            );
+        $this->plugin->afterUpdateMview($this->subjectMock);
     }
 
     /**
-     * afterUpdateMview with disabled PageCache module
+     * Test afterUpdateMview with disabled PageCache module
+     *
+     * @return void
      */
     public function testAfterUpdateMviewPageCacheDisabled()
     {
@@ -80,7 +92,6 @@ class InvalidateCacheTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(false));
         $this->eventManagerMock->expects($this->never())
             ->method('dispatch');
-        $actualResult = $this->plugin->afterUpdateMview($this->subjectMock);
-        $this->assertNull($actualResult);
+        $this->plugin->afterUpdateMview($this->subjectMock);
     }
 }
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Filter/Form.php b/app/code/Magento/Reports/Block/Adminhtml/Filter/Form.php
index 7c18123b5fa881d59ad91ce148ca94d2ed168e22..f9fe3f7290440886646b29df65165e0aa76bc81c 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Filter/Form.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Filter/Form.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Block\Adminhtml\Filter;
 
 /**
@@ -42,6 +40,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
      * @param string $fieldId
      * @param bool $visibility
      *
+     * @codeCoverageIgnore
      * @return void
      */
     public function setFieldVisibility($fieldId, $visibility)
@@ -95,6 +94,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
      * @param string $key
      * @param string $value
      * @return $this
+     * @codeCoverageIgnore
      */
     public function addReportTypeOption($key, $value)
     {
@@ -113,7 +113,13 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
 
         /** @var \Magento\Framework\Data\Form $form */
         $form = $this->_formFactory->create(
-            ['data' => ['id' => 'filter_form', 'action' => $actionUrl, 'method' => 'get']]
+            [
+                'data' => [
+                    'id' => 'filter_form',
+                    'action' => $actionUrl,
+                    'method' => 'get'
+                ]
+            ]
         );
 
         $htmlIdPrefix = 'sales_report_';
@@ -127,7 +133,11 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
         $fieldset->addField(
             'report_type',
             'select',
-            ['name' => 'report_type', 'options' => $this->_reportTypeOptions, 'label' => __('Match Period To')]
+            [
+                'name' => 'report_type',
+                'options' => $this->_reportTypeOptions,
+                'label' => __('Match Period To')
+            ]
         );
 
         $fieldset->addField(
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Grid.php
index 9fe1fa27a2c481ff73d35930f66aec1e5ea298e6..463339d2949ad37ca67bdb46c17ea109bb77ddb5 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Grid.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Block\Adminhtml;
 
 /**
@@ -81,7 +79,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
     {
         $filter = $this->getParam($this->getVarNameFilter(), null);
 
-        if (is_null($filter)) {
+        if (null === $filter) {
             $filter = $this->_defaultFilter;
         }
 
@@ -154,7 +152,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
     /**
      * Get allowed stores
      *
-     * @return array
+     * @return array|\int[]
      */
     protected function _getAllowedStoreIds()
     {
@@ -205,7 +203,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
      * Set visibility of store switcher
      *
      * @param bool $visible
-     *
+     * @codeCoverageIgnore
      * @return void
      */
     public function setStoreSwitcherVisibility($visible = true)
@@ -215,6 +213,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
 
     /**
      * Return visibility of store switcher
+     * @codeCoverageIgnore
      *
      * @return bool
      * @SuppressWarnings(PHPMD.BooleanGetMethodName)
@@ -226,6 +225,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
 
     /**
      * Return store switcher html
+     * @codeCoverageIgnore
      *
      * @return string
      */
@@ -238,8 +238,8 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
      * Set visibility of date filter
      *
      * @param bool $visible
-     *
      * @return void
+     * @codeCoverageIgnore
      */
     public function setDateFilterVisibility($visible = true)
     {
@@ -248,6 +248,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
 
     /**
      * Return visibility of date filter
+     * @codeCoverageIgnore
      *
      * @return bool
      * @SuppressWarnings(PHPMD.BooleanGetMethodName)
@@ -259,6 +260,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
 
     /**
      * Return date filter html
+     * @codeCoverageIgnore
      *
      * @return string
      */
@@ -289,6 +291,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
 
     /**
      * Return refresh button html
+     * @codeCoverageIgnore
      *
      * @return string
      */
@@ -302,8 +305,8 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
      *
      * @param string $name
      * @param string $value
-     *
      * @return void
+     * @codeCoverageIgnore
      */
     public function setFilter($name, $value)
     {
@@ -331,8 +334,8 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
      * Set sub-report rows count
      *
      * @param int $size
-     *
      * @return void
+     * @codeCoverageIgnore
      */
     public function setSubReportSize($size)
     {
@@ -341,6 +344,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
 
     /**
      * Return sub-report rows count
+     * @codeCoverageIgnore
      *
      * @return int
      */
@@ -353,6 +357,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
      * Retrieve errors
      *
      * @return array
+     * @codeCoverageIgnore
      */
     public function getErrors()
     {
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Grid/AbstractGrid.php b/app/code/Magento/Reports/Block/Adminhtml/Grid/AbstractGrid.php
index 68b0b78bbbd23ea397af64e076ece23c9972025a..39813ec48946af6e05b0aae0d7fdc8ed516e2a65 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Grid/AbstractGrid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Grid/AbstractGrid.php
@@ -71,6 +71,8 @@ class AbstractGrid extends \Magento\Backend\Block\Widget\Grid\Extended
     }
 
     /**
+     * Pseudo constructor
+     *
      * @return void
      */
     protected function _construct()
@@ -86,6 +88,10 @@ class AbstractGrid extends \Magento\Backend\Block\Widget\Grid\Extended
     }
 
     /**
+     * Get resource collection name
+     *
+     * @codeCoverageIgnore
+     *
      * @return string
      */
     public function getResourceCollectionName()
@@ -339,9 +345,11 @@ class AbstractGrid extends \Magento\Backend\Block\Widget\Grid\Extended
     }
 
     /**
-     * @param array $storeIds
+     * StoreIds setter
      *
+     * @param array $storeIds
      * @return $this
+     * @codeCoverageIgnore
      */
     public function setStoreIds($storeIds)
     {
@@ -396,6 +404,7 @@ class AbstractGrid extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Framework\Object $filterData
      * @return $this
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     * @codeCoverageIgnore
      */
     protected function _addCustomFilter($collection, $filterData)
     {
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Grid/Column/Renderer/Currency.php b/app/code/Magento/Reports/Block/Adminhtml/Grid/Column/Renderer/Currency.php
index ac9cf8c700bd7efc13558d6fb0161388dd2de4e3..30555dbca8d2b14a12cff014d8e3da1b667a6591 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Grid/Column/Renderer/Currency.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Grid/Column/Renderer/Currency.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Block\Adminhtml\Grid\Column\Renderer;
 
 /**
@@ -24,15 +22,15 @@ class Currency extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\Curren
     public function render(\Magento\Framework\Object $row)
     {
         $data = $row->getData($this->getColumn()->getIndex());
-        $currency_code = $this->_getCurrencyCode($row);
+        $currencyCode = $this->_getCurrencyCode($row);
 
-        if (!$currency_code) {
+        if (!$currencyCode) {
             return $data;
         }
 
         $data = floatval($data) * $this->_getRate($row);
         $data = sprintf("%f", $data);
-        $data = $this->_localeCurrency->getCurrency($currency_code)->toCurrency($data);
+        $data = $this->_localeCurrency->getCurrency($currencyCode)->toCurrency($data);
         return $data;
     }
 }
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Grid/Shopcart.php b/app/code/Magento/Reports/Block/Adminhtml/Grid/Shopcart.php
index 023f4f4bac729ed0fb6e44b7ffc123a595464b1a..0c635887cf0bc156ba384355eacf96de09ab76cd 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Grid/Shopcart.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Grid/Shopcart.php
@@ -28,6 +28,7 @@ class Shopcart extends \Magento\Backend\Block\Widget\Grid\Extended
 
     /**
      * StoreIds setter
+     * @codeCoverageIgnore
      *
      * @param array $storeIds
      * @return $this
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Product.php b/app/code/Magento/Reports/Block/Adminhtml/Product.php
index 9c5cad9fc76f8398a9cef6677f51183ee0d94e9d..4adc6dccbc09aa166b571c6e73e39ace1ed60187 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Product.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Product.php
@@ -13,7 +13,7 @@ namespace Magento\Reports\Block\Adminhtml;
 class Product extends \Magento\Backend\Block\Widget\Grid\Container
 {
     /**
-     * @return void
+     * {@inheritdoc}
      */
     protected function _construct()
     {
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers.php
index d872439b7f8e6417d2ea613f868105c0764a20fb..32a25599702e9d312ac79160b5d0d5b8f38199ca 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers.php
@@ -13,12 +13,14 @@ namespace Magento\Reports\Block\Adminhtml\Sales;
 class Bestsellers extends \Magento\Backend\Block\Widget\Grid\Container
 {
     /**
+     * Template
+     *
      * @var string
      */
     protected $_template = 'report/grid/container.phtml';
 
     /**
-     * @return void
+     * {@inheritdoc}
      */
     protected function _construct()
     {
@@ -35,6 +37,8 @@ class Bestsellers extends \Magento\Backend\Block\Widget\Grid\Container
     }
 
     /**
+     * Get filter URL
+     *
      * @return string
      */
     public function getFilterUrl()
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers/Grid.php
index d6820a811970fded00679f36d5ad6564ccae7e36..bedef6d74acceb8be7e61ef3d045faf17f1c98be 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers/Grid.php
@@ -14,12 +14,15 @@ namespace Magento\Reports\Block\Adminhtml\Sales\Bestsellers;
 class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
 {
     /**
+     * GROUP BY criteria
+     *
      * @var string
      */
     protected $_columnGroupBy = 'period';
 
     /**
-     * @return void
+     * {@inheritdoc}
+     * @codeCoverageIgnore
      */
     protected function _construct()
     {
@@ -28,7 +31,8 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     }
 
     /**
-     * @return string
+     * {@inheritdoc}
+     * @codeCoverageIgnore
      */
     public function getResourceCollectionName()
     {
@@ -36,7 +40,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     }
 
     /**
-     * @return \Magento\Backend\Block\Widget\Grid\Extended
+     * {@inheritdoc}
      */
     protected function _prepareColumns()
     {
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons.php
index c14f1c248b15bdbd2c3ee8a859d9a3fe32c41c6d..cfd20f5e3a468e5948e746da801ddc2b8291db3d 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons.php
@@ -13,12 +13,14 @@ namespace Magento\Reports\Block\Adminhtml\Sales;
 class Coupons extends \Magento\Backend\Block\Widget\Grid\Container
 {
     /**
+     * Template file
+     *
      * @var string
      */
     protected $_template = 'report/grid/container.phtml';
 
     /**
-     * @return void
+     * {@inheritdoc}
      */
     protected function _construct()
     {
@@ -35,6 +37,8 @@ class Coupons extends \Magento\Backend\Block\Widget\Grid\Container
     }
 
     /**
+     * Get filter URL
+     *
      * @return string
      */
     public function getFilterUrl()
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons/Grid.php
index c04265b1c531f9c8eaef861a81eacdd8998afc84..cf79f4c06682831286c114354b47d1943008b5ed 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons/Grid.php
@@ -14,12 +14,15 @@ namespace Magento\Reports\Block\Adminhtml\Sales\Coupons;
 class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
 {
     /**
+     * GROUP BY criteria
+     *
      * @var string
      */
     protected $_columnGroupBy = 'period';
 
     /**
-     * @return void
+     * {@inheritdoc}
+     * @codeCoverageIgnore
      */
     protected function _construct()
     {
@@ -29,7 +32,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     }
 
     /**
-     * @return string
+     * {@inheritdoc}
      */
     public function getResourceCollectionName()
     {
@@ -41,7 +44,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     }
 
     /**
-     * @return \Magento\Backend\Block\Widget\Grid\Extended
+     * {@inheritdoc}
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     protected function _prepareColumns()
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Grid/Column/Renderer/Date.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Grid/Column/Renderer/Date.php
index b18faf62ef5530eefda4516a5de9410c0277468a..30b6fccb13435e396ce06d6383768b301f0f399c 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Grid/Column/Renderer/Date.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Grid/Column/Renderer/Date.php
@@ -13,6 +13,8 @@ use Magento\Framework\Locale\Bundle\DataBundle;
 class Date extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\Date
 {
     /**
+     * Constructor
+     *
      * @param \Magento\Backend\Block\Context $context
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param array $data
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced.php
index 3b6cf45846551dae90daad88e9d1b02f3e186793..e6de75fb9545e9723b5a02f1e87ee9f4cc434259 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced.php
@@ -13,12 +13,14 @@ namespace Magento\Reports\Block\Adminhtml\Sales;
 class Invoiced extends \Magento\Backend\Block\Widget\Grid\Container
 {
     /**
+     * Template file
+     *
      * @var string
      */
     protected $_template = 'report/grid/container.phtml';
 
     /**
-     * @return void
+     * {@inheritdoc}
      */
     protected function _construct()
     {
@@ -35,6 +37,8 @@ class Invoiced extends \Magento\Backend\Block\Widget\Grid\Container
     }
 
     /**
+     * Get filter URL
+     *
      * @return string
      */
     public function getFilterUrl()
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced/Grid.php
index 414c2e775872a1e9a36795e820c9b417533c1416..854520bafad351539f350b4f1c9369db8fdd0372 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced/Grid.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Block\Adminhtml\Sales\Invoiced;
 
 /**
@@ -17,12 +15,15 @@ namespace Magento\Reports\Block\Adminhtml\Sales\Invoiced;
 class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
 {
     /**
+     * GROUP BY condition
+     *
      * @var string
      */
     protected $_columnGroupBy = 'period';
 
     /**
-     * @return void
+     * {@inheritdoc}
+     * @codeCoverageIgnore
      */
     protected function _construct()
     {
@@ -31,18 +32,17 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     }
 
     /**
-     * @return string
+     * {@inheritdoc}
      */
     public function getResourceCollectionName()
     {
-        return $this->getFilterData()->getData(
-            'report_type'
-        ) ==
-            'created_at_invoice' ? 'Magento\Sales\Model\Resource\Report\Invoiced\Collection\Invoiced' : 'Magento\Sales\Model\Resource\Report\Invoiced\Collection\Order';
+        return ($this->getFilterData()->getData('report_type')) == 'created_at_invoice'
+            ? 'Magento\Sales\Model\Resource\Report\Invoiced\Collection\Invoiced'
+            : 'Magento\Sales\Model\Resource\Report\Invoiced\Collection\Order';
     }
 
     /**
-     * @return \Magento\Backend\Block\Widget\Grid\Extended
+     * {@inheritdoc}
      */
     protected function _prepareColumns()
     {
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded.php
index 6ff26a3822b8a7f76f37ff4a046314317f538db0..c48dee92771a07839ef2e352350d0ed9a52f8446 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded.php
@@ -13,12 +13,14 @@ namespace Magento\Reports\Block\Adminhtml\Sales;
 class Refunded extends \Magento\Backend\Block\Widget\Grid\Container
 {
     /**
+     * Template file
+     *
      * @var string
      */
     protected $_template = 'report/grid/container.phtml';
 
     /**
-     * @return void
+     * {@inheritdoc}
      */
     protected function _construct()
     {
@@ -35,6 +37,8 @@ class Refunded extends \Magento\Backend\Block\Widget\Grid\Container
     }
 
     /**
+     * Get filter URL
+     *
      * @return string
      */
     public function getFilterUrl()
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded/Grid.php
index e5f68a315f74013a51de8df19dc74cfbc996efb5..c3964e9675cd7f4b67807df54e548cef34028d13 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded/Grid.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Block\Adminhtml\Sales\Refunded;
 
 /**
@@ -17,12 +15,15 @@ namespace Magento\Reports\Block\Adminhtml\Sales\Refunded;
 class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
 {
     /**
+     * GROUP BY criteria
+     *
      * @var string
      */
     protected $_columnGroupBy = 'period';
 
     /**
-     * @return void
+     * {@inheritdoc}
+     * @codeCoverageIgnore
      */
     protected function _construct()
     {
@@ -31,18 +32,17 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     }
 
     /**
-     * @return string
+     * {@inheritdoc}
      */
     public function getResourceCollectionName()
     {
-        return $this->getFilterData()->getData(
-            'report_type'
-        ) ==
-            'created_at_refunded' ? 'Magento\Sales\Model\Resource\Report\Refunded\Collection\Refunded' : 'Magento\Sales\Model\Resource\Report\Refunded\Collection\Order';
+        return $this->getFilterData()->getData('report_type') == 'created_at_refunded'
+            ? 'Magento\Sales\Model\Resource\Report\Refunded\Collection\Refunded'
+            : 'Magento\Sales\Model\Resource\Report\Refunded\Collection\Order';
     }
 
     /**
-     * @return \Magento\Backend\Block\Widget\Grid\Extended
+     * {@inheritdoc}
      */
     protected function _prepareColumns()
     {
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales.php
index 6c6ca70730a2111e637426a159365a973a5be8e3..ad43f74e52646da9445d0d8a2c12500f3b761f8f 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales.php
@@ -13,12 +13,14 @@ namespace Magento\Reports\Block\Adminhtml\Sales;
 class Sales extends \Magento\Backend\Block\Widget\Grid\Container
 {
     /**
+     * Template file
+     *
      * @var string
      */
     protected $_template = 'report/grid/container.phtml';
 
     /**
-     * @return void
+     * {@inheritdoc}
      */
     protected function _construct()
     {
@@ -35,6 +37,8 @@ class Sales extends \Magento\Backend\Block\Widget\Grid\Container
     }
 
     /**
+     * Get filter URL
+     *
      * @return string
      */
     public function getFilterUrl()
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales/Grid.php
index 012e170b2c269dac90cdd6b43d1461edf4aa4ee4..6f7b99bb8941fe4cef1547a952e9e00583bfb9c0 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales/Grid.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Block\Adminhtml\Sales\Sales;
 
 /**
@@ -17,12 +15,15 @@ namespace Magento\Reports\Block\Adminhtml\Sales\Sales;
 class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
 {
     /**
+     * GROUP BY criteria
+     *
      * @var string
      */
     protected $_columnGroupBy = 'period';
 
     /**
-     * @return void
+     * {@inheritdoc}
+     * @codeCoverageIgnore
      */
     protected function _construct()
     {
@@ -31,18 +32,18 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     }
 
     /**
-     * @return string
+     * {@inheritdoc}
      */
     public function getResourceCollectionName()
     {
-        return $this->getFilterData()->getData(
-            'report_type'
-        ) ==
-            'updated_at_order' ? 'Magento\Sales\Model\Resource\Report\Order\Updatedat\Collection' : 'Magento\Sales\Model\Resource\Report\Order\Collection';
+        return $this->getFilterData()->getData('report_type') == 'updated_at_order'
+            ? 'Magento\Sales\Model\Resource\Report\Order\Updatedat\Collection'
+            : 'Magento\Sales\Model\Resource\Report\Order\Collection';
     }
 
     /**
-     * @return \Magento\Backend\Block\Widget\Grid\Extended
+     * {@inheritdoc}
+     *
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     protected function _prepareColumns()
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping.php
index 0499c0ee07af14dbf113e5a4fc6aa388bdb4f04e..e72406788d3ec9a30fe366c536e7d68d80fb222d 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping.php
@@ -13,12 +13,14 @@ namespace Magento\Reports\Block\Adminhtml\Sales;
 class Shipping extends \Magento\Backend\Block\Widget\Grid\Container
 {
     /**
+     * Template file
+     *
      * @var string
      */
     protected $_template = 'report/grid/container.phtml';
 
     /**
-     * @return void
+     * {@inheritdoc}
      */
     protected function _construct()
     {
@@ -35,6 +37,8 @@ class Shipping extends \Magento\Backend\Block\Widget\Grid\Container
     }
 
     /**
+     * Get filter URL
+     *
      * @return string
      */
     public function getFilterUrl()
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping/Grid.php
index ee594aaa3447565990652114cee7ba498b1f3011..28d8bbe6b196fb55963f61797c95a09962960e50 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping/Grid.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Block\Adminhtml\Sales\Shipping;
 
 /**
@@ -17,12 +15,15 @@ namespace Magento\Reports\Block\Adminhtml\Sales\Shipping;
 class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
 {
     /**
+     * Group by criteria
+     *
      * @var string
      */
     protected $_columnGroupBy = 'period';
 
     /**
-     * @return void
+     * {@inheritdoc}
+     * @codeCoverageIgnore
      */
     protected function _construct()
     {
@@ -32,18 +33,17 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     }
 
     /**
-     * @return string
+     * {@inheritdoc}
      */
     public function getResourceCollectionName()
     {
-        return $this->getFilterData()->getData(
-            'report_type'
-        ) ==
-            'created_at_shipment' ? 'Magento\Sales\Model\Resource\Report\Shipping\Collection\Shipment' : 'Magento\Sales\Model\Resource\Report\Shipping\Collection\Order';
+        return $this->getFilterData()->getData('report_type') == 'created_at_shipment'
+            ? 'Magento\Sales\Model\Resource\Report\Shipping\Collection\Shipment'
+            : 'Magento\Sales\Model\Resource\Report\Shipping\Collection\Order';
     }
 
     /**
-     * @return \Magento\Backend\Block\Widget\Grid\Extended
+     * {@inheritdoc}
      */
     protected function _prepareColumns()
     {
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax.php
index 767760eabb655e8849f345c7db16503ce145432e..ed27f1616518c78751c902e7433f2c8a35b86511 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax.php
@@ -13,12 +13,14 @@ namespace Magento\Reports\Block\Adminhtml\Sales;
 class Tax extends \Magento\Backend\Block\Widget\Grid\Container
 {
     /**
+     * Template file
+     *
      * @var string
      */
     protected $_template = 'report/grid/container.phtml';
 
     /**
-     * @return void
+     * {@inheritdoc}
      */
     protected function _construct()
     {
@@ -35,6 +37,8 @@ class Tax extends \Magento\Backend\Block\Widget\Grid\Container
     }
 
     /**
+     * Get filter URL
+     *
      * @return string
      */
     public function getFilterUrl()
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax/Grid.php
index 48c3a647299b4b3cc76dde1dd63ed36a0e05f7a2..7196f1ff332533630ba0241383ffc6cd6a12e030 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax/Grid.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Block\Adminhtml\Sales\Tax;
 
 /**
@@ -17,16 +15,22 @@ namespace Magento\Reports\Block\Adminhtml\Sales\Tax;
 class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
 {
     /**
+     * GROUP BY criteria
+     *
      * @var string
      */
     protected $_columnGroupBy = 'period';
 
     /**
+     * Config factory
+     *
      * @var \Magento\Sales\Model\Order\ConfigFactory
      */
     protected $_configFactory;
 
     /**
+     * Constructor
+     *
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Reports\Model\Resource\Report\Collection\Factory $resourceFactory
@@ -49,7 +53,8 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     }
 
     /**
-     * @return void
+     * {@inheritdoc}
+     * @codeCoverageIgnore
      */
     protected function _construct()
     {
@@ -59,18 +64,17 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     }
 
     /**
-     * @return string
+     * {@inheritdoc}
      */
     public function getResourceCollectionName()
     {
-        return $this->getFilterData()->getData(
-            'report_type'
-        ) ==
-            'updated_at_order' ? 'Magento\Tax\Model\Resource\Report\Updatedat\Collection' : 'Magento\Tax\Model\Resource\Report\Collection';
+        return $this->getFilterData()->getData('report_type') == 'updated_at_order'
+            ? 'Magento\Tax\Model\Resource\Report\Updatedat\Collection'
+            : 'Magento\Tax\Model\Resource\Report\Collection';
     }
 
     /**
-     * @return \Magento\Backend\Block\Widget\Grid\Extended
+     * {@inheritdoc}
      */
     protected function _prepareColumns()
     {
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Wishlist.php b/app/code/Magento/Reports/Block/Adminhtml/Wishlist.php
index 690c98b4d692559de2d645c23623801f0ebe4705..df114f5e653e6b121874ab9aad21a71174abcb43 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Wishlist.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Wishlist.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Block\Adminhtml;
 
 /**
@@ -16,36 +14,8 @@ namespace Magento\Reports\Block\Adminhtml;
 class Wishlist extends \Magento\Backend\Block\Template
 {
     /**
-     * @var int
-     */
-    public $wishlists_count;
-
-    /**
-     * @var int
-     */
-    public $items_bought;
-
-    /**
-     * @var int
-     */
-    public $shared_count;
-
-    /**
-     * @var int
-     */
-    public $referrals_count;
-
-    /**
-     * @var int
-     */
-    public $conversions_count;
-
-    /**
-     * @var int
-     */
-    public $customer_with_wishlist;
-
-    /**
+     * Template file
+     *
      * @var string
      */
     protected $_template = 'report/wishlist.phtml';
@@ -58,6 +28,8 @@ class Wishlist extends \Magento\Backend\Block\Template
     protected $_wishlistFactory;
 
     /**
+     * Constructor
+     *
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Reports\Model\Resource\Wishlist\CollectionFactory $wishlistFactory
      * @param array $data
@@ -72,9 +44,9 @@ class Wishlist extends \Magento\Backend\Block\Template
     }
 
     /**
-     * @return $this
+     * {@inheritdoc}
      */
-    public function _beforeToHtml()
+    protected function _beforeToHtml()
     {
         $this->setChild(
             'grid',
diff --git a/app/code/Magento/Reports/Block/Product/AbstractProduct.php b/app/code/Magento/Reports/Block/Product/AbstractProduct.php
index dfe51eea66fed23301c4f8d4a0d9bdb6945e4d69..cf420b4d3cebeddc38077c1f3619ac4ae5fcf403 100644
--- a/app/code/Magento/Reports/Block/Product/AbstractProduct.php
+++ b/app/code/Magento/Reports/Block/Product/AbstractProduct.php
@@ -81,11 +81,11 @@ abstract class AbstractProduct extends \Magento\Catalog\Block\Product\AbstractPr
     }
 
     /**
-     * Retrieve Product Index model instance
+     * Public method for retrieve Product Index model
      *
      * @return \Magento\Reports\Model\Product\Index\AbstractIndex
      */
-    protected function _getModel()
+    public function getModel()
     {
         try {
             $model = $this->_indexFactory->get($this->_indexType);
@@ -96,16 +96,6 @@ abstract class AbstractProduct extends \Magento\Catalog\Block\Product\AbstractPr
         return $model;
     }
 
-    /**
-     * Public method for retrieve Product Index model
-     *
-     * @return \Magento\Reports\Model\Product\Index\AbstractIndex
-     */
-    public function getModel()
-    {
-        return $this->_getModel();
-    }
-
     /**
      * Retrieve Index Product Collection
      *
@@ -116,14 +106,14 @@ abstract class AbstractProduct extends \Magento\Catalog\Block\Product\AbstractPr
         if ($this->_collection === null) {
             $attributes = $this->_catalogConfig->getProductAttributes();
 
-            $this->_collection = $this->_getModel()->getCollection()->addAttributeToSelect($attributes);
+            $this->_collection = $this->getModel()->getCollection()->addAttributeToSelect($attributes);
 
             if ($this->getCustomerId()) {
                 $this->_collection->setCustomerId($this->getCustomerId());
             }
 
             $this->_collection->excludeProductIds(
-                $this->_getModel()->getExcludeProductIds()
+                $this->getModel()->getExcludeProductIds()
             )->addUrlRewrite()->setPageSize(
                 $this->getPageSize()
             )->setCurPage(
@@ -152,7 +142,7 @@ abstract class AbstractProduct extends \Magento\Catalog\Block\Product\AbstractPr
      */
     public function getCount()
     {
-        if (!$this->_getModel()->getCount()) {
+        if (!$this->getModel()->getCount()) {
             return 0;
         }
         return $this->getItemsCollection()->count();
diff --git a/app/code/Magento/Reports/Block/Product/Compared.php b/app/code/Magento/Reports/Block/Product/Compared.php
index 6693d0053ea87edac053ff4e54bb3ada3de04152..67e3d641b829a4c8add0ba1df7fa85749c9f79f7 100644
--- a/app/code/Magento/Reports/Block/Product/Compared.php
+++ b/app/code/Magento/Reports/Block/Product/Compared.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Block\Product;
 
 /**
@@ -15,6 +13,9 @@ namespace Magento\Reports\Block\Product;
  */
 class Compared extends \Magento\Reports\Block\Product\AbstractProduct
 {
+    /**
+     * Config path for compared products count
+     */
     const XML_PATH_RECENTLY_COMPARED_COUNT = 'catalog/recently_products/compared_count';
 
     /**
@@ -34,7 +35,10 @@ class Compared extends \Magento\Reports\Block\Product\AbstractProduct
         if ($this->hasData('page_size')) {
             return $this->getData('page_size');
         }
-        return $this->_scopeConfig->getValue(self::XML_PATH_RECENTLY_COMPARED_COUNT, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
+        return $this->_scopeConfig->getValue(
+            self::XML_PATH_RECENTLY_COMPARED_COUNT,
+            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+        );
     }
 
     /**
diff --git a/app/code/Magento/Reports/Block/Product/Viewed.php b/app/code/Magento/Reports/Block/Product/Viewed.php
index 947c90c89505ce4e8957ff7870c13862da31f526..9a689ec5a6da59c758e9b85e01125a27f897089e 100644
--- a/app/code/Magento/Reports/Block/Product/Viewed.php
+++ b/app/code/Magento/Reports/Block/Product/Viewed.php
@@ -4,17 +4,20 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Block\Product;
 
+use \Magento\Framework\Object\IdentityInterface;
+
 /**
  * Reports Recently Viewed Products Block
  *
  * @author     Magento Core Team <core@magentocommerce.com>
  */
-class Viewed extends \Magento\Reports\Block\Product\AbstractProduct implements \Magento\Framework\Object\IdentityInterface
+class Viewed extends AbstractProduct implements IdentityInterface
 {
+    /**
+     * Config path to recently viewed product count
+     */
     const XML_PATH_RECENTLY_VIEWED_COUNT = 'catalog/recently_products/viewed_count';
 
     /**
@@ -34,7 +37,10 @@ class Viewed extends \Magento\Reports\Block\Product\AbstractProduct implements \
         if ($this->hasData('page_size')) {
             return $this->getData('page_size');
         }
-        return $this->_scopeConfig->getValue(self::XML_PATH_RECENTLY_VIEWED_COUNT, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
+        return $this->_scopeConfig->getValue(
+            self::XML_PATH_RECENTLY_VIEWED_COUNT,
+            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+        );
     }
 
     /**
diff --git a/app/code/Magento/Reports/Helper/Data.php b/app/code/Magento/Reports/Helper/Data.php
index 50856d3b37cde36d9b1066dcc9aa5d608a004b9b..c33b0791a559ec899c8477972f803320245df473 100644
--- a/app/code/Magento/Reports/Helper/Data.php
+++ b/app/code/Magento/Reports/Helper/Data.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 /**
  * Reports data helper
  */
@@ -23,16 +21,22 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     const REPORT_PERIOD_TYPE_YEAR = 'year';
 
     /**
+     * Item factory
+     *
      * @var \Magento\Reports\Model\ItemFactory
      */
     protected $_itemFactory;
 
     /**
+     * Constructor
+     *
      * @param \Magento\Framework\App\Helper\Context $context
      * @param \Magento\Reports\Model\ItemFactory $itemFactory
      */
-    public function __construct(\Magento\Framework\App\Helper\Context $context, \Magento\Reports\Model\ItemFactory $itemFactory)
-    {
+    public function __construct(
+        \Magento\Framework\App\Helper\Context $context,
+        \Magento\Reports\Model\ItemFactory $itemFactory
+    ) {
         parent::__construct($context);
         $this->_itemFactory = $itemFactory;
     }
@@ -55,7 +59,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
 
         $dateStart = new \DateTime($from);
         $dateEnd = new \DateTime($to);
-        while ($dateStart->diff($dateEnd)->invert = 0) {
+        while ($dateStart->diff($dateEnd)->invert == 0) {
             switch ($period) {
                 case self::REPORT_PERIOD_TYPE_DAY:
                     $intervals[] = $dateStart->format('Y-m-d');
diff --git a/app/code/Magento/Reports/Model/Flag.php b/app/code/Magento/Reports/Model/Flag.php
index d289a0ce35412498b963fb7ce3e3059591fcf7f5..3782a655f24862cbf5dee4291ed8ab0832a9fa3e 100644
--- a/app/code/Magento/Reports/Model/Flag.php
+++ b/app/code/Magento/Reports/Model/Flag.php
@@ -30,6 +30,7 @@ class Flag extends \Magento\Framework\Flag
 
     /**
      * Setter for flag code
+     * @codeCoverageIgnore
      *
      * @param string $code
      * @return $this
diff --git a/app/code/Magento/Reports/Model/Grouped/Collection.php b/app/code/Magento/Reports/Model/Grouped/Collection.php
index 6f8e9d561dad6cd65a5ea80b76e2a15465c1f50f..3f00e36c1a7a7ec4d78f975baaa33bd3bc3f747d 100644
--- a/app/code/Magento/Reports/Model/Grouped/Collection.php
+++ b/app/code/Magento/Reports/Model/Grouped/Collection.php
@@ -25,6 +25,7 @@ class Collection extends \Magento\Framework\Data\Collection
 
     /**
      * Set column to group by
+     * @codeCoverageIgnore
      *
      * @param string $column
      * @return $this
@@ -61,6 +62,7 @@ class Collection extends \Magento\Framework\Data\Collection
 
     /**
      * Setter for resource collection
+     * @codeCoverageIgnore
      *
      * @param DbCollection $collection
      * @return $this
diff --git a/app/code/Magento/Reports/Model/Item.php b/app/code/Magento/Reports/Model/Item.php
index ecc9c805e91722136affdff251c4123ca873613c..01a60c397c5eab8bc83b6345979e1f982601ee9b 100644
--- a/app/code/Magento/Reports/Model/Item.php
+++ b/app/code/Magento/Reports/Model/Item.php
@@ -19,6 +19,7 @@ class Item extends \Magento\Framework\Object
 
     /**
      * Set is empty indicator
+     * @codeCoverageIgnore
      *
      * @param bool $flag
      * @return $this
@@ -31,6 +32,7 @@ class Item extends \Magento\Framework\Object
 
     /**
      * Get is empty indicator
+     * @codeCoverageIgnore
      *
      * @return bool
      * @SuppressWarnings(PHPMD.BooleanGetMethodName)
@@ -49,6 +51,7 @@ class Item extends \Magento\Framework\Object
 
     /**
      * Get children
+     * @codeCoverageIgnore
      *
      * @return array
      */
@@ -59,6 +62,7 @@ class Item extends \Magento\Framework\Object
 
     /**
      * Set children
+     * @codeCoverageIgnore
      *
      * @param array $children
      * @return $this
diff --git a/app/code/Magento/Reports/Model/Resource/Event/Collection.php b/app/code/Magento/Reports/Model/Resource/Event/Collection.php
index 7a515823998ef5c5787fbd9fdb1fd72f4f30ee00..94124028fdb3716c430e6c44bfdf3497786988b0 100644
--- a/app/code/Magento/Reports/Model/Resource/Event/Collection.php
+++ b/app/code/Magento/Reports/Model/Resource/Event/Collection.php
@@ -32,6 +32,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
 
     /**
      * Add store ids filter
+     * @codeCoverageIgnore
      *
      * @param array $storeIds
      * @return $this
diff --git a/app/code/Magento/Reports/Model/Resource/Order/Collection.php b/app/code/Magento/Reports/Model/Resource/Order/Collection.php
index 60b24016381f63220ffc29feabe48525f12be626..07c2e2aa8c4a76d1d262f38904d52b00ea622f99 100644
--- a/app/code/Magento/Reports/Model/Resource/Order/Collection.php
+++ b/app/code/Magento/Reports/Model/Resource/Order/Collection.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Model\Resource\Order;
 
 use Magento\Framework\DB\Select;
@@ -40,26 +38,36 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
     protected $_scopeConfig;
 
     /**
+     * Store manager instance
+     *
      * @var \Magento\Store\Model\StoreManagerInterface
      */
     protected $_storeManager;
 
     /**
+     * Locale date instance
+     *
      * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface
      */
     protected $_localeDate;
 
     /**
+     * Order config instance
+     *
      * @var \Magento\Sales\Model\Order\Config
      */
     protected $_orderConfig;
 
     /**
+     * Reports order factory
+     *
      * @var \Magento\Sales\Model\Resource\Report\OrderFactory
      */
     protected $_reportOrderFactory;
 
     /**
+     * Constructor
+     *
      * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
@@ -128,6 +136,7 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
      * Retrieve is live flag for rep
      *
      * @return bool
+     * @codeCoverageIgnore
      */
     public function isLive()
     {
@@ -162,7 +171,7 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
      */
     protected function _getSalesAmountExpression()
     {
-        if (is_null($this->_salesAmountExpression)) {
+        if (null === $this->_salesAmountExpression) {
             $adapter = $this->getConnection();
             $expressionTransferObject = new \Magento\Framework\Object(
                 [
@@ -257,8 +266,8 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
      * Prepare report summary from aggregated data
      *
      * @param string $range
-     * @param mixed $customStart
-     * @param mixed $customEnd
+     * @param string|null $customStart
+     * @param string|null $customEnd
      * @return $this
      */
     protected function _prepareSummaryAggregated($range, $customStart, $customEnd)
@@ -271,13 +280,13 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
         $rangePeriod = $this->_getRangeExpressionForAttribute($range, 'main_table.period');
 
         $tableName = $this->getConnection()->quoteIdentifier('main_table.period');
-        $rangePeriod2 = str_replace($tableName, "MIN({$tableName})", $rangePeriod);
+        $rangePeriodAggregateStmt = str_replace($tableName, "MIN({$tableName})", $rangePeriod);
 
         $this->getSelect()->columns(
             [
                 'revenue' => 'SUM(main_table.total_revenue_amount)',
                 'quantity' => 'SUM(main_table.orders_count)',
-                'range' => $rangePeriod2,
+                'range' => $rangePeriodAggregateStmt,
             ]
         )->order(
             'range'
@@ -349,8 +358,8 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
      *
      * @param string $range
      * @param string $attribute
-     * @param mixed $from
-     * @param mixed $to
+     * @param string|null $from
+     * @param string|null $to
      * @return string
      */
     protected function _getTZRangeOffsetExpression($range, $attribute, $from = null, $to = null)
@@ -665,7 +674,7 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
     /**
      * Set store filter collection
      *
-     * @param array $storeIds
+     * @param int[] $storeIds
      * @return $this
      */
     public function setStoreIds($storeIds)
@@ -778,16 +787,15 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
      */
     public function addSumAvgTotals($storeId = 0)
     {
-        $adapter = $this->getConnection();
-        $baseSubtotalRefunded = $adapter->getIfNullSql('main_table.base_subtotal_refunded', 0);
-        $baseSubtotalCanceled = $adapter->getIfNullSql('main_table.base_subtotal_canceled', 0);
-        $baseDiscountCanceled = $adapter->getIfNullSql('main_table.base_discount_canceled', 0);
-
         /**
          * calculate average and total amount
          */
-        $expr = $storeId ==
-            0 ? "(main_table.base_subtotal -\n            {$baseSubtotalRefunded} - {$baseSubtotalCanceled} - ABS(main_table.base_discount_amount) -\n            {$baseDiscountCanceled}) * main_table.base_to_global_rate" : "main_table.base_subtotal - {$baseSubtotalCanceled} - {$baseSubtotalRefunded} -\n            ABS(main_table.base_discount_amount) - {$baseDiscountCanceled}";
+        $expr = $this->getTotalsExpression(
+            $storeId,
+            $this->getConnection()->getIfNullSql('main_table.base_subtotal_refunded', 0),
+            $this->getConnection()->getIfNullSql('main_table.base_subtotal_canceled', 0),
+            $this->getConnection()->getIfNullSql('main_table.base_discount_canceled', 0)
+        );
 
         $this->getSelect()->columns(
             ['orders_avg_amount' => "AVG({$expr})"]
@@ -798,6 +806,28 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
         return $this;
     }
 
+    /**
+     * Get SQL expression for totals
+     *
+     * @param int $storeId
+     * @param string $baseSubtotalRefunded
+     * @param string $baseSubtotalCanceled
+     * @param string $baseDiscountCanceled
+     * @return string
+     */
+    protected function getTotalsExpression(
+        $storeId,
+        $baseSubtotalRefunded,
+        $baseSubtotalCanceled,
+        $baseDiscountCanceled
+    ) {
+        $template = ($storeId != 0)
+            ? 'main_table.base_subtotal - %2$s - %1$s - ABS(main_table.base_discount_amount) - %3$s'
+            : '(main_table.base_subtotal - %1$s - %2$s - ABS(main_table.base_discount_amount) - %3$s) '
+                . ' * main_table.base_to_global_rate';
+        return sprintf($template, $baseSubtotalRefunded, $baseSubtotalCanceled, $baseDiscountCanceled);
+    }
+
     /**
      * Sort order by total amount
      *
@@ -869,6 +899,7 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
      * Initialize initial fields to select
      *
      * @return $this
+     * @codeCoverageIgnore
      */
     protected function _initInitialFieldsToSelect()
     {
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Collection.php b/app/code/Magento/Reports/Model/Resource/Product/Collection.php
index 3eb9ac629a26e8fdcd075618a98ea3c26357ce1a..7df4b5dc4d9d0bc3616cb6221d4609ad158f8f40 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Collection.php
+++ b/app/code/Magento/Reports/Model/Resource/Product/Collection.php
@@ -147,8 +147,8 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
 
     /**
      * Set Type for COUNT SQL Select
+     * @codeCoverageIgnore
      *
-     * @codeCoverageIgnoreStart
      * @param int $type
      * @return $this
      */
@@ -160,6 +160,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
 
     /**
      * Set product entity id
+     * @codeCoverageIgnore
      *
      * @param string $entityId
      * @return $this
@@ -172,6 +173,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
 
     /**
      * Get product entity id
+     * @codeCoverageIgnore
      *
      * @return int
      */
@@ -182,6 +184,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
 
     /**
      * Set product entity table name
+     * @codeCoverageIgnore
      *
      * @param string $value
      * @return $this
@@ -194,6 +197,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
 
     /**
      * Get product entity table name
+     * @codeCoverageIgnore
      *
      * @return string
      */
@@ -204,6 +208,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
 
     /**
      * Get product attribute set  id
+     * @codeCoverageIgnore
      *
      * @return int
      */
@@ -214,6 +219,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
 
     /**
      * Set product attribute set id
+     * @codeCoverageIgnore
      *
      * @param int $value
      * @return $this
@@ -223,7 +229,6 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
         $this->_productEntityAttributeSetId = $value;
         return $this;
     }
-    //@codeCoverageIgnoreEnd
 
     /**
      * Join fields
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Index/AbstractIndex.php b/app/code/Magento/Reports/Model/Resource/Product/Index/AbstractIndex.php
index 52d72406cb130d56d6a11e75ed1d68e139268287..45b1c2c5e9d51e3bbb6a0633c821187f731434df 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Index/AbstractIndex.php
+++ b/app/code/Magento/Reports/Model/Resource/Product/Index/AbstractIndex.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Model\Resource\Product\Index;
 
 /**
@@ -14,16 +12,22 @@ namespace Magento\Reports\Model\Resource\Product\Index;
 abstract class AbstractIndex extends \Magento\Framework\Model\Resource\Db\AbstractDb
 {
     /**
+     * DateItime instance
+     *
      * @var \Magento\Framework\Stdlib\DateTime
      */
     protected $dateTime;
 
     /**
+     * Reports helper
+     *
      * @var \Magento\Reports\Model\Resource\Helper
      */
     protected $_resourceHelper;
 
     /**
+     * Constructor
+     *
      * @param \Magento\Framework\Model\Resource\Db\Context $context
      * @param \Magento\Reports\Model\Resource\Helper $resourceHelper
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
@@ -55,7 +59,9 @@ abstract class AbstractIndex extends \Magento\Framework\Model\Resource\Db\Abstra
             return $this;
         }
         $adapter = $this->_getWriteAdapter();
-        $select = $adapter->select()->from($this->getMainTable())->where('visitor_id = ?', $object->getVisitorId());
+        $select = $adapter->select()
+            ->from($this->getMainTable())
+            ->where('visitor_id = ?', $object->getVisitorId());
 
         $rowSet = $select->query()->fetchAll();
         foreach ($rowSet as $row) {
@@ -76,7 +82,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\Resource\Db\Abstra
 
             if ($idx) {
                 /**
-                 * If we are here it means that we have two rows: one with known customer, but second just visitor is set
+                 * If we are here it means that we have two rows: one with known customer and second with guest visitor
                  * One row should be updated with customer_id, second should be deleted
                  */
                 $adapter->delete($this->getMainTable(), ['index_id = ?' => $row['index_id']]);
@@ -192,7 +198,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\Resource\Db\Abstra
      * Add information about product ids to visitor/customer
      *
      * @param \Magento\Framework\Object|\Magento\Reports\Model\Product\Index\AbstractIndex $object
-     * @param array $productIds
+     * @param int[] $productIds
      * @return $this
      */
     public function registerIds(\Magento\Framework\Object $object, $productIds)
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Index/Collection/AbstractCollection.php b/app/code/Magento/Reports/Model/Resource/Product/Index/Collection/AbstractCollection.php
index b172b4e053c274e51f42417e56f381343b2abb9d..77ea700b2cc00c843a8df396649870d0e9009b67 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Index/Collection/AbstractCollection.php
+++ b/app/code/Magento/Reports/Model/Resource/Product/Index/Collection/AbstractCollection.php
@@ -179,6 +179,7 @@ abstract class AbstractCollection extends \Magento\Catalog\Model\Resource\Produc
 
     /**
      * Set customer id, that will be used in 'whereCondition'
+     * @codeCoverageIgnore
      *
      * @param int $id
      * @return $this
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Index/Viewed.php b/app/code/Magento/Reports/Model/Resource/Product/Index/Viewed.php
index 0ad3ffd330f063475affcd8cb56e36a9e5b4b7b8..93a22cf0011189fb11b3306525879f4f7b4685a1 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Index/Viewed.php
+++ b/app/code/Magento/Reports/Model/Resource/Product/Index/Viewed.php
@@ -17,6 +17,7 @@ class Viewed extends \Magento\Reports\Model\Resource\Product\Index\AbstractIndex
      * Initialize connection and main resource table
      *
      * @return void
+     * @codeCoverageIgnore
      */
     protected function _construct()
     {
diff --git a/app/code/Magento/Reports/Model/Resource/Report/AbstractReport.php b/app/code/Magento/Reports/Model/Resource/Report/AbstractReport.php
index 84a6d7d6a25efac94bd4ff2f7f3935a5c2ee70c1..777d13232b2a349e64b58ff63cd0b382012232a6 100644
--- a/app/code/Magento/Reports/Model/Resource/Report/AbstractReport.php
+++ b/app/code/Magento/Reports/Model/Resource/Report/AbstractReport.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Model\Resource\Report;
 
 /**
@@ -22,21 +20,29 @@ abstract class AbstractReport extends \Magento\Framework\Model\Resource\Db\Abstr
     protected $_flag = null;
 
     /**
+     * Logger instance
+     *
      * @var \Psr\Log\LoggerInterface
      */
     protected $_logger;
 
     /**
+     * Locale date instance
+     *
      * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface
      */
     protected $_localeDate;
 
     /**
+     * Reports flag factory
+     *
      * @var \Magento\Reports\Model\FlagFactory
      */
     protected $_reportsFlagFactory;
 
     /**
+     * Constructor
+     *
      * @param \Magento\Framework\Model\Resource\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
@@ -179,7 +185,7 @@ abstract class AbstractReport extends \Magento\Framework\Model\Resource\Db\Abstr
      * @param string $whereColumn
      * @param null|string|\DateTime $from
      * @param null|string|\DateTime $to
-     * @param array $additionalWhere
+     * @param [][] $additionalWhere
      * @param string $alias
      * @return \Magento\Framework\DB\Select
      */
@@ -281,12 +287,12 @@ abstract class AbstractReport extends \Magento\Framework\Model\Resource\Db\Abstr
      *
      * @param string $table
      * @param string $relatedTable
-     * @param array $joinCondition
+     * @param [] $joinCondition
      * @param string $column
      * @param string $whereColumn
      * @param string|null $from
      * @param string|null $to
-     * @param array $additionalWhere
+     * @param [][] $additionalWhere
      * @param string $alias
      * @param string $relatedAlias
      * @return \Magento\Framework\DB\Select
@@ -353,7 +359,7 @@ abstract class AbstractReport extends \Magento\Framework\Model\Resource\Db\Abstr
     /**
      * Retrieve query for attribute with timezone conversion
      *
-     * @param string|array $table
+     * @param string|[] $table
      * @param string $column
      * @param null|mixed $from
      * @param null|mixed $to
diff --git a/app/code/Magento/Reports/Model/Resource/Report/Collection.php b/app/code/Magento/Reports/Model/Resource/Report/Collection.php
index 2de5f389f25247113bbb141ddfc84486d8ab7bd6..abc6db15ad0380ba97d6d0efc337961c4b775f65 100644
--- a/app/code/Magento/Reports/Model/Resource/Report/Collection.php
+++ b/app/code/Magento/Reports/Model/Resource/Report/Collection.php
@@ -96,6 +96,7 @@ class Collection extends \Magento\Framework\Data\Collection
 
     /**
      * Set period
+     * @codeCoverageIgnore
      *
      * @param int $period
      * @return $this
@@ -108,6 +109,7 @@ class Collection extends \Magento\Framework\Data\Collection
 
     /**
      * Set interval
+     * @codeCoverageIgnore
      *
      * @param \DateTime $fromDate
      * @param \DateTime $toDate
@@ -260,6 +262,7 @@ class Collection extends \Magento\Framework\Data\Collection
 
     /**
      * Set store ids
+     * @codeCoverageIgnore
      *
      * @param array $storeIds
      * @return $this
@@ -272,6 +275,7 @@ class Collection extends \Magento\Framework\Data\Collection
 
     /**
      * Get store ids
+     * @codeCoverageIgnore
      *
      * @return array
      */
@@ -292,6 +296,7 @@ class Collection extends \Magento\Framework\Data\Collection
 
     /**
      * Set page size
+     * @codeCoverageIgnore
      *
      * @param int $size
      * @return $this
@@ -304,6 +309,7 @@ class Collection extends \Magento\Framework\Data\Collection
 
     /**
      * Get page size
+     * @codeCoverageIgnore
      *
      * @return int
      */
diff --git a/app/code/Magento/Reports/Model/Resource/Report/Collection/AbstractCollection.php b/app/code/Magento/Reports/Model/Resource/Report/Collection/AbstractCollection.php
index 234d520b32b126a6641fb8288b09c2e990fe19de..4575ec6394c844f38d4d871042095f612de90e9e 100644
--- a/app/code/Magento/Reports/Model/Resource/Report/Collection/AbstractCollection.php
+++ b/app/code/Magento/Reports/Model/Resource/Report/Collection/AbstractCollection.php
@@ -64,6 +64,7 @@ class AbstractCollection extends \Magento\Framework\Model\Resource\Db\Collection
 
     /**
      * Set array of columns that should be aggregated
+     * @codeCoverageIgnore
      *
      * @param array $columns
      * @return $this
@@ -76,6 +77,7 @@ class AbstractCollection extends \Magento\Framework\Model\Resource\Db\Collection
 
     /**
      * Retrieve array of columns that should be aggregated
+     * @codeCoverageIgnore
      *
      * @return array
      */
@@ -86,6 +88,7 @@ class AbstractCollection extends \Magento\Framework\Model\Resource\Db\Collection
 
     /**
      * Set date range
+     * @codeCoverageIgnore
      *
      * @param mixed $from
      * @param mixed $to
@@ -100,6 +103,7 @@ class AbstractCollection extends \Magento\Framework\Model\Resource\Db\Collection
 
     /**
      * Set period
+     * @codeCoverageIgnore
      *
      * @param string $period
      * @return $this
@@ -218,6 +222,7 @@ class AbstractCollection extends \Magento\Framework\Model\Resource\Db\Collection
 
     /**
      * Setter for isSubTotals
+     * @codeCoverageIgnore
      *
      * @param bool $flag
      * @return $this
diff --git a/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed.php b/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed.php
index 56e658e56db51f51339f45c7d28785fe9281dd62..432ebc9b5d432e6f4653e1789e280a6a0a595c4f 100644
--- a/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed.php
+++ b/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 /**
  * Most viewed product report aggregate resource model
  *
@@ -31,16 +29,22 @@ class Viewed extends \Magento\Sales\Model\Resource\Report\AbstractReport
     const AGGREGATION_YEARLY = 'report_viewed_product_aggregated_yearly';
 
     /**
+     * Product resource instance
+     *
      * @var \Magento\Catalog\Model\Resource\Product
      */
     protected $_productResource;
 
     /**
+     * Resource helper instance
+     *
      * @var \Magento\Reports\Model\Resource\Helper
      */
     protected $_resourceHelper;
 
     /**
+     * Constructor
+     *
      * @param \Magento\Framework\Model\Resource\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
diff --git a/app/code/Magento/Reports/Model/Resource/Wishlist/Collection.php b/app/code/Magento/Reports/Model/Resource/Wishlist/Collection.php
index 797b20da8555176e603785c511672062d90830ac..ab98d411ca05510003c9c9e4fc1cf7e8e2d7bfa7 100644
--- a/app/code/Magento/Reports/Model/Resource/Wishlist/Collection.php
+++ b/app/code/Magento/Reports/Model/Resource/Wishlist/Collection.php
@@ -60,6 +60,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
 
     /**
      * Set wishlist table name
+     * @codeCoverageIgnore
      *
      * @param string $value
      * @return $this
@@ -72,6 +73,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
 
     /**
      * Retrieve wishlist table name
+     * @codeCoverageIgnore
      *
      * @return string
      */
diff --git a/app/code/Magento/Reports/Setup/InstallData.php b/app/code/Magento/Reports/Setup/InstallData.php
index 071ed7c29645029f880b7af63cb0950259590f98..fef292ffb21a02c04131a4a1cd209555951f1496 100644
--- a/app/code/Magento/Reports/Setup/InstallData.php
+++ b/app/code/Magento/Reports/Setup/InstallData.php
@@ -7,8 +7,6 @@
 
 namespace Magento\Reports\Setup;
 
-// @codingStandardsIgnoreFile
-
 use Magento\Cms\Model\PageFactory;
 use Magento\Framework\Setup\ModuleContextInterface;
 use Magento\Framework\Setup\ModuleDataSetupInterface;
@@ -82,11 +80,13 @@ class InstallData implements \Magento\Framework\Setup\InstallDataInterface
         $cms = $this->pageFactory->create();
         $cms->load('home', 'identifier');
 
+        // @codingStandardsIgnoreStart
         $reportLayoutUpdate = '<!--
     <referenceContainer name="right">
         <action method="unsetChild"><argument name="alias" xsi:type="string">right.reports.product.viewed</argument></action>
         <action method="unsetChild"><argument name="alias" xsi:type="string">right.reports.product.compared</argument></action>
     </referenceContainer>-->';
+        // @codingStandardsIgnoreEnd
 
         /*
          * Merge and save old layout update data with report layout data
diff --git a/app/code/Magento/Reports/Test/Unit/Helper/DataTest.php b/app/code/Magento/Reports/Test/Unit/Helper/DataTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..81eb87c4cac8a1532b08a48e109af0a6c42327fd
--- /dev/null
+++ b/app/code/Magento/Reports/Test/Unit/Helper/DataTest.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Reports\Test\Unit\Helper;
+
+use Magento\Reports\Helper\Data;
+
+class DataTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Reports\Helper\Data
+     */
+    protected $data;
+
+    /**
+     * @var \Magento\Framework\App\Helper\Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $contextMock;
+
+    /**
+     * @var \Magento\Reports\Model\ItemFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $itemFactoryMock;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function setUp()
+    {
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\App\Helper\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->itemFactoryMock = $this->getMockBuilder('Magento\Reports\Model\ItemFactory')
+            ->setMethods(['create'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->data = new Data(
+            $this->contextMock,
+            $this->itemFactoryMock
+        );
+    }
+
+    /**
+     * @param string $from
+     * @param string $to
+     * @param string $period
+     * @param array $results
+     * @dataProvider intervalsDataProvider
+     * @return void
+     */
+    public function testGetIntervals($from, $to, $period, $results)
+    {
+        $this->assertEquals($this->data->getIntervals($from, $to, $period), $results);
+    }
+
+    /**
+     * @param string $from
+     * @param string $to
+     * @param string $period
+     * @param array $results
+     * @dataProvider intervalsDataProvider
+     * @return void
+     */
+    public function testPrepareIntervalsCollection($from, $to, $period, $results)
+    {
+        $collection = $this->getMockBuilder('Magento\Framework\Data\Collection')
+            ->disableOriginalConstructor()
+            ->setMethods(['addItem'])
+            ->getMock();
+
+        $item = $this->getMockBuilder('Magento\Reports\Model\Item')
+            ->disableOriginalConstructor()
+            ->setMethods(['setPeriod', 'setIsEmpty'])
+            ->getMock();
+
+        $this->itemFactoryMock->expects($this->exactly(count($results)))
+            ->method('create')
+            ->willReturn($item);
+        $item->expects($this->exactly(count($results)))
+            ->method('setIsEmpty');
+        $collection->expects($this->exactly(count($results)))
+            ->method('addItem');
+
+        foreach ($results as $key => $result) {
+            $item->expects($this->at($key + $key))
+                ->method('setPeriod')
+                ->with($result);
+        }
+
+        $this->data->prepareIntervalsCollection($collection, $from, $to, $period);
+    }
+
+    /**
+     * @return array
+     */
+    public function intervalsDataProvider()
+    {
+        return [
+            [
+                'from' => '2000-01-15 10:00:00',
+                'to' => '2000-01-15 11:00:00',
+                'period' => \Magento\Reports\Helper\Data::REPORT_PERIOD_TYPE_DAY,
+                'results' => ['2000-01-15']
+            ],
+            [
+                'from' => '2000-01-15 10:00:00',
+                'to' => '2000-01-17 10:00:00',
+                'period' => \Magento\Reports\Helper\Data::REPORT_PERIOD_TYPE_MONTH,
+                'results' => ['2000-01']
+            ],
+            [
+                'from' => '2000-01-15 10:00:00',
+                'to' => '2000-02-15 10:00:00',
+                'period' => \Magento\Reports\Helper\Data::REPORT_PERIOD_TYPE_YEAR,
+                'results' => ['2000']
+            ],
+            [
+                'from' => '2000-01-15 10:00:00',
+                'to' => '2000-01-16 11:00:00',
+                'period' => \Magento\Reports\Helper\Data::REPORT_PERIOD_TYPE_DAY,
+                'results' => ['2000-01-15', '2000-01-16']
+            ],
+            [
+                'from' => '2000-01-15 10:00:00',
+                'to' => '2000-02-17 10:00:00',
+                'period' => \Magento\Reports\Helper\Data::REPORT_PERIOD_TYPE_MONTH,
+                'results' => ['2000-01', '2000-02']
+            ],
+            [
+                'from' => '2000-01-15 10:00:00',
+                'to' => '2003-02-15 10:00:00',
+                'period' => \Magento\Reports\Helper\Data::REPORT_PERIOD_TYPE_YEAR,
+                'results' => ['2000', '2001', '2002', '2003']
+            ],
+            [
+                'from' => '',
+                'to' => '',
+                'period' => \Magento\Reports\Helper\Data::REPORT_PERIOD_TYPE_YEAR,
+                'results' => []
+            ]
+        ];
+    }
+}
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Event/ObserverTest.php b/app/code/Magento/Reports/Test/Unit/Model/Event/ObserverTest.php
index ba4dc5396b30df834f76dba8b40183af149af079..7e53522ac6680d17587318727bf538a6bebbdd0e 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Event/ObserverTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/Event/ObserverTest.php
@@ -47,6 +47,14 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
      */
     protected $productCompModelMock;
 
+    /**
+     * @var \Magento\Reports\Model\Product\Index\ViewedFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $productIndexFactoryMock;
+    
+    /**
+     * {@inheritDoc}
+     */
     public function setUp()
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
@@ -56,13 +64,13 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
         $this->customerVisitorMock = $this->getMockBuilder('Magento\Customer\Model\Visitor')
             ->disableOriginalConstructor()->getMock();
 
-        $productIndexFactoryMock = $this->getMockBuilder('Magento\Reports\Model\Product\Index\ViewedFactory')
+        $this->productIndexFactoryMock = $this->getMockBuilder('Magento\Reports\Model\Product\Index\ViewedFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()->getMock();
         $this->productIndexMock = $this->getMockBuilder('Magento\Reports\Model\Product\Index\Viewed')
             ->disableOriginalConstructor()->getMock();
 
-        $productIndexFactoryMock->expects($this->any())
+        $this->productIndexFactoryMock->expects($this->any())
             ->method('create')
             ->willReturn($this->productIndexMock);
 
@@ -84,20 +92,25 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
         $storeManager->expects($this->any())
             ->method('getStore')
             ->willReturn($this->storeMock);
-        $this->productCompFactoryMock = $this->getMockBuilder('Magento\Reports\Model\Product\Index\ComparedFactory')
+        
+        $this->productCompModelMock = $this->getMockBuilder('Magento\Reports\Model\Product\Index\Compared')
             ->disableOriginalConstructor()
-            ->setMethods(['create'])
             ->getMock();
-        $this->productCompModelMock = $this->getMockBuilder('Magento\Reports\Model\Product\Index\Compared')
+
+        $this->productCompFactoryMock = $this->getMockBuilder('Magento\Reports\Model\Product\Index\ComparedFactory')
             ->disableOriginalConstructor()
+            ->setMethods(['create'])
             ->getMock();
+        $this->productCompFactoryMock->expects($this->any())
+            ->method('create')
+            ->willReturn($this->productCompModelMock);
 
         $this->observer = $objectManager->getObject(
             'Magento\Reports\Model\Event\Observer',
             [
                 'customerSession' => $this->customerSessionMock,
                 'customerVisitor' => $this->customerVisitorMock,
-                'productIndxFactory' => $productIndexFactoryMock,
+                'productIndxFactory' => $this->productIndexFactoryMock,
                 'productCompFactory' => $this->productCompFactoryMock,
                 'storeManager' => $storeManager,
                 'event' => $reportEventFactory
@@ -105,6 +118,9 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    /**
+     * @return void
+     */
     public function testCatalogProductViewCustomer()
     {
         $productId = 5;
@@ -123,17 +139,10 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
             'store_id' => $storeId,
         ];
 
-        $this->storeMock->expects($this->any())
-            ->method('getId')
-            ->willReturn($storeId);
-
-        $this->customerSessionMock->expects($this->any())
-            ->method('isLoggedIn')
-            ->willReturn(true);
+        $this->storeMock->expects($this->any())->method('getId')->willReturn($storeId);
 
-        $this->customerSessionMock->expects($this->any())
-            ->method('getCustomerId')
-            ->willReturn($customerId);
+        $this->customerSessionMock->expects($this->any())->method('isLoggedIn')->willReturn(true);
+        $this->customerSessionMock->expects($this->any())->method('getCustomerId')->willReturn($customerId);
 
         $this->prepareProductIndexMock($expectedViewedData);
         $this->prepareReportEventModel($expectedEventData);
@@ -141,6 +150,9 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
         $this->observer->catalogProductView($eventObserver);
     }
 
+    /**
+     * @return void
+     */
     public function testCatalogProductViewVisitor()
     {
         $productId = 6;
@@ -159,17 +171,11 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
             'store_id' => $storeId,
         ];
 
-        $this->storeMock->expects($this->any())
-            ->method('getId')
-            ->willReturn($storeId);
+        $this->storeMock->expects($this->any())->method('getId')->willReturn($storeId);
 
-        $this->customerSessionMock->expects($this->any())
-            ->method('isLoggedIn')
-            ->willReturn(false);
+        $this->customerSessionMock->expects($this->any())->method('isLoggedIn')->willReturn(false);
 
-        $this->customerVisitorMock->expects($this->any())
-            ->method('getId')
-            ->willReturn($visitorId);
+        $this->customerVisitorMock->expects($this->any())->method('getId')->willReturn($visitorId);
 
         $this->prepareProductIndexMock($expectedViewedData);
         $this->prepareReportEventModel($expectedEventData);
@@ -182,6 +188,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
      * @param string $userKey
      * @param int $userId
      * @dataProvider catalogProductCompareAddProductDataProvider
+     * @return void
      */
     public function testCatalogProductCompareAddProduct($isLoggedIn, $userKey, $userId)
     {
@@ -193,31 +200,84 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
             $userKey => $userId
         ];
         $observerMock = $this->getObserverMock($productId);
-        $this->customerSessionMock->expects($this->any())
-            ->method('isLoggedIn')
-            ->willReturn($isLoggedIn);
-        $this->customerSessionMock->expects($this->any())
-            ->method('getCustomerId')
-            ->willReturn($customerId);
-        $this->customerVisitorMock->expects($this->any())
-            ->method('getId')
-            ->willReturn($visitorId);
-        $this->productCompFactoryMock->expects($this->any())
-            ->method('create')
-            ->willReturn($this->productCompModelMock);
-        $this->productCompModelMock->expects($this->any())
-            ->method('setData')
-            ->with($viewData)
-            ->willReturnSelf();
-        $this->productCompModelMock->expects($this->any())
-            ->method('save')
-            ->willReturnSelf();
-        $this->productCompModelMock->expects($this->any())
-            ->method('calculate')
-            ->willReturnSelf();
+
+        $this->customerSessionMock->expects($this->any())->method('isLoggedIn')->willReturn($isLoggedIn);
+        $this->customerSessionMock->expects($this->any())->method('getCustomerId')->willReturn($customerId);
+
+        $this->customerVisitorMock->expects($this->any())->method('getId')->willReturn($visitorId);
+
+        $this->productCompModelMock->expects($this->any())->method('setData')->with($viewData)->willReturnSelf();
+        $this->productCompModelMock->expects($this->any())->method('save')->willReturnSelf();
+        $this->productCompModelMock->expects($this->any())->method('calculate')->willReturnSelf();
+
         $this->assertEquals($this->observer, $this->observer->catalogProductCompareAddProduct($observerMock));
     }
 
+    /**
+     * @return void
+     */
+    public function testCustomerLoginLoggedInTrue()
+    {
+        $customerId = 222;
+        $visitorId = 333;
+        $observerMock = $this->getObserverMock(111);
+
+        $this->customerSessionMock->expects($this->once())->method('isLoggedIn')->willReturn(true);
+        $this->customerSessionMock->expects($this->once())->method('getCustomerId')->willReturn($customerId);
+
+        $this->customerVisitorMock->expects($this->once())->method('getId')->willReturn($visitorId);
+
+        $this->reportEventMock->expects($this->once())->method('updateCustomerType')->with($visitorId, $customerId);
+
+        $this->productCompModelMock->expects($this->once())->method('updateCustomerFromVisitor')->willReturnSelf();
+        $this->productCompModelMock->expects($this->once())->method('calculate')->willReturnSelf();
+
+        $this->productIndexMock->expects($this->once())->method('updateCustomerFromVisitor')->willReturnSelf();
+        $this->productIndexMock->expects($this->once())->method('calculate')->willReturnSelf();
+
+        $this->assertEquals($this->observer, $this->observer->customerLogin($observerMock));
+    }
+
+    /**
+     * @return void
+     */
+    public function testCustomerLoginLoggedInFalse()
+    {
+        $observerMock = $this->getObserverMock(111);
+
+        $this->customerSessionMock->expects($this->once())->method('isLoggedIn')->willReturn(false);
+        $this->customerSessionMock->expects($this->never())->method('getCustomerId');
+
+        $this->customerVisitorMock->expects($this->never())->method('getId');
+
+        $this->productCompModelMock->expects($this->never())->method('updateCustomerFromVisitor')->willReturnSelf();
+        $this->productCompModelMock->expects($this->never())->method('calculate')->willReturnSelf();
+
+        $this->productIndexMock->expects($this->never())->method('updateCustomerFromVisitor')->willReturnSelf();
+        $this->productIndexMock->expects($this->never())->method('calculate')->willReturnSelf();
+
+        $this->assertEquals($this->observer, $this->observer->customerLogin($observerMock));
+    }
+
+    /**
+     * @return void
+     */
+    public function testCustomerLogout()
+    {
+        $observerMock = $this->getObserverMock(111);
+
+        $this->productCompModelMock->expects($this->once())->method('purgeVisitorByCustomer')->willReturnSelf();
+        $this->productCompModelMock->expects($this->once())->method('calculate')->willReturnSelf();
+
+        $this->productIndexMock->expects($this->once())->method('purgeVisitorByCustomer')->willReturnSelf();
+        $this->productIndexMock->expects($this->once())->method('calculate')->willReturnSelf();
+
+        $this->assertEquals($this->observer, $this->observer->customerLogout($observerMock));
+    }
+
+    /**
+     * @return array
+     */
     public function catalogProductCompareAddProductDataProvider()
     {
         return [
@@ -260,14 +320,8 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
      */
     protected function prepareReportEventModel($expectedEventData)
     {
-        $this->reportEventMock->expects($this->any())
-            ->method('setData')
-            ->with($expectedEventData)
-            ->willReturnSelf();
-
-        $this->reportEventMock->expects($this->any())
-            ->method('save')
-            ->willReturnSelf();
+        $this->reportEventMock->expects($this->any())->method('setData')->with($expectedEventData)->willReturnSelf();
+        $this->reportEventMock->expects($this->any())->method('save')->willReturnSelf();
     }
 
     /**
@@ -276,22 +330,21 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
      */
     protected function getObserverMock($productId)
     {
-        $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')->disableOriginalConstructor()
+        $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
+            ->disableOriginalConstructor()
             ->getMock();
-        $eventMock = $this->getMockBuilder('Magento\Framework\Event')->disableOriginalConstructor()
+        $eventMock = $this->getMockBuilder('Magento\Framework\Event')
+            ->disableOriginalConstructor()
             ->setMethods(['getProduct'])->getMock();
-        $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')->disableOriginalConstructor()
+        $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')
+            ->disableOriginalConstructor()
             ->getMock();
 
-        $productMock->expects($this->any())
-            ->method('getId')
-            ->willReturn($productId);
-        $eventMock->expects($this->any())
-            ->method('getProduct')
-            ->willReturn($productMock);
-        $eventObserverMock->expects($this->any())
-            ->method('getEvent')
-            ->willReturn($eventMock);
+        $productMock->expects($this->any())->method('getId')->willReturn($productId);
+
+        $eventMock->expects($this->any())->method('getProduct')->willReturn($productMock);
+
+        $eventObserverMock->expects($this->any())->method('getEvent')->willReturn($eventMock);
 
         return $eventObserverMock;
     }
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php b/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php
index a6585041528a549b1d69b10135614c1270f44937..f9ee6d86285e0aad348824a00a26ae17f2e42e7f 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php
@@ -3,82 +3,84 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
 namespace Magento\Reports\Test\Unit\Model\Plugin;
 
+use Magento\Reports\Model\Plugin\Log;
+
 class LogTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * @var \Magento\Reports\Model\Plugin\Log
      */
-    protected $model;
+    protected $log;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Reports\Model\Event|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $reportEventMock;
+    protected $eventMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Reports\Model\Product\Index\Compared|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $cmpProductIdxMock;
+    protected $comparedMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Reports\Model\Product\Index\Viewed|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $viewProductIdxMock;
+    protected $viewedMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Log\Model\Resource\Log|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $logResourceMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Log\Model\Resource\Log|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $subjectMock;
 
+    /**
+     * {@inheritDoc}
+     */
     protected function setUp()
     {
-        $this->reportEventMock = $this->getMock('Magento\Reports\Model\Event', [], [], '', false);
-        $this->cmpProductIdxMock = $this->getMock(
-            'Magento\Reports\Model\Product\Index\Compared',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->viewProductIdxMock = $this->getMock(
-            'Magento\Reports\Model\Product\Index\Viewed',
-            [],
-            [],
-            '',
-            false
-        );
+        $this->eventMock = $this->getMockBuilder('Magento\Reports\Model\Event')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->comparedMock = $this->getMockBuilder('Magento\Reports\Model\Product\Index\Compared')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->viewedMock = $this->getMockBuilder('Magento\Reports\Model\Product\Index\Viewed')
+            ->disableOriginalConstructor()
+            ->getMock();
 
-        $this->logResourceMock = $this->getMock('Magento\Log\Model\Resource\Log', [], [], '', false);
+        $this->logResourceMock = $this->getMockBuilder('Magento\Log\Model\Resource\Log')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->subjectMock = $this->getMockBuilder('Magento\Log\Model\Resource\Log')
+            ->disableOriginalConstructor()
+            ->getMock();
 
-        $this->subjectMock = $this->getMock('Magento\Log\Model\Resource\Log', [], [], '', false);
-        $this->model = new \Magento\Reports\Model\Plugin\Log(
-            $this->reportEventMock,
-            $this->cmpProductIdxMock,
-            $this->viewProductIdxMock
+        $this->log = new Log(
+            $this->eventMock,
+            $this->comparedMock,
+            $this->viewedMock
         );
     }
 
     /**
-     * @covers \Magento\Reports\Model\Plugin\Log::afterClean
+     * @return void
      */
     public function testAfterClean()
     {
-        $this->reportEventMock->expects($this->once())->method('clean');
-
-        $this->cmpProductIdxMock->expects($this->once())->method('clean');
-
-        $this->viewProductIdxMock->expects($this->once())->method('clean');
+        $this->eventMock->expects($this->once())->method('clean');
+        $this->comparedMock->expects($this->once())->method('clean');
+        $this->viewedMock->expects($this->once())->method('clean');
 
         $this->assertEquals(
             $this->logResourceMock,
-            $this->model->afterClean($this->subjectMock, $this->logResourceMock)
+            $this->log->afterClean($this->subjectMock, $this->logResourceMock)
         );
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php b/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7a2a7213a6b7899f7f89fd47a04bb66fb31539ea
--- /dev/null
+++ b/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php
@@ -0,0 +1,149 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Reports\Test\Unit\Model\Product\Index;
+
+use Magento\Reports\Model\Product\Index\Compared;
+
+class ComparedTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Reports\Model\Product\Index\Compared
+     */
+    protected $compared;
+
+    /**
+     * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $contextMock;
+
+    /**
+     * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $registryMock;
+
+    /**
+     * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $storeManagerMock;
+
+    /**
+     * @var \Magento\Customer\Model\Visitor|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $visitorMock;
+
+    /**
+     * @var \Magento\Customer\Model\Session|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $sessionMock;
+
+    /**
+     * @var \Magento\Framework\Session\Generic|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $genericMock;
+
+    /**
+     * @var \Magento\Catalog\Model\Product\Visibility|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $visibilityMock;
+
+    /**
+     * @var \Magento\Framework\Stdlib\DateTime|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $dateTimeMock;
+
+    /**
+     * @var \Magento\Catalog\Helper\Product\Compare|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $catalogProductHelperMock;
+
+    /**
+     * @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resourceMock;
+
+    /**
+     * @var \Magento\Framework\Data\Collection\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $dbMock;
+    /**
+     * {@inheritDoc}
+     */
+    protected function setUp()
+    {
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->registryMock = $this->getMockBuilder('Magento\Framework\Registry')
+            ->getMock();
+        $this->storeManagerMock = $this->getMockBuilder('Magento\Store\Model\StoreManagerInterface')
+            ->getMock();
+        $this->visitorMock = $this->getMockBuilder('Magento\Customer\Model\Visitor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->sessionMock = $this->getMockBuilder('Magento\Customer\Model\Session')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->genericMock = $this->getMockBuilder('Magento\Framework\Session\Generic')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->visibilityMock = $this->getMockBuilder('Magento\Catalog\Model\Product\Visibility')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->dateTimeMock = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime')
+            ->getMock();
+        $this->catalogProductHelperMock = $this->getMockBuilder('Magento\Catalog\Helper\Product\Compare')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\AbstractResource')
+            ->disableOriginalConstructor()
+            ->setMethods(['getIdFieldName', '_construct', '_getReadAdapter', '_getWriteAdapter'])
+            ->getMock();
+        $this->dbMock = $this->getMockBuilder('Magento\Framework\Data\Collection\AbstractDb')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->compared = new Compared(
+            $this->contextMock,
+            $this->registryMock,
+            $this->storeManagerMock,
+            $this->visitorMock,
+            $this->sessionMock,
+            $this->genericMock,
+            $this->visibilityMock,
+            $this->dateTimeMock,
+            $this->catalogProductHelperMock,
+            $this->resourceMock,
+            $this->dbMock
+        );
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetExcludeProductIds()
+    {
+        $collection = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Compare\Item\Collection')
+            ->disableOriginalConstructor()
+            ->setMethods(['getEntityId'])
+            ->getMock();
+        $collection->expects($this->once())->method('getEntityId')->willReturn(1);
+
+        $product = $this->getMockBuilder('Magento\Catalog\Model\Product')
+            ->disableOriginalConstructor()
+            ->setMethods(['getId'])
+            ->getMock();
+        $product->expects($this->once())->method('getId')->willReturn(2);
+
+        $this->catalogProductHelperMock->expects($this->once())->method('hasItems')->willReturn(true);
+        $this->catalogProductHelperMock->expects($this->once())->method('getItemCollection')->willReturn([$collection]);
+
+        $this->registryMock->expects($this->any())->method('registry')->willReturn($product);
+
+        $this->assertEquals([1, 2], $this->compared->getExcludeProductIds());
+    }
+}
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Event/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/Resource/Event/CollectionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2191830c60ffd3ebdad30f105190cc31f9aa2b7f
--- /dev/null
+++ b/app/code/Magento/Reports/Test/Unit/Model/Resource/Event/CollectionTest.php
@@ -0,0 +1,161 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Reports\Test\Unit\Model\Resource\Event;
+
+use Magento\Reports\Model\Resource\Event\Collection;
+
+class CollectionTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Reports\Model\Resource\Event\Collection
+     */
+    protected $collection;
+
+    /**
+     * @var \Magento\Framework\Data\Collection\EntityFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $entityFactoryMock;
+
+    /**
+     * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $loggerMock;
+
+    /**
+     * @var \Magento\Framework\Data\Collection\Db\FetchStrategyInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $fetchStrategyMock;
+
+    /**
+     * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $managerMock;
+
+    /**
+     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resourceMock;
+
+    /**
+     * @var \Zend_Db_Adapter_Abstract|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $dbMock;
+
+    /**
+     * @var \Zend_Db_Select|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $selectMock;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function setUp()
+    {
+        $this->entityFactoryMock = $this->getMockBuilder('Magento\Framework\Data\Collection\EntityFactoryInterface')
+            ->getMock();
+        $this->loggerMock = $this->getMockBuilder('Psr\Log\LoggerInterface')
+            ->getMock();
+        $this->fetchStrategyMock = $this->getMockBuilder('Magento\Framework\Data\Collection\Db\FetchStrategyInterface')
+            ->getMock();
+        $this->managerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface')
+            ->getMock();
+
+        $this->selectMock = $this->getMockBuilder('Zend_Db_Select')
+            ->setMethods(['where', 'from'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->selectMock->expects($this->any())
+            ->method('from')
+            ->willReturnSelf();
+        $this->selectMock->expects($this->any())
+            ->method('where')
+            ->willReturnSelf();
+
+        $this->dbMock = $this->getMockBuilder('Zend_Db_Adapter_Abstract')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->dbMock->expects($this->any())
+            ->method('select')
+            ->willReturn($this->selectMock);
+
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+            ->disableOriginalConstructor()
+            ->setMethods(['getReadConnection', 'getCurrentStoreIds', '_construct', 'getMainTable', 'getTable'])
+            ->getMock();
+        $this->resourceMock->expects($this->any())
+            ->method('getReadConnection')
+            ->willReturn($this->dbMock);
+
+        $this->collection = new Collection(
+            $this->entityFactoryMock,
+            $this->loggerMock,
+            $this->fetchStrategyMock,
+            $this->managerMock,
+            null,
+            $this->resourceMock
+        );
+    }
+
+    /**
+     * @param mixed $ignoreData
+     * @param 'string' $ignoreSql
+     * @dataProvider ignoresDataProvider
+     * @return void
+     */
+    public function testAddStoreFilter($ignoreData, $ignoreSql)
+    {
+        $typeId = 1;
+        $subjectId =2;
+        $subtype = 3;
+        $limit = 0;
+        $stores = [1, 2];
+
+        $this->resourceMock
+            ->expects($this->once())
+            ->method('getCurrentStoreIds')
+            ->willReturn($stores);
+        $this->selectMock
+            ->expects($this->at(0))
+            ->method('where')
+            ->with('event_type_id = ?', $typeId);
+        $this->selectMock
+            ->expects($this->at(1))
+            ->method('where')
+            ->with('subject_id = ?', $subjectId);
+        $this->selectMock
+            ->expects($this->at(2))
+            ->method('where')
+            ->with('subtype = ?', $subtype);
+        $this->selectMock
+            ->expects($this->at(3))
+            ->method('where')
+            ->with('store_id IN(?)', $stores);
+        $this->selectMock
+            ->expects($this->at(4))
+            ->method('where')
+            ->with($ignoreSql, $ignoreData);
+
+        $this->collection->addRecentlyFiler($typeId, $subjectId, $subtype, $ignoreData, $limit);
+    }
+
+    /**
+     * @return array
+     */
+    public function ignoresDataProvider()
+    {
+        return [
+            [
+                'ignoreData' => 1,
+                'ignoreSql' => 'object_id <> ?'
+            ],
+            [
+                'ignoreData' => [1],
+                'ignoreSql' => 'object_id NOT IN(?)'
+            ]
+        ];
+    }
+}
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/EventTest.php b/app/code/Magento/Reports/Test/Unit/Model/Resource/EventTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5d1dc3bbcea0733b49ccf35ba68ae9f3d948581a
--- /dev/null
+++ b/app/code/Magento/Reports/Test/Unit/Model/Resource/EventTest.php
@@ -0,0 +1,248 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Reports\Test\Unit\Model\Resource;
+
+use Magento\Reports\Model\Resource\Event;
+
+class EventTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Reports\Model\Resource\Event
+     */
+    protected $event;
+
+    /**
+     * @var \Magento\Framework\Model\Resource\Db\Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $contextMock;
+
+    /**
+     * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $scopeConfigMock;
+
+    /**
+     * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $storeManagerMock;
+
+    /**
+     * @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $connectionMock;
+
+    /**
+     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resourceMock;
+
+    /**
+     * @var \Magento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $storeMock;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function setUp()
+    {
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->scopeConfigMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
+            ->getMock();
+
+        $this->storeManagerMock = $this->getMockBuilder('Magento\Store\Model\StoreManagerInterface')
+            ->getMock();
+
+        $this->storeMock = $this->getMockBuilder('Magento\Store\Model\Store')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->storeManagerMock
+            ->expects($this->any())
+            ->method('getStore')
+            ->willReturn($this->storeMock);
+
+        $this->connectionMock = $this->getMockBuilder('Magento\Framework\DB\Adapter\AdapterInterface')
+            ->getMock();
+
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\Resource')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->resourceMock
+            ->expects($this->any())
+            ->method('getConnection')
+            ->willReturn($this->connectionMock);
+
+        $this->contextMock
+            ->expects($this->any())
+            ->method('getResources')
+            ->willReturn($this->resourceMock);
+
+        $this->event = new Event(
+            $this->contextMock,
+            $this->scopeConfigMock,
+            $this->storeManagerMock
+        );
+    }
+
+    /**
+     * @return void
+     */
+    public function testUpdateCustomerTypeWithoutType()
+    {
+        $eventMock = $this->getMockBuilder('Magento\Reports\Model\Event')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->connectionMock
+            ->expects($this->never())
+            ->method('update');
+
+        $this->event->updateCustomerType($eventMock, 1, 1);
+
+    }
+
+    /**
+     * @return void
+     */
+    public function testUpdateCustomerTypeWithType()
+    {
+        $eventMock = $this->getMockBuilder('Magento\Reports\Model\Event')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->connectionMock
+            ->expects($this->once())
+            ->method('update');
+
+        $this->event->updateCustomerType($eventMock, 1, 1, ['type']);
+
+    }
+
+    /**
+     * @return void
+     */
+    public function testApplyLogToCollection()
+    {
+        $derivedSelect = 'SELECT * FROM table';
+        $idFieldName = 'IdFieldName';
+
+        $collectionSelectMock = $this->getMockBuilder('Magento\Framework\DB\Select')
+            ->disableOriginalConstructor()
+            ->setMethods(['joinInner', 'order'])
+            ->getMock();
+        $collectionSelectMock
+            ->expects($this->once())
+            ->method('joinInner')
+            ->with(
+                ['evt' => new \Zend_Db_Expr("({$derivedSelect})")],
+                "{$idFieldName} = evt.object_id",
+                []
+            )
+            ->willReturnSelf();
+        $collectionSelectMock
+            ->expects($this->once())
+            ->method('order')
+            ->willReturnSelf();
+
+        $collectionMock = $this->getMockBuilder('Magento\Framework\Data\Collection\AbstractDb')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $collectionMock
+            ->expects($this->once())
+            ->method('getResource')
+            ->willReturnSelf();
+        $collectionMock
+            ->expects($this->once())
+            ->method('getIdFieldName')
+            ->willReturn($idFieldName);
+        $collectionMock
+            ->expects($this->any())
+            ->method('getSelect')
+            ->willReturn($collectionSelectMock);
+
+        $selectMock = $this->getMockBuilder('Magento\Framework\DB\Select')
+            ->disableOriginalConstructor()
+            ->setMethods(['from', 'where', 'group', 'joinInner', '__toString'])
+            ->getMock();
+        $selectMock
+            ->expects($this->once())
+            ->method('from')
+            ->willReturnSelf();
+        $selectMock
+            ->expects($this->any())
+            ->method('where')
+            ->willReturnSelf();
+        $selectMock
+            ->expects($this->once())
+            ->method('group')
+            ->willReturnSelf();
+        $selectMock
+            ->expects($this->any())
+            ->method('__toString')
+            ->willReturn($derivedSelect);
+
+        $this->connectionMock
+            ->expects($this->once())
+            ->method('select')
+            ->willReturn($selectMock);
+
+        $this->storeMock
+            ->expects($this->any())
+            ->method('getId')
+            ->willReturn(1);
+
+        $this->event->applyLogToCollection($collectionMock, 1, 1, 1);
+    }
+
+    /**
+     * @return void
+     */
+    public function testClean()
+    {
+        $eventMock = $this->getMockBuilder('Magento\Reports\Model\Event')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $selectMock = $this->getMockBuilder('Magento\Framework\DB\Select')
+            ->disableOriginalConstructor()
+            ->setMethods(['select', 'from', 'joinLeft', 'where', 'limit', 'fetchCol'])
+            ->getMock();
+
+        $this->connectionMock
+            ->expects($this->at(3))
+            ->method('fetchCol')
+            ->willReturn(1);
+        $this->connectionMock
+            ->expects($this->once())
+            ->method('delete');
+        $this->connectionMock
+            ->expects($this->any())
+            ->method('select')
+            ->willReturn($selectMock);
+
+        $selectMock
+            ->expects($this->exactly(2))
+            ->method('from')
+            ->willReturnSelf();
+        $selectMock
+            ->expects($this->exactly(2))
+            ->method('joinLeft')
+            ->willReturnSelf();
+        $selectMock
+            ->expects($this->any())
+            ->method('where')
+            ->willReturnSelf();
+        $selectMock
+            ->expects($this->exactly(2))
+            ->method('limit')
+            ->willReturnSelf();
+
+        $this->event->clean($eventMock);
+    }
+}
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/HelperTest.php b/app/code/Magento/Reports/Test/Unit/Model/Resource/HelperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b000c4ad43ab230bf9b648241354cb3cd60b65d3
--- /dev/null
+++ b/app/code/Magento/Reports/Test/Unit/Model/Resource/HelperTest.php
@@ -0,0 +1,122 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Reports\Test\Unit\Model\Resource;
+
+use Magento\Reports\Model\Resource\Helper;
+
+class HelperTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Reports\Model\Resource\Helper
+     */
+    protected $helper;
+
+    /**
+     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resourceMock;
+
+    /**
+     * @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $connectionMock;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function setUp()
+    {
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\Resource')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->connectionMock = $this->getMockBuilder('Magento\Framework\DB\Adapter\AdapterInterface')
+            ->getMock();
+
+        $this->resourceMock
+            ->expects($this->any())
+            ->method('getConnection')
+            ->willReturn($this->connectionMock);
+
+        $this->helper = new Helper(
+            $this->resourceMock
+        );
+    }
+
+    /**
+     * @return void
+     */
+    public function testMergeVisitorProductIndex()
+    {
+        $mainTable = 'mainTable';
+        $data = ['dataKey' => 'dataValue'];
+        $matchFields = ['matchField'];
+
+        $this->connectionMock
+            ->expects($this->once())
+            ->method('insertOnDuplicate')
+            ->with($mainTable, $data, array_keys($data));
+
+        $this->helper->mergeVisitorProductIndex($mainTable, $data, $matchFields);
+    }
+
+    /**
+     * @param string $type
+     * @param array $result
+     * @dataProvider typesDataProvider
+     * @return void
+     */
+    public function testUpdateReportRatingPos($type, $result)
+    {
+        $mainTable = 'mainTable';
+        $column = 'column';
+        $aggregationTable = 'aggregationTable';
+
+        $selectMock = $this->getMockBuilder('Magento\Framework\DB\Select')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $selectMock
+            ->expects($this->any())
+            ->method('from')
+            ->willReturnSelf();
+        $selectMock
+            ->expects($this->once())
+            ->method('group')
+            ->willReturnSelf();
+        $selectMock
+            ->expects($this->once())
+            ->method('order')
+            ->willReturnSelf();
+        $selectMock
+            ->expects($this->once())
+            ->method('insertFromSelect')
+            ->with($aggregationTable, $result)
+            ->willReturnSelf();
+
+        $this->connectionMock
+            ->expects($this->any())
+            ->method('select')
+            ->willReturn($selectMock);
+
+        $this->helper->updateReportRatingPos($this->connectionMock, $type, $column, $mainTable, $aggregationTable);
+    }
+
+    /**
+     * @return array
+     */
+    public function typesDataProvider()
+    {
+        $mResult = ['period', 'store_id', 'product_id', 'product_name', 'product_price', 'column', 'rating_pos'];
+        $dResult = ['period', 'store_id', 'product_id', 'product_name', 'product_price', 'id', 'column', 'rating_pos'];
+        return [
+            ['type' => 'year', 'result' => $mResult],
+            ['type' => 'month', 'result' => $mResult],
+            ['type' => 'day', 'result' => $dResult],
+            ['type' => null, 'result' => $mResult]
+        ];
+    }
+}
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Order/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/Resource/Order/CollectionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..22a6bb1be49c2719d81af2339c7feef95295a195
--- /dev/null
+++ b/app/code/Magento/Reports/Test/Unit/Model/Resource/Order/CollectionTest.php
@@ -0,0 +1,509 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Reports\Test\Unit\Model\Resource\Order;
+
+use Magento\Reports\Model\Resource\Order\Collection;
+
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class CollectionTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Reports\Model\Resource\Order\Collection
+     */
+    protected $collection;
+
+    /**
+     * @var \Magento\Framework\Data\Collection\EntityFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $entityFactoryMock;
+
+    /**
+     * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $loggerMock;
+
+    /**
+     * @var \Magento\Framework\Data\Collection\Db\FetchStrategyInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $fetchStrategyMock;
+
+    /**
+     * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $managerMock;
+
+    /**
+     * @var \Magento\Sales\Model\Resource\EntitySnapshot|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $entitySnapshotMock;
+
+    /**
+     * @var \Magento\Framework\DB\Helper|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $helperMock;
+
+    /**
+     * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $scopeConfigMock;
+
+    /**
+     * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $storeManagerMock;
+
+    /**
+     * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $timezoneMock;
+
+    /**
+     * @var \Magento\Sales\Model\Order\Config|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $configMock;
+
+    /**
+     * @var \Magento\Sales\Model\Resource\Report\OrderFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $orderFactoryMock;
+
+    /**
+     * @var \Zend_Db_Adapter_Abstract|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $dbMock;
+
+    /**
+     * @var \Zend_Db_Select|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $selectMock;
+
+    /**
+     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resourceMock;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function setUp()
+    {
+        $this->entityFactoryMock = $this->getMockBuilder('Magento\Framework\Data\Collection\EntityFactory')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->loggerMock = $this->getMockBuilder('Psr\Log\LoggerInterface')
+            ->getMock();
+        $this->fetchStrategyMock = $this->getMockBuilder('Magento\Framework\Data\Collection\Db\FetchStrategyInterface')
+            ->getMock();
+        $this->managerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface')
+            ->getMock();
+        $this->entitySnapshotMock = $this->getMockBuilder('Magento\Sales\Model\Resource\EntitySnapshot')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->helperMock = $this->getMockBuilder('Magento\Framework\DB\Helper')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->scopeConfigMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
+            ->getMock();
+        $this->storeManagerMock = $this->getMockBuilder('Magento\Store\Model\StoreManagerInterface')
+            ->getMock();
+        $this->timezoneMock = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime\TimezoneInterface')
+            ->getMock();
+        $this->configMock = $this->getMockBuilder('Magento\Sales\Model\Order\Config')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->orderFactoryMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\OrderFactory')
+            ->setMethods(['create'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->selectMock = $this->getMockBuilder('Zend_Db_Select')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->selectMock
+            ->expects($this->any())
+            ->method('columns')
+            ->willReturnSelf();
+        $this->selectMock
+            ->expects($this->any())
+            ->method('where')
+            ->willReturnSelf();
+        $this->selectMock
+            ->expects($this->any())
+            ->method('order')
+            ->willReturnSelf();
+        $this->selectMock
+            ->expects($this->any())
+            ->method('group')
+            ->willReturnSelf();
+        $this->selectMock
+            ->expects($this->any())
+            ->method('getPart')
+            ->willReturn([]);
+
+        $this->dbMock = $this->getMockForAbstractClass(
+            'Zend_Db_Adapter_Abstract',
+            [],
+            '',
+            false,
+            true,
+            true,
+            ['select', 'getIfNullSql', 'getDateFormatSql', 'prepareSqlCondition', 'getCheckSql']
+        );
+        $this->dbMock
+            ->expects($this->any())
+            ->method('select')
+            ->willReturn($this->selectMock);
+
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->resourceMock
+            ->expects($this->once())
+            ->method('getReadConnection')
+            ->willReturn($this->dbMock);
+
+        $this->collection = new Collection(
+            $this->entityFactoryMock,
+            $this->loggerMock,
+            $this->fetchStrategyMock,
+            $this->managerMock,
+            $this->entitySnapshotMock,
+            $this->helperMock,
+            $this->scopeConfigMock,
+            $this->storeManagerMock,
+            $this->timezoneMock,
+            $this->configMock,
+            $this->orderFactoryMock,
+            null,
+            $this->resourceMock
+        );
+    }
+
+    /**
+     * @return void
+     */
+    public function testCheckIsLive()
+    {
+        $range = '';
+        $this->scopeConfigMock
+            ->expects($this->once())
+            ->method('getValue')
+            ->with(
+                'sales/dashboard/use_aggregated_data',
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            );
+
+        $this->collection->checkIsLive($range);
+    }
+
+    /**
+     * @param int $useAggregatedData
+     * @param string $mainTable
+     * @param int $isFilter
+     * @param \PHPUnit_Framework_MockObject_Matcher_InvokedCount $getIfNullSqlResult
+     * @dataProvider useAggregatedDataDataProvider
+     * @return void
+     */
+    public function testPrepareSummary($useAggregatedData, $mainTable, $isFilter, $getIfNullSqlResult)
+    {
+        $range = '';
+        $customStart = 1;
+        $customEnd = 10;
+
+        $this->scopeConfigMock
+            ->expects($this->once())
+            ->method('getValue')
+            ->with(
+                'sales/dashboard/use_aggregated_data',
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            )
+            ->willReturn($useAggregatedData);
+
+        $orderMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\Order')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->orderFactoryMock
+            ->expects($this->any())
+            ->method('create')
+            ->willReturn($orderMock);
+
+        $this->resourceMock
+            ->expects($this->at(0))
+            ->method('getTable')
+            ->with($mainTable);
+
+        $this->dbMock
+            ->expects($getIfNullSqlResult)
+            ->method('getIfNullSql');
+
+        $this->collection->prepareSummary($range, $customStart, $customEnd, $isFilter);
+    }
+
+    /**
+     * @param int $range
+     * @param string $customStart
+     * @param string $customEnd
+     * @param string $expectedInterval
+     * @dataProvider firstPartDateRangeDataProvider
+     * @return void
+     */
+    public function testGetDateRangeFirstPart($range, $customStart, $customEnd, $expectedInterval)
+    {
+        $result = $this->collection->getDateRange($range, $customStart, $customEnd);
+        $interval = $result['to']->diff($result['from']);
+        $intervalResult = $interval->format('%y %m %d %h:%i:%s');
+        $this->assertEquals($expectedInterval, $intervalResult);
+    }
+
+    /**
+     * @param int $range
+     * @param string $customStart
+     * @param string $customEnd
+     * @param string $config
+     * @dataProvider secondPartDateRangeDataProvider
+     * @return void
+     */
+    public function testGetDateRangeSecondPart($range, $customStart, $customEnd, $config)
+    {
+        $this->scopeConfigMock
+            ->expects($this->once())
+            ->method('getValue')
+            ->with(
+                $config,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            )
+            ->willReturn(1);
+
+        $result = $this->collection->getDateRange($range, $customStart, $customEnd);
+        $this->assertEquals(3, count($result));
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetDateRangeWithReturnObject()
+    {
+        $this->assertEquals(2, count($this->collection->getDateRange('7d', '', '', true)));
+        $this->assertEquals(3, count($this->collection->getDateRange('7d', '', '', false)));
+    }
+
+    /**
+     * @return void
+     */
+    public function testAddItemCountExpr()
+    {
+        $this->selectMock
+            ->expects($this->once())
+            ->method('columns')
+            ->with(['items_count' => 'total_item_count'], 'main_table');
+        $this->collection->addItemCountExpr();
+    }
+
+    /**
+     * @param int $isFilter
+     * @param int $useAggregatedData
+     * @param string $mainTable
+     * @param \PHPUnit_Framework_MockObject_Matcher_InvokedCount $getIfNullSqlResult
+     * @dataProvider totalsDataProvider
+     * @return void
+     */
+    public function testCalculateTotals($isFilter, $useAggregatedData, $mainTable, $getIfNullSqlResult)
+    {
+        $this->scopeConfigMock
+            ->expects($this->once())
+            ->method('getValue')
+            ->with(
+                'sales/dashboard/use_aggregated_data',
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            )
+            ->willReturn($useAggregatedData);
+
+        $this->resourceMock
+            ->expects($this->at(0))
+            ->method('getTable')
+            ->with($mainTable);
+
+        $this->dbMock
+            ->expects($getIfNullSqlResult)
+            ->method('getIfNullSql');
+
+        $this->collection->checkIsLive('');
+        $this->collection->calculateTotals($isFilter);
+    }
+
+    /**
+     * @param int $isFilter
+     * @param string $useAggregatedData
+     * @param string $mainTable
+     * @dataProvider salesDataProvider
+     * @return void
+     */
+    public function testCalculateSales($isFilter, $useAggregatedData, $mainTable)
+    {
+        $this->scopeConfigMock
+            ->expects($this->once())
+            ->method('getValue')
+            ->with(
+                'sales/dashboard/use_aggregated_data',
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            )
+            ->willReturn($useAggregatedData);
+
+        $storeMock = $this->getMockBuilder('Magento\Store\Model\Store')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->storeManagerMock
+            ->expects($this->any())
+            ->method('getStore')
+            ->willReturn($storeMock);
+
+        $this->resourceMock
+            ->expects($this->at(0))
+            ->method('getTable')
+            ->with($mainTable);
+
+        $this->collection->calculateSales($isFilter);
+    }
+
+    /**
+     * @return void
+     */
+    public function testSetDateRange()
+    {
+        $fromDate = '1';
+        $toDate = '2';
+
+        $this->dbMock
+            ->expects($this->at(0))
+            ->method('prepareSqlCondition')
+            ->with('"created_at"', ['from' => $fromDate, 'to' => $toDate]);
+
+        $this->collection->setDateRange($fromDate, $toDate);
+    }
+
+    /**
+     * @param array $storeIds
+     * @param array $parameters
+     * @dataProvider storesDataProvider
+     * @return void
+     */
+    public function testSetStoreIds($storeIds, $parameters)
+    {
+        $this->dbMock
+            ->expects($this->any())
+            ->method('getIfNullSql')
+            ->willReturn('text');
+
+        $this->selectMock
+            ->expects($this->once())
+            ->method('columns')
+            ->with($parameters)
+            ->willReturnSelf();
+
+        $this->collection->setStoreIds($storeIds);
+    }
+
+    /**
+     * @return array
+     */
+    public function useAggregatedDataDataProvider()
+    {
+        return [
+            [1, 'sales_order_aggregated_created', 0, $this->never()],
+            [0, 'sales_order', 0, $this->exactly(7)],
+            [0, 'sales_order', 1, $this->exactly(6)]
+        ];
+    }
+
+    /**
+     * @return array
+     */
+    public function firstPartDateRangeDataProvider()
+    {
+        return [
+            ['', '', '', '0 0 0 23:59:59'],
+            ['24h', '', '', '0 0 1 0:0:0'],
+            ['7d', '', '', '0 0 6 23:59:59']
+        ];
+    }
+
+    /**
+     * @return array
+     */
+    public function secondPartDateRangeDataProvider()
+    {
+        return [
+            ['1m', 1, 10, 'reports/dashboard/mtd_start'],
+            ['1y', 1, 10, 'reports/dashboard/ytd_start'],
+            ['2y', 1, 10, 'reports/dashboard/ytd_start']
+        ];
+    }
+
+    /**
+     * @return array
+     */
+    public function totalsDataProvider()
+    {
+        return [
+            [1, 1, 'sales_order_aggregated_created', $this->never()],
+            [0, 1, 'sales_order_aggregated_created', $this->never()],
+            [1, 0, 'sales_order', $this->exactly(10)],
+            [0, 0, 'sales_order', $this->exactly(11)]
+        ];
+    }
+
+    /**
+     * @return array
+     */
+    public function salesDataProvider()
+    {
+        return [
+            [1, 1, 'sales_order_aggregated_created'],
+            [0, 1, 'sales_order_aggregated_created'],
+            [1, 0, 'sales_order'],
+            [0, 0, 'sales_order']
+        ];
+    }
+
+    /**
+     * @return array
+     */
+    public function storesDataProvider()
+    {
+        $firstReturn = [
+            'subtotal' => 'SUM(main_table.base_subtotal * main_table.base_to_global_rate)',
+            'tax' => 'SUM(main_table.base_tax_amount * main_table.base_to_global_rate)',
+            'shipping' => 'SUM(main_table.base_shipping_amount * main_table.base_to_global_rate)',
+            'discount' => 'SUM(main_table.base_discount_amount * main_table.base_to_global_rate)',
+            'total' => 'SUM(main_table.base_grand_total * main_table.base_to_global_rate)',
+            'invoiced' => 'SUM(main_table.base_total_paid * main_table.base_to_global_rate)',
+            'refunded' => 'SUM(main_table.base_total_refunded * main_table.base_to_global_rate)',
+            'profit' => 'SUM(text *  main_table.base_to_global_rate) + SUM(text * main_table.base_to_global_rate) '.
+                '- SUM(text * main_table.base_to_global_rate) - SUM(text * main_table.base_to_global_rate) '.
+                '- SUM(text * main_table.base_to_global_rate)',
+        ];
+
+        $secondReturn = [
+            'subtotal' => 'SUM(main_table.base_subtotal)',
+            'tax' => 'SUM(main_table.base_tax_amount)',
+            'shipping' => 'SUM(main_table.base_shipping_amount)',
+            'discount' => 'SUM(main_table.base_discount_amount)',
+            'total' => 'SUM(main_table.base_grand_total)',
+            'invoiced' => 'SUM(main_table.base_total_paid)',
+            'refunded' => 'SUM(main_table.base_total_refunded)',
+            'profit' => 'SUM(text) + SUM(text) - SUM(text) - SUM(text) - SUM(text)',
+        ];
+
+        return [
+            [[], $firstReturn],
+            [[1], $secondReturn]
+        ];
+    }
+}
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Collection/AbstractCollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Collection/AbstractCollectionTest.php
index 96ad13c9b21868aa019927b72cee62eba019797b..ed5075a8bf70b7e4aeeb28e4e5eec0e08af3d08f 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Collection/AbstractCollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Collection/AbstractCollectionTest.php
@@ -4,16 +4,16 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Reports\Test\Unit\Model\Resource\Report\Collection;
 
 class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var AbstractCollection
+     * Tested collection
+     *
+     * @var \Magento\Reports\Model\Resource\Report\Collection\AbstractCollection
      */
-    protected $_model;
+    protected $collection;
 
     protected function setUp()
     {
@@ -29,7 +29,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
             ->getMockForAbstractClass();
         $resource->method('getReadConnection')->willReturn($connection);
 
-        $this->_model = new \Magento\Reports\Model\Resource\Report\Collection\AbstractCollection(
+        $this->collection = new \Magento\Reports\Model\Resource\Report\Collection\AbstractCollection(
             $entityFactory,
             $logger,
             $fetchStrategy,
@@ -41,15 +41,15 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
 
     public function testIsSubtotalsGetDefault()
     {
-        $this->assertFalse($this->_model->isSubTotals());
+        $this->assertFalse($this->collection->isSubTotals());
     }
 
     public function testSetIsSubtotals()
     {
-        $this->_model->setIsSubTotals(true);
-        $this->assertTrue($this->_model->isSubTotals());
+        $this->collection->setIsSubTotals(true);
+        $this->assertTrue($this->collection->isSubTotals());
 
-        $this->_model->setIsSubTotals(false);
-        $this->assertFalse($this->_model->isSubTotals());
+        $this->collection->setIsSubTotals(false);
+        $this->assertFalse($this->collection->isSubTotals());
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/CollectionTest.php
index c1e8adeeee7d3c16a6bb8984939699ef12c1ef48..ca08b3b21761a51c314c60a315f89e1dc5d359e2 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/CollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/CollectionTest.php
@@ -3,32 +3,196 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
 namespace Magento\Reports\Test\Unit\Model\Resource\Report;
 
+use Magento\Reports\Model\Resource\Report\Collection;
+
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * @var \Magento\Reports\Model\Resource\Report\Collection
      */
-    protected $_model;
+    protected $collection;
 
+    /**
+     * @var \Magento\Framework\Data\Collection\EntityFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $entityFactoryMock;
+
+    /**
+     * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $timezoneMock;
+
+    /**
+     * @var \Magento\Reports\Model\Resource\Report\Collection\Factory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $factoryMock;
+
+    /**
+     * {@inheritDoc}
+     */
     protected function setUp()
     {
-        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->_model = $helper->getObject('Magento\Reports\Model\Resource\Report\Collection');
+        $this->entityFactoryMock = $this->getMockBuilder('Magento\Framework\Data\Collection\EntityFactory')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->timezoneMock = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime\TimezoneInterface')
+            ->getMock();
+        $this->factoryMock = $this->getMockBuilder('Magento\Reports\Model\Resource\Report\Collection\Factory')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->timezoneMock
+            ->expects($this->any())
+            ->method('formatDateTime')
+            ->will($this->returnCallback([$this, 'formatDateTime']));
+
+        $this->collection = new Collection(
+            $this->entityFactoryMock,
+            $this->timezoneMock,
+            $this->factoryMock
+        );
     }
 
-    public function testGetIntervalsWithoutSpecifiedPeriod()
+    /**
+     * @return void
+     */
+    public function testGetPeriods()
     {
-        $startDate = new \DateTime('-3 day');
-        $endDate = new \DateTime('+3 day');
-        $this->_model->setInterval($startDate, $endDate);
+        $expectedArray = ['day' => 'Day', 'month' => 'Month', 'year' => 'Year'];
+        $this->assertEquals($expectedArray, $this->collection->getPeriods());
+    }
 
-        $this->assertEquals(0, $this->_model->getSize());
+    /**
+     * @return void
+     */
+    public function testGetStoreIds()
+    {
+        $storeIds = [1];
+        $this->assertEquals(null, $this->collection->getStoreIds());
+        $this->collection->setStoreIds($storeIds);
+        $this->assertEquals($storeIds, $this->collection->getStoreIds());
     }
 
-    public function testGetIntervalsWithoutSpecifiedInterval()
+    /**
+     * @param string $period
+     * @param \DateTime $fromDate
+     * @param \DateTime $toDate
+     * @param int $size
+     * @dataProvider intervalsDataProvider
+     * @return void
+     */
+    public function testGetSize($period, $fromDate, $toDate, $size)
     {
-        $this->assertEquals(0, $this->_model->getSize());
+        $this->collection->setPeriod($period);
+        $this->collection->setInterval($fromDate, $toDate);
+        $this->assertEquals($size, $this->collection->getSize());
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetPageSize()
+    {
+        $pageSize = 1;
+        $this->assertEquals(null, $this->collection->getPageSize());
+        $this->collection->setPageSize($pageSize);
+        $this->assertEquals($pageSize, $this->collection->getPageSize());
+    }
+
+    /**
+     * @param string $period
+     * @param \DateTime $fromDate
+     * @param \DateTime $toDate
+     * @param int $size
+     * @dataProvider intervalsDataProvider
+     * @return void
+     */
+    public function testGetReports($period, $fromDate, $toDate, $size)
+    {
+        $this->collection->setPeriod($period);
+        $this->collection->setInterval($fromDate, $toDate);
+        $reports = $this->collection->getReports();
+        foreach ($reports as $report) {
+            $this->assertInstanceOf('\Magento\Framework\Object', $report);
+            $reportData = $report->getData();
+            $this->assertTrue(empty($reportData['children']));
+            $this->assertTrue($reportData['is_empty']);
+        }
+        $this->assertEquals($size, count($reports));
+    }
+
+    /**
+     * @return void
+     */
+    public function testLoadData()
+    {
+        $this->assertInstanceOf('\Magento\Reports\Model\Resource\Report\Collection', $this->collection->loadData());
+    }
+
+    /**
+     * @return array
+     */
+    public function intervalsDataProvider()
+    {
+        return [
+            [
+                '_period' => 'day',
+                '_from' => new \DateTime('-3 day'),
+                '_to' => new \DateTime('+3 day'),
+                'size' => 7
+            ],
+            [
+                '_period' => 'month',
+                '_from' => new \DateTime('2015-01-15 11:11:11'),
+                '_to' => new \DateTime('2015-01-25 11:11:11'),
+                'size' => 1
+            ],
+            [
+                '_period' => 'month',
+                '_from' => new \DateTime('2015-01-15 11:11:11'),
+                '_to' => new \DateTime('2015-02-25 11:11:11'),
+                'size' => 2
+            ],
+            [
+                '_period' => 'year',
+                '_from' => new \DateTime('2015-01-15 11:11:11'),
+                '_to' => new \DateTime('2015-01-25 11:11:11'),
+                'size' => 1
+            ],
+            [
+                '_period' => 'year',
+                '_from' => new \DateTime('2014-01-15 11:11:11'),
+                '_to' => new \DateTime('2015-01-25 11:11:11'),
+                'size' => 2
+            ],
+            [
+                '_period' => null,
+                '_from' => new \DateTime('-3 day'),
+                '_to' => new \DateTime('+3 day'),
+                'size' => 0
+            ]
+        ];
+    }
+
+    /**
+     * @return string
+     */
+    public function formatDateTime()
+    {
+        $args = func_get_args();
+
+        $dateStart = $args[0];
+
+        $formatter = new \IntlDateFormatter(
+            "en_US",
+            \IntlDateFormatter::SHORT,
+            \IntlDateFormatter::SHORT,
+            'America/Los_Angeles'
+        );
+
+        return $formatter->format($dateStart);
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Product/ViewedTest.php b/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Product/ViewedTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b22e4f2bf044939cb3db933093d341afbf6318ac
--- /dev/null
+++ b/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Product/ViewedTest.php
@@ -0,0 +1,286 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Reports\Test\Unit\Model\Resource\Report\Product;
+
+use Magento\Reports\Model\Resource\Report\Product\Viewed;
+
+/**
+ * @SuppressWarnings(PHPMD.TooManyFields)
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class ViewedTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Reports\Model\Resource\Report\Product\Viewed
+     */
+    protected $viewed;
+
+    /**
+     * @var \Magento\Framework\Model\Resource\Db\Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $contextMock;
+
+    /**
+     * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $loggerMock;
+
+    /**
+     * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $timezoneMock;
+
+    /**
+     * @var \Magento\Reports\Model\FlagFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $flagFactoryMock;
+
+    /**
+     * @var \Magento\Framework\Stdlib\DateTime|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $dateTimeMock;
+
+    /**
+     * @var \Magento\Framework\Stdlib\DateTime\Timezone\Validator|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $validatorMock;
+
+    /**
+     * @var \Magento\Catalog\Model\Resource\Product|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $productMock;
+
+    /**
+     * @var \Magento\Reports\Model\Resource\Helper|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $helperMock;
+
+    /**
+     * @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $connectionMock;
+
+    /**
+     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resourceMock;
+
+    /**
+     * @var \Magento\Framework\DB\Select|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $selectMock;
+
+    /**
+     * @var \Zend_Db_Statement_Interface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $zendDbMock;
+
+    /**
+     * @var \Magento\Eav\Model\Entity\Attribute\AbstractAttribute|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $attributeMock;
+
+    /**
+     * @var \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $backendMock;
+
+    /**
+     * @var \Magento\Reports\Model\Flag|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $flagMock;
+
+    /**
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     * @return void
+     */
+    protected function setUp()
+    {
+        $this->zendDbMock = $this->getMockBuilder('Zend_Db_Statement_Interface')->getMock();
+        $this->zendDbMock->expects($this->any())->method('fetchColumn')->willReturn([]);
+
+        $this->selectMock = $this->getMockBuilder('Magento\Framework\DB\Select')
+            ->disableOriginalConstructor()
+            ->setMethods(
+                [
+                    'from',
+                    'where',
+                    'joinInner',
+                    'joinLeft',
+                    'having',
+                    'useStraightJoin',
+                    'insertFromSelect',
+                    '__toString'
+                ]
+            )
+            ->getMock();
+        $this->selectMock->expects($this->any())->method('from')->willReturnSelf();
+        $this->selectMock->expects($this->any())->method('where')->willReturnSelf();
+        $this->selectMock->expects($this->any())->method('joinInner')->willReturnSelf();
+        $this->selectMock->expects($this->any())->method('joinLeft')->willReturnSelf();
+        $this->selectMock->expects($this->any())->method('having')->willReturnSelf();
+        $this->selectMock->expects($this->any())->method('useStraightJoin')->willReturnSelf();
+        $this->selectMock->expects($this->any())->method('insertFromSelect')->willReturnSelf();
+        $this->selectMock->expects($this->any())->method('__toString')->willReturn('string');
+
+        $this->connectionMock = $this->getMockBuilder('Magento\Framework\DB\Adapter\AdapterInterface')->getMock();
+        $this->connectionMock->expects($this->any())->method('select')->willReturn($this->selectMock);
+        $this->connectionMock->expects($this->any())->method('query')->willReturn($this->zendDbMock);
+
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\Resource')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
+        $this->resourceMock->expects($this->any())->method('getTableName')->will(
+            $this->returnCallback(
+                function ($arg) {
+                    return $arg;
+                }
+            )
+        );
+
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getResources')->willReturn($this->resourceMock);
+
+        $this->loggerMock = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
+
+        $dateTime = $this->getMockBuilder('DateTime')->getMock();
+
+        $this->timezoneMock = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime\TimezoneInterface')->getMock();
+        $this->timezoneMock->expects($this->any())->method('scopeDate')->willReturn($dateTime);
+
+        $this->dateTimeMock = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime')->getMock();
+
+        $this->flagMock = $this->getMockBuilder('Magento\Reports\Model\Flag')
+            ->disableOriginalConstructor()
+            ->setMethods(['setReportFlagCode', 'unsetData', 'loadSelf', 'setFlagData', 'setLastUpdate', 'save'])
+            ->getMock();
+
+        $this->flagFactoryMock = $this->getMockBuilder('Magento\Reports\Model\FlagFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $this->flagFactoryMock->expects($this->any())->method('create')->willReturn($this->flagMock);
+
+        $this->validatorMock = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime\Timezone\Validator')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->backendMock = $this->getMockBuilder('Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->attributeMock = $this->getMockBuilder('Magento\Eav\Model\Entity\Attribute\AbstractAttribute')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->attributeMock->expects($this->any())->method('getBackend')->willReturn($this->backendMock);
+
+        $this->productMock = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->productMock->expects($this->any())->method('getAttribute')->willReturn($this->attributeMock);
+
+        $this->helperMock = $this->getMockBuilder('Magento\Reports\Model\Resource\Helper')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->viewed = new Viewed(
+            $this->contextMock,
+            $this->loggerMock,
+            $this->timezoneMock,
+            $this->flagFactoryMock,
+            $this->dateTimeMock,
+            $this->validatorMock,
+            $this->productMock,
+            $this->helperMock
+        );
+    }
+
+    /**
+     * @param mixed $from
+     * @param mixed $to
+     * @param \PHPUnit_Framework_MockObject_Matcher_InvokedCount $truncateCount
+     * @param \PHPUnit_Framework_MockObject_Matcher_InvokedCount $deleteCount
+     * @dataProvider intervalsDataProvider
+     * @return void
+     */
+    public function testAggregate($from, $to, $truncateCount, $deleteCount)
+    {
+        $this->connectionMock->expects($truncateCount)->method('truncateTable');
+        $this->connectionMock->expects($deleteCount)->method('delete');
+
+        $this->helperMock
+            ->expects($this->at(0))
+            ->method('updateReportRatingPos')
+            ->with(
+                $this->connectionMock,
+                'day',
+                'views_num',
+                'report_viewed_product_aggregated_daily',
+                'report_viewed_product_aggregated_daily'
+            )
+            ->willReturnSelf();
+        $this->helperMock
+            ->expects($this->at(1))
+            ->method('updateReportRatingPos')
+            ->with(
+                $this->connectionMock,
+                'month',
+                'views_num',
+                'report_viewed_product_aggregated_daily',
+                'report_viewed_product_aggregated_monthly'
+            )
+            ->willReturnSelf();
+        $this->helperMock
+            ->expects($this->at(2))
+            ->method('updateReportRatingPos')
+            ->with(
+                $this->connectionMock,
+                'year',
+                'views_num',
+                'report_viewed_product_aggregated_daily',
+                'report_viewed_product_aggregated_yearly'
+            )
+            ->willReturnSelf();
+
+        $this->flagMock->expects($this->once())->method('unsetData')->willReturnSelf();
+        $this->flagMock->expects($this->once())->method('loadSelf')->willReturnSelf();
+        $this->flagMock->expects($this->never())->method('setFlagData')->willReturnSelf();
+        $this->flagMock->expects($this->once())->method('setLastUpdate')->willReturnSelf();
+        $this->flagMock->expects($this->once())->method('save')->willReturnSelf();
+        $this->flagMock
+            ->expects($this->once())
+            ->method('setReportFlagCode')
+            ->with(\Magento\Reports\Model\Flag::REPORT_PRODUCT_VIEWED_FLAG_CODE)
+            ->willReturnSelf();
+
+        $this->viewed->aggregate($from, $to);
+    }
+
+    /**
+     * @return array
+     */
+    public function intervalsDataProvider()
+    {
+        return [
+            [
+                'from' => new \DateTime('+3 day'),
+                'to' => new \DateTime('-3 day'),
+                'truncateCount' => $this->never(),
+                'deleteCount' => $this->once()
+            ],
+            [
+                'from' => null,
+                'to' => null,
+                'truncateCount' => $this->once(),
+                'deleteCount' => $this->never()
+            ]
+        ];
+    }
+}
diff --git a/app/code/Magento/Rule/Model/AbstractModel.php b/app/code/Magento/Rule/Model/AbstractModel.php
index 8aedb81590ed17eb55dc379c90a3058160af320a..ce15aad634bed7a86551a2b483fc8039e2edb679 100644
--- a/app/code/Magento/Rule/Model/AbstractModel.php
+++ b/app/code/Magento/Rule/Model/AbstractModel.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 /**
  * Abstract Rule entity data model
  */
@@ -63,16 +61,22 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel
     abstract public function getActionsInstance();
 
     /**
+     * Form factory
+     *
      * @var \Magento\Framework\Data\FormFactory
      */
     protected $_formFactory;
 
     /**
+     * Timezone instance
+     *
      * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface
      */
     protected $_localeDate;
 
     /**
+     * Constructor
+     *
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
@@ -233,7 +237,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel
      */
     protected function _resetConditions($conditions = null)
     {
-        if (is_null($conditions)) {
+        if (null === $conditions) {
             $conditions = $this->getConditionsInstance();
         }
         $conditions->setRule($this)->setId('1')->setPrefix('conditions');
@@ -250,7 +254,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel
      */
     protected function _resetActions($actions = null)
     {
-        if (is_null($actions)) {
+        if (null === $actions) {
             $actions = $this->getActionsInstance();
         }
         $actions->setRule($this)->setId('1')->setPrefix('actions');
@@ -390,6 +394,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel
      * Check availability to delete rule
      *
      * @return bool
+     * @codeCoverageIgnore
      */
     public function isDeleteable()
     {
@@ -401,6 +406,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel
      *
      * @param bool $value
      * @return $this
+     * @codeCoverageIgnore
      */
     public function setIsDeleteable($value)
     {
@@ -412,6 +418,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel
      * Check if rule is readonly
      *
      * @return bool
+     * @codeCoverageIgnore
      */
     public function isReadonly()
     {
@@ -423,6 +430,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel
      *
      * @param bool $value
      * @return $this
+     * @codeCoverageIgnore
      */
     public function setIsReadonly($value)
     {
diff --git a/app/code/Magento/Rule/Test/Unit/Model/Condition/Product/AbstractProductTest.php b/app/code/Magento/Rule/Test/Unit/Model/Condition/Product/AbstractProductTest.php
index 32d0b012c88418f6e18656975357f3d17a9461f1..7c628927f6c15426dba5042fa02316cb428864bd 100644
--- a/app/code/Magento/Rule/Test/Unit/Model/Condition/Product/AbstractProductTest.php
+++ b/app/code/Magento/Rule/Test/Unit/Model/Condition/Product/AbstractProductTest.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Rule\Test\Unit\Model\Condition\Product;
 
 use ReflectionMethod;
@@ -14,24 +12,30 @@ use ReflectionProperty;
 class AbstractProductTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var AbstractProduct|\PHPUnit_Framework_MockObject_MockObject
+     * Tested condition
+     *
+     * @var \Magento\Rule\Model\Condition\Product\AbstractProduct|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_condition;
 
     /**
+     * Framework object
+     *
      * @var \Magento\Framework\Object|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_object;
 
     /**
+     * Reflection for Magento\Rule\Model\Condition\Product\AbstractProduct::$_entityAttributeValues
+     *
      * @var \ReflectionProperty
-     * 'Magento\Rule\Model\Condition\Product\AbstractProduct::_entityAttributeValues'
      */
     protected $_entityAttributeValuesProperty;
 
     /**
+     * Reflection for Magento\Rule\Model\Condition\Product\AbstractProduct::$_config
+     *
      * @var \ReflectionProperty
-     * 'Magento\Rule\Model\Condition\Product\AbstractProduct::_config'
      */
     protected $_configProperty;
 
@@ -159,8 +163,10 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
             $this->_condition,
             $this->getMock('Magento\Eav\Model\Config', [], [], '', false)
         );
-        $this->_entityAttributeValuesProperty->setValue($this->_condition,
-            $this->getMock('Magento\Eav\Model\Config', [], [], '', false));
+        $this->_entityAttributeValuesProperty->setValue(
+            $this->_condition,
+            $this->getMock('Magento\Eav\Model\Config', [], [], '', false)
+        );
 
         $attribute = new \Magento\Framework\Object();
         $attribute->setBackendType('datetime');
@@ -306,7 +312,7 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $attrObjectSourceMock
-            ->expects(is_null($expectedAttrObjSourceAllOptionsParam) ? $this->never() : $this->once())
+            ->expects((null === $expectedAttrObjSourceAllOptionsParam) ? $this->never() : $this->once())
             ->method('getAllOptions')
             ->with($expectedAttrObjSourceAllOptionsParam)
             ->willReturn($attrObjectSourceAllOptionsValue);
@@ -317,7 +323,7 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $attributeObjectMock->method('usesSource')->willReturn(true);
         $attributeObjectMock
-            ->expects(is_null($attributeObjectFrontendInput) ? $this->never() : $this->once())
+            ->expects((null === $attributeObjectFrontendInput) ? $this->never() : $this->once())
             ->method('getFrontendInput')
             ->willReturn($attributeObjectFrontendInput);
         $attributeObjectMock->method('getSource')->willReturn($attrObjectSourceMock);
@@ -345,12 +351,14 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
         $attrSetCollectionValueMock->method('setEntityTypeFilter')->will($this->returnSelf());
         $attrSetCollectionValueMock->method('load')->will($this->returnSelf());
         $attrSetCollectionValueMock
-            ->expects(is_null($attrSetCollectionOptionsArray) ? $this->never() : $this->once())
+            ->expects((null === $attrSetCollectionOptionsArray) ? $this->never() : $this->once())
             ->method('toOptionArray')
             ->willReturn($attrSetCollectionOptionsArray);
 
-        $attrSetCollectionProperty =
-            new ReflectionProperty('Magento\Rule\Model\Condition\Product\AbstractProduct', '_attrSetCollection');
+        $attrSetCollectionProperty = new ReflectionProperty(
+            'Magento\Rule\Model\Condition\Product\AbstractProduct',
+            '_attrSetCollection'
+        );
         $attrSetCollectionProperty->setAccessible(true);
         $attrSetCollectionProperty->setValue($this->_condition, $attrSetCollectionValueMock);
 
@@ -366,6 +374,8 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
+     * Data provider for prepare value options
+     *
      * @return array
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */