Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ReindexRuleProductPriceTest.php
Go to the documentation of this file.
1 <?php
8 
10 
11 class ReindexRuleProductPriceTest extends \PHPUnit\Framework\TestCase
12 {
16  private $model;
17 
21  private $storeManagerMock;
22 
26  private $ruleProductsSelectBuilderMock;
27 
31  private $productPriceCalculatorMock;
32 
36  private $dateTimeMock;
37 
41  private $pricesPersistorMock;
42 
43  protected function setUp()
44  {
45  $this->storeManagerMock = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class)
46  ->disableOriginalConstructor()
47  ->getMock();
48  $this->ruleProductsSelectBuilderMock =
49  $this->getMockBuilder(\Magento\CatalogRule\Model\Indexer\RuleProductsSelectBuilder::class)
50  ->disableOriginalConstructor()
51  ->getMock();
52  $this->productPriceCalculatorMock =
53  $this->getMockBuilder(\Magento\CatalogRule\Model\Indexer\ProductPriceCalculator::class)
54  ->disableOriginalConstructor()
55  ->getMock();
56  $this->dateTimeMock = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime\DateTime::class)
57  ->disableOriginalConstructor()
58  ->getMock();
59  $this->pricesPersistorMock =
60  $this->getMockBuilder(\Magento\CatalogRule\Model\Indexer\RuleProductPricesPersistor::class)
61  ->disableOriginalConstructor()
62  ->getMock();
63  $this->model = new \Magento\CatalogRule\Model\Indexer\ReindexRuleProductPrice(
64  $this->storeManagerMock,
65  $this->ruleProductsSelectBuilderMock,
66  $this->productPriceCalculatorMock,
67  $this->dateTimeMock,
68  $this->pricesPersistorMock
69  );
70  }
71 
72  public function testExecute()
73  {
74  $websiteId = 234;
75  $productMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
76  ->disableOriginalConstructor()
77  ->getMock();
78 
79  $websiteMock = $this->getMockBuilder(\Magento\Store\Api\Data\WebsiteInterface::class)
80  ->disableOriginalConstructor()
81  ->getMock();
82  $websiteMock->expects($this->once())->method('getId')->willReturn($websiteId);
83  $this->storeManagerMock->expects($this->once())->method('getWebsites')->willReturn([$websiteMock]);
84 
85  $statementMock = $this->getMockBuilder(\Zend_Db_Statement_Interface::class)
86  ->disableOriginalConstructor()
87  ->getMock();
88  $this->ruleProductsSelectBuilderMock->expects($this->once())
89  ->method('build')
90  ->with($websiteId, $productMock, true)
91  ->willReturn($statementMock);
92 
93  $ruleData = [
94  'product_id' => 100,
95  'website_id' => 1,
96  'customer_group_id' => 2,
97  'from_time' => mktime(0, 0, 0, date('m'), date('d') - 100),
98  'to_time' => mktime(0, 0, 0, date('m'), date('d') + 100),
99  'action_stop' => true
100  ];
101 
102  $this->dateTimeMock->expects($this->at(0))
103  ->method('date')
104  ->with('Y-m-d 00:00:00', $ruleData['from_time'])
105  ->willReturn($ruleData['from_time']);
106  $this->dateTimeMock->expects($this->at(1))
107  ->method('timestamp')
108  ->with($ruleData['from_time'])
109  ->willReturn($ruleData['from_time']);
110 
111  $this->dateTimeMock->expects($this->at(2))
112  ->method('date')
113  ->with('Y-m-d 00:00:00', $ruleData['to_time'])
114  ->willReturn($ruleData['to_time']);
115  $this->dateTimeMock->expects($this->at(3))
116  ->method('timestamp')
117  ->with($ruleData['to_time'])
118  ->willReturn($ruleData['to_time']);
119 
120  $statementMock->expects($this->at(0))->method('fetch')->willReturn($ruleData);
121  $statementMock->expects($this->at(1))->method('fetch')->willReturn(false);
122 
123  $this->productPriceCalculatorMock->expects($this->atLeastOnce())->method('calculate');
124  $this->pricesPersistorMock->expects($this->once())->method('execute');
125 
126  $this->assertTrue($this->model->execute(1, $productMock, true));
127  }
128 }
$ruleData
Definition: tax_rule.php:26