Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AlgorithmAdvancedTest.php
Go to the documentation of this file.
1 <?php
7 
10 
14 class AlgorithmAdvancedTest extends \PHPUnit\Framework\TestCase
15 {
23  public function testWithoutLimits()
24  {
25  $layer = $this->createLayer();
26  $priceResource = $this->createPriceResource($layer);
27  $interval = $this->createInterval($priceResource);
28 
32  $request = $objectManager->get(\Magento\TestFramework\Request::class);
33  $request->setParam('price', null);
34  $model = $this->_prepareFilter($layer, $priceResource);
35  $this->assertEquals(
36  [
37  0 => ['from' => 0, 'to' => 20, 'count' => 3],
38  1 => ['from' => 20, 'to' => '', 'count' => 4],
39  ],
40  $model->calculateSeparators($interval)
41  );
42  }
43 
53  protected function _prepareFilter($layer, $priceResource, $request = null)
54  {
57  ->create(\Magento\Framework\Search\Dynamic\Algorithm::class);
59  $filter = Bootstrap::getObjectManager()
60  ->create(
61  \Magento\Catalog\Model\Layer\Filter\Price::class,
62  ['layer' => $layer, 'resource' => $priceResource, 'priceAlgorithm' => $model]
63  );
64  $filter->setLayer($layer)->setAttributeModel(new DataObject(['attribute_code' => 'price']));
65  if ($request !== null) {
66  $filter->apply(
67  $request,
69  \Magento\Framework\View\LayoutInterface::class
70  )->createBlock(
71  \Magento\Framework\View\Element\Text::class
72  )
73  );
74  $interval = $filter->getInterval();
75  if ($interval) {
76  $model->setLimits($interval[0], $interval[1]);
77  }
78  }
79  $collection = $layer->getProductCollection();
80  $model->setStatistics(
81  $collection->getMinPrice(),
82  $collection->getMaxPrice(),
83  $collection->getPriceStandardDeviation(),
84  $collection->getPricesCount()
85  );
86  return $model;
87  }
88 
96  public function testWithLimits()
97  {
98  $this->markTestIncomplete('Bug MAGE-6561');
99 
100  $layer = $this->createLayer();
101  $priceResource = $this->createPriceResource($layer);
102  $interval = $this->createInterval($priceResource);
103 
107  $request = $objectManager->get(\Magento\TestFramework\Request::class);
108  $request->setParam('price', '10-100');
109  $model = $this->_prepareFilter($layer, $priceResource, $request);
110  $this->assertEquals(
111  [
112  0 => ['from' => 10, 'to' => 20, 'count' => 2],
113  1 => ['from' => 20, 'to' => 100, 'count' => 2],
114  ],
115  $model->calculateSeparators($interval)
116  );
117  }
118 
122  protected function createLayer()
123  {
124  $layer = Bootstrap::getObjectManager()
125  ->create(\Magento\Catalog\Model\Layer\Category::class);
126  $layer->setCurrentCategory(4);
127  $layer->setState(
128  Bootstrap::getObjectManager()->create(\Magento\Catalog\Model\Layer\State::class)
129  );
130  return $layer;
131  }
132 
137  protected function createPriceResource($layer)
138  {
140  ->create(\Magento\Catalog\Model\ResourceModel\Layer\Filter\Price::class, ['layer' => $layer]);
141  }
142 
147  protected function createInterval($priceResource)
148  {
150  ->create(\Magento\CatalogSearch\Model\Price\Interval::class, ['resource' => $priceResource]);
151  }
152 }
$objectManager
Definition: bootstrap.php:17