Commit 1f4c9fe1 authored by Vadim Galizyanov's avatar Vadim Galizyanov
Browse files

The tests are adapted to the new implementation

parent ac3e9dd0
Loading
Loading
Loading
Loading
+0 −33
Original line number Diff line number Diff line
@@ -317,39 +317,6 @@ final class CriteriaToEsRequest
                    true
                )
                ) {
                    $aggsFiltered = new Aggs($getKey('number', $field));
                    $aggsFiltered->addAggs(
                        AggsFacetStats::create(
                            'agg_special',
                            'number_facet'
                        )
                    );

                    $queryNumberFiltered = new Query();
                    $keywordFilter       = $this->getKeywordFilter($criteria->filters());
                    $numberFilter        = $this->getNumberFilter($criteria->filters(), [$field]);

                    if (false === $keywordFilter->isEmpty()) {
                        $nestedFilterKeyword = new Nested();
                        $nestedFilterKeyword->setPath('search_data')
                            ->setQuery($keywordFilter);
                        $queryNumberFiltered->filter($nestedFilterKeyword);
                    }

                    if (false === $numberFilter->isEmpty()) {
                        $nestedFilterNumber = new Nested();
                        $nestedFilterNumber->setPath('search_data')
                            ->setQuery($numberFilter);
                        $queryNumberFiltered->filter($nestedFilterNumber);
                    }

                    if ($queryNumberFiltered->isEmpty() === false) {
                        $aggsFiltered->setQuery($queryNumberFiltered);
                    } else {
                        $aggsFiltered->setNested((new Nested())->setPath('search_data'));
                    }

                    $request->getAggs()->add($aggsFiltered);
                    continue;
                }

+4 −17
Original line number Diff line number Diff line
@@ -97,23 +97,10 @@ final class EsResponseToResult
                }
            }

            foreach ($buckets as $bucket) {
                $code = $bucket['key'];
                if (isset($data['aggregations']["number_facet_$code"]['agg_special']['agg_number_facet_code']['buckets'])) {
                    $bucketsFiltered[$code] = [];
                    foreach ($data['aggregations']["number_facet_$code"]['agg_special']['agg_number_facet_code']['buckets'] as $filteredBucked) {
                        if ($filteredBucked['key'] === $code) {
                            $bucketsFiltered[$code] = $filteredBucked['agg_number_facet_value'];
                        }
                    }
                }
            }
            $bucketsFiltered = array_filter($bucketsFiltered);

            foreach ($buckets as $bucket) {
                $code = $bucket['key'];
                $workBucket = $bucket['agg_number_facet_value'];
                $selectedBuket = $bucketsFiltered[$code] ?? null;
                $selectedBuket = !empty($bucketsFiltered[$code]) ? $bucketsFiltered[$code] : null;

                $facet = new Facet(new FacetRangeType(), $code);
                $facetItem = FacetItemRange::create(
@@ -123,14 +110,14 @@ final class EsResponseToResult
                        $workBucket['avg'],
                        $workBucket['sum']
                    ),
                    isset($selectedBuket) ? FacetItemRangeDTO::create(
                    $selectedBuket !== null ? FacetItemRangeDTO::create(
                        $selectedBuket['min'],
                        $selectedBuket['max'],
                        $selectedBuket['avg'],
                        $selectedBuket['sum']
                    ) : FacetItemRangeDTO::create(),
                    $selectedBuket['count'] ?? $workBucket['count'],
                    isset($selectedBuket)
                    $selectedBuket ? $selectedBuket['count'] : 0,
                    $selectedBuket !== null
                );
                $facet->products->add($facetItem);

+965 −0

File added.

Preview size limit exceeded, changes collapsed.

+143 −0
Original line number Diff line number Diff line
<?php

namespace IQDEV\ElasticSearchTests\FIlter;

use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient;
use IQDEV\Search\Criteria;
use IQDEV\Search\Filter\Field;
use IQDEV\Search\Filter\Filter;
use IQDEV\Search\Filter\FilterGroupCollection;
use IQDEV\Search\Filter\FilterKeyword;
use IQDEV\Search\Filter\FilterNumber;
use IQDEV\Search\Filter\FilterOperator;
use IQDEV\Search\Query\SearchQuery;

class CommonRangeKeywordsTest extends AbstractTestCase
{
    /**
     * Поиск элементов по фильтру свойства и цене
     *
     * @return void
     */
    public function testExistByFilterAndMinPrice(): void
    {
        $criteria = new Criteria();

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('color'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('red')
            )
        ]));

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('price'),
                new FilterOperator(FilterOperator::GT),
                new FilterNumber(102)
            )
        ]));

        $q = new SearchQuery($criteria);

        $handler = SearchClient::getInstance();
        $result = $handler->handle($q)->result;


        $expected = [
            'hits' => [
                'h1'
            ]
        ];

        $this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
    }

    /**
     * Поиск элементов по фильтру свойства и цене
     *
     * @return void
     */
    public function testExistByFilterAndMaxPrice(): void
    {
        $criteria = new Criteria();

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('color'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('red')
            )
        ]));

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('price'),
                new FilterOperator(FilterOperator::LT),
                new FilterNumber(102)
            )
        ]));

        $q = new SearchQuery($criteria);

        $handler = SearchClient::getInstance();
        $result = $handler->handle($q)->result;


        $expected = [
            'hits' => [
                's2'
            ]
        ];

        $this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
    }

    /**
     * Поиск элементов по фильтру свойства и цене
     *
     * @return void
     */
    public function testExistByFilterAndRangePrice(): void
    {
        $criteria = new Criteria();

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('color'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('red')
            )
        ]));

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('price'),
                new FilterOperator(FilterOperator::GTE),
                new FilterNumber(101)
            ),
            new Filter(
                new Field('price'),
                new FilterOperator(FilterOperator::LTE),
                new FilterNumber(104)
            ),
        ]));

        $q = new SearchQuery($criteria);

        $handler = SearchClient::getInstance();
        $result = $handler->handle($q)->result;

        $expected = [
            'hits' => [
                'h1',
                's2'
            ]
        ];

        $this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
    }
}
 No newline at end of file
+242 −0
Original line number Diff line number Diff line
<?php

namespace IQDEV\ElasticSearchTests\Filter;

use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient;
use IQDEV\Search\Criteria;
use IQDEV\Search\Filter\Field;
use IQDEV\Search\Filter\Filter;
use IQDEV\Search\Filter\FilterGroupCollection;
use IQDEV\Search\Filter\FilterKeyword;
use IQDEV\Search\Filter\FilterOperator;
use IQDEV\Search\Filter\FilterType;
use IQDEV\Search\Query\SearchQuery;

class KeywordsTest extends AbstractTestCase
{
    /**
     * Поиск элементов по пустому фильтру свойства
     *
     * @return void
     */
    public function testExistByEmptyFilter(): void
    {
        $criteria = new Criteria();

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('color'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('')
            )
        ]));

        $q = new SearchQuery($criteria);

        $handler = SearchClient::getInstance();
        $result = $handler->handle($q)->result;


        $expected = [
            'hits' => []
        ];

        $this->assertEquals($expected, FormatData::formatData($result));
    }

    /**
     * Поиск элементов по фильтру свойства
     *
     * @return void
     */
    public function testExistByFilter(): void
    {
        $criteria = new Criteria();

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('color'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('red')
            )
        ]));

        $q = new SearchQuery($criteria);

        $handler = SearchClient::getInstance();
        $result = $handler->handle($q)->result;


        $expected = [
            'hits' => [
                's2',
                'h1'
            ]
        ];

        $this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
    }

    /**
     * Поиск элементов по фильтру свойства и категории
     *
     * @return void
     */
    public function testExistByFilterAndCategory(): void
    {
        $criteria = new Criteria();

        $criteria->filters()->add(
            (new FilterGroupCollection([
                new Filter(
                    new Field('category_id'),
                    new FilterOperator(FilterOperator::EQ),
                    new FilterKeyword('shoes')
                )
            ]))
                ->setFilterType(FilterType::query())
        );

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('color'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('red')
            )
        ]));

        $q = new SearchQuery($criteria);

        $handler = SearchClient::getInstance();
        $result = $handler->handle($q)->result;


        $expected = [
            'hits' => [
                's2',
            ]
        ];

        $this->assertEquals($expected, FormatData::formatData($result));
    }

    /**
     * Поиск элементов по нескольким свойствам
     *
     * @return void
     */
    public function testExistByMultipleFilter(): void
    {
        $criteria = new Criteria();

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('color'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('red')
            ),
            new Filter(
                new Field('size'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('xxl')
            )
        ]));

        $q = new SearchQuery($criteria);

        $handler = SearchClient::getInstance();
        $result = $handler->handle($q)->result;


        $expected = [
            'hits' => []
        ];

        $this->assertEquals($expected, FormatData::formatData($result));
    }

    /**
     * Поиск элементов по нескольким свойствам
     *
     * @return void
     */
    public function testExistByMultipleFilter2(): void
    {
        $criteria = new Criteria();

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('color'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('red')
            ),
            new Filter(
                new Field('size'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('xl')
            )
        ]));

        $q = new SearchQuery($criteria);

        $handler = SearchClient::getInstance();
        $result = $handler->handle($q)->result;


        $expected = [
            'hits' => [
                'h1'
            ]
        ];

        $this->assertEquals($expected, FormatData::formatData($result));
    }

    /**
     * Поиск элементов по нескольким свойствам и категории
     *
     * @return void
     */
    public function testExistByMultipleFilterAndCategory(): void
    {
        $criteria = new Criteria();

        $criteria->filters()->add(
            (new FilterGroupCollection([
                new Filter(
                    new Field('category_id'),
                    new FilterOperator(FilterOperator::EQ),
                    new FilterKeyword('prices')
                )
            ]))
                ->setFilterType(FilterType::query())
        );

        $criteria->filters()->add(new FilterGroupCollection([
            new Filter(
                new Field('color'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('red')
            ),
            new Filter(
                new Field('size'),
                new FilterOperator(FilterOperator::EQ),
                new FilterKeyword('xl')
            )
        ]));

        $q = new SearchQuery($criteria);

        $handler = SearchClient::getInstance();
        $result = $handler->handle($q)->result;


        $expected = [
            'hits' => []
        ];

        $this->assertEquals($expected, FormatData::formatData($result));
    }
}
 No newline at end of file
Loading