예제 #1
0
 /**
  * @param Dimension $dimension
  * @return string
  */
 private function generateExpression(Dimension $dimension)
 {
     $field = $dimension->getName();
     $value = $dimension->getValue();
     if ('scope' === $field) {
         $field = self::STORE_FIELD_NAME;
         $value = $this->scopeResolver->getScope($value)->getId();
     }
     return $this->conditionManager->generateCondition('search_index.' . $field, '=', $value);
 }
예제 #2
0
 /**
  * @SuppressWarnings(PHPMD.NPathComplexity)
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 protected function setUp()
 {
     $objectManager = new ObjectManager($this);
     $this->conditionManager = $this->getMockBuilder('Magento\\Framework\\Search\\Adapter\\Mysql\\ConditionManager')->disableOriginalConstructor()->setMethods(['generateCondition', 'combineQueries', 'wrapBrackets'])->getMock();
     $this->conditionManager->expects($this->any())->method('generateCondition')->will($this->returnCallback(function ($field, $operator, $value) {
         return sprintf('%s %s %s', $field, $operator, $value);
     }));
     $this->conditionManager->expects($this->any())->method('combineQueries')->will($this->returnCallback(function ($queries, $operator) {
         return implode(' ' . $operator . ' ', array_filter($queries, 'strlen'));
     }));
     $this->conditionManager->expects($this->any())->method('wrapBrackets')->will($this->returnCallback(function ($query) {
         return !empty($query) ? sprintf('(%s)', $query) : '';
     }));
     $rangeBuilder = $this->getMockBuilder('\\Magento\\Framework\\Search\\Adapter\\Mysql\\Filter\\Builder\\Range')->setMethods(['buildFilter'])->disableOriginalConstructor()->getMock();
     $rangeBuilder->expects($this->any())->method('buildFilter')->will($this->returnCallback(function (FilterInterface $filter, $isNegation) {
         /**
          * @var \Magento\Framework\Search\Request\Filter\Range $filter
          * @var \Magento\Framework\DB\Adapter\AdapterInterface $adapter
          */
         $fromCondition = '';
         if ($filter->getFrom() !== null) {
             $fromCondition = $this->conditionManager->generateCondition($filter->getField(), $isNegation ? '<' : '>=', $filter->getFrom());
         }
         $toCondition = '';
         if ($filter->getTo() !== null) {
             $toCondition = $this->conditionManager->generateCondition($filter->getField(), $isNegation ? '>=' : '<', $filter->getTo());
         }
         $unionOperator = $isNegation ? Select::SQL_OR : Select::SQL_AND;
         return $this->conditionManager->combineQueries([$fromCondition, $toCondition], $unionOperator);
     }));
     $termBuilder = $this->getMockBuilder('\\Magento\\Framework\\Search\\Adapter\\Mysql\\Filter\\Builder\\Term')->setMethods(['buildFilter'])->disableOriginalConstructor()->getMock();
     $termBuilder->expects($this->any())->method('buildFilter')->will($this->returnCallback(function (FilterInterface $filter, $isNegation) {
         /**
          * @var \Magento\Framework\Search\Request\Filter\Term $filter
          * @var \Magento\Framework\DB\Adapter\AdapterInterface $adapter
          */
         return $this->conditionManager->generateCondition($filter->getField(), $isNegation ? '!=' : '=', $filter->getValue());
     }));
     $this->preprocessor = $this->getMockBuilder('Magento\\Framework\\Search\\Adapter\\Mysql\\Filter\\PreprocessorInterface')->setMethods(['process'])->disableOriginalConstructor()->getMockForAbstractClass();
     $this->preprocessor->expects($this->any())->method('process')->willReturnCallback(function ($filter, $isNegation, $queryString) {
         return $this->conditionManager->wrapBrackets($queryString);
     });
     $this->builder = $objectManager->getObject('Magento\\Framework\\Search\\Adapter\\Mysql\\Filter\\Builder', ['range' => $rangeBuilder, 'term' => $termBuilder, 'conditionManager' => $this->conditionManager, 'preprocessor' => $this->preprocessor]);
 }
예제 #3
0
 /**
  * @param Dimension[] $dimensions
  * @return string[]
  */
 private function prepareDimensions(array $dimensions)
 {
     $preparedDimensions = [];
     foreach ($dimensions as $dimension) {
         if ('scope' === $dimension->getName()) {
             continue;
         }
         $preparedDimensions[] = $this->conditionManager->generateCondition($dimension->getName(), '=', $dimension->getValue());
     }
     return $preparedDimensions;
 }
 /**
  * @dataProvider generateConditionDataProvider
  * @param $field
  * @param $operator
  * @param $value
  * @param $expectedResult
  */
 public function testGenerateCondition($field, $operator, $value, $expectedResult)
 {
     $actualResult = $this->conditionManager->generateCondition($field, $operator, $value);
     $this->assertEquals($expectedResult, $actualResult);
 }
예제 #5
0
 /**
  * @param string $field
  * @param string $operator
  * @param string $value
  * @return string
  */
 private function getPart($field, $operator, $value)
 {
     return $value === null ? '' : $this->conditionManager->generateCondition($field, $operator, $value);
 }
예제 #6
0
 /**
  * {@inheritdoc}
  */
 public function buildFilter(RequestFilterInterface $filter, $isNegation)
 {
     /** @var \Magento\Framework\Search\Request\Filter\Term $filter */
     return $this->conditionManager->generateCondition($filter->getField(), $this->getConditionOperator($filter->getValue(), $isNegation), $filter->getValue());
 }
예제 #7
0
 /**
  * {@inheritdoc}
  */
 public function buildFilter(\Magento\Framework\Search\Request\FilterInterface $filter, $isNegation)
 {
     /** @var \Magento\Framework\Search\Request\Filter\Wildcard $filter */
     $searchValue = '%' . $filter->getValue() . '%';
     return $this->conditionManager->generateCondition($filter->getField(), $isNegation ? self::CONDITION_NOT_LIKE : self::CONDITION_LIKE, $searchValue);
 }