Something went wrong on our end
-
Vadim Galizyanov authoredVadim Galizyanov authored
QueryAndPostFilterTest.php 19.33 KiB
<?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\Filter\FilterType;
use IQDEV\Search\Filter\LogicOperator;
use IQDEV\Search\Query\SearchQuery;
class QueryAndPostFilterTest extends AbstractTestCase
{
/**
* query по не сущ бренду
*/
public function testQueryNonExistentBrand()
{
$criteria = new Criteria();
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('not')
)
]);
$filterCollectionBrand->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => []
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по сущ бренду
* @return void
*/
public function testQueryExistingBrand()
{
$criteria = new Criteria();
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('adidas')
)
]);
$filterCollectionBrand->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
's1',
's2',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по сущ бренду и post_filter по бренду
* @return void
*/
public function testQueryExistingBrandAndPostFilterExistingBrand()
{
$criteria = new Criteria();
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('adidas')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
]);
$criteria->filters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
's4',
'h1',
'h2',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по сущ бренду и post_filter по цвету
* @return void
*/
public function testQueryExistingBrandAndPostFilterExistingColor()
{
$criteria = new Criteria();
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('white')
),
]);
$criteria->filters()->add($filterCollectionColor);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
'h2',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по сущ бренду и цвету и post_filter по бренду
* @return void
*/
public function testQueryExistingBrandAndColorAndPostFilterExistingColor()
{
$criteria = new Criteria();
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('rebook')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('white')
),
]);
$filterCollectionColor->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionColor);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
]);
$criteria->filters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
'h2',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по сущ бренду и post_filter по бренду и цвету
* @return void
*/
public function testQueryExistingBrandAndColorAndPostFilterExistingBrandAndColor()
{
$criteria = new Criteria();
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('rebook')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('white')
),
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('blue')
),
]);
$filterCollectionColor
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionColor);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
]);
$criteria->filters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('white')
),
]);
$criteria->filters()->add($filterCollectionColor);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
'h2',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по не сущ цене
* @return void
*/
public function testQueryNonExistentPrice()
{
$criteria = new Criteria();
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
new FilterNumber(108)
)
]);
$filterCollectionPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionPrice);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => []
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по сущ цене
* @return void
*/
public function testQueryExistingPrice()
{
$criteria = new Criteria();
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
new FilterNumber(105)
)
]);
$filterCollectionPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionPrice);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
'h2',
'h3',
'p1',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по сущ цене и бренду
* @return void
*/
public function testQueryExistingPriceAndBrand()
{
$criteria = new Criteria();
$filterCollection = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
new FilterNumber(104)
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
]);
$filterCollection->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollection);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
'h1',
'h2',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по сущ цене и бренду и post_filter по цвету
* @return void
*/
public function testQueryExistingPriceAndBrandAndPostFilterColor()
{
$criteria = new Criteria();
$filterCollection = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
new FilterNumber(104)
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
]);
$filterCollection->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollection);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('red')
),
]);
$criteria->filters()->add($filterCollectionColor);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
'h1',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по сущ цене и бренду и post_filter по цвету и бренду
* @return void
*/
public function testQueryExistingPriceAndBrandAndPostFilterColorAndBrand()
{
$criteria = new Criteria();
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
new FilterNumber(104)
),
]);
$filterCollectionPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionPrice);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('adidas')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('green')
),
]);
$criteria->filters()->add($filterCollectionColor);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
]);
$criteria->filters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
's4',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по сущ цене и бренду и post_filter по цене
* @return void
*/
public function testQueryExistingPriceAndBrandAndPostFilterPrice()
{
$criteria = new Criteria();
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
new FilterNumber(104)
),
]);
$filterCollectionPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionPrice);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('adidas')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
new FilterNumber(102)
),
]);
$criteria->filters()->add($filterCollectionPrice);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
's4',
'h1',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* query по сущ цене и бренду и post_filter по цвету и цене
* @return void
*/
public function testQueryExistingPriceAndBrandAndPostFilterPriceAndColor()
{
$criteria = new Criteria();
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
new FilterNumber(104)
),
]);
$filterCollectionPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionPrice);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('nike')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('adidas')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
new FilterNumber(102)
),
]);
$criteria->filters()->add($filterCollectionPrice);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('green')
),
]);
$criteria->filters()->add($filterCollectionColor);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
's4',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
}