Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AggregateSalesReportBestsellersDataTest.php
Go to the documentation of this file.
1 <?php
7 
8 use \Magento\Sales\Model\CronJob\AggregateSalesReportBestsellersData;
9 
13 class AggregateSalesReportBestsellersDataTest extends \PHPUnit\Framework\TestCase
14 {
19 
23  protected $localeDateMock;
24 
29 
33  protected $observer;
34 
35  protected function setUp()
36  {
37  $this->localeResolverMock = $this->getMockBuilder(\Magento\Framework\Locale\ResolverInterface::class)
38  ->disableOriginalConstructor()
39  ->getMock();
40 
41  $this->bestsellersFactoryMock =
42  $this->getMockBuilder(\Magento\Sales\Model\ResourceModel\Report\BestsellersFactory::class)
43  ->disableOriginalConstructor()
44  ->setMethods(['create'])
45  ->getMock();
46  $this->localeDateMock = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime\TimezoneInterface::class)
47  ->disableOriginalConstructor()
48  ->getMock();
49 
50  $this->observer = new AggregateSalesReportBestsellersData(
51  $this->localeResolverMock,
52  $this->localeDateMock,
53  $this->bestsellersFactoryMock
54  );
55  }
56 
57  public function testExecute()
58  {
59  $date = $this->setupAggregate();
60  $bestsellersMock = $this->getMockBuilder(\Magento\Sales\Model\ResourceModel\Report\Bestsellers::class)
61  ->disableOriginalConstructor()
62  ->getMock();
63  $bestsellersMock->expects($this->once())
64  ->method('aggregate')
65  ->with($date);
66  $this->bestsellersFactoryMock->expects($this->once())
67  ->method('create')
68  ->will($this->returnValue($bestsellersMock));
69  $this->observer->execute();
70  }
71 
77  protected function setupAggregate()
78  {
79  $this->localeResolverMock->expects($this->once())
80  ->method('emulate')
81  ->with(0);
82  $this->localeResolverMock->expects($this->once())
83  ->method('revert');
84 
85  $date = (new \DateTime())->sub(new \DateInterval('PT25H'));
86  $this->localeDateMock->expects($this->once())
87  ->method('date')
88  ->will($this->returnValue($date));
89 
90  return $date;
91  }
92 }