first commit

This commit is contained in:
2024-10-25 14:16:28 +02:00
commit 925276dbb2
33795 changed files with 4780077 additions and 0 deletions

View File

@@ -0,0 +1,140 @@
<?php
require_once implode(DIRECTORY_SEPARATOR, [
__DIR__,
'..', 'src', 'Ps_FacetedsearchFacetsURLSerializer.php',
]);
use PrestaShop\PrestaShop\Core\Product\Search\Facet;
use PrestaShop\PrestaShop\Core\Product\Search\Filter;
class Ps_FacetedsearchFacetsURLSerializerTest extends PHPUnit_Framework_TestCase
{
private $serializer;
public function setup()
{
$this->serializer = new Ps_FacetedsearchFacetsURLSerializer();
}
public function test_serialize_one_facet()
{
$facet = (new Facet())
->setLabel('Categories')
->addFilter((new Filter())->setLabel('Tops')->setActive(true))
->addFilter((new Filter())->setLabel('Robes')->setActive(true))
;
$this->assertEquals('Categories-Tops-Robes', $this->serializer->serialize([$facet]));
}
public function test_serialize_price_facet()
{
$facet = (new Facet())
->setLabel('Price')
->setProperty('range', true)
->addFilter(
(new Filter())
->setLabel('Doesn\'t matter')
->setActive(true)
->setProperty('symbol', '€')
->setValue(['from' => 7, 'to' => 9])
)
;
$this->assertEquals('Price-€-7-9', $this->serializer->serialize([$facet]));
}
public function test_setFiltersFromEncodedFacets_simple_facets()
{
$template = [
(new Facet())
->setLabel('Categories')
->addFilter((new Filter())->setLabel('Tops')->setActive(false))
->addFilter((new Filter())->setLabel('Dresses')->setActive(false)),
(new Facet())
->setLabel('Strange Birds')
->addFilter((new Filter())->setLabel('Penguins')->setActive(false))
->addFilter((new Filter())->setLabel('Puffins')->setActive(false)),
];
$encodedFacets = 'Categories-Dresses/Strange Birds-Penguins';
$facets = $this
->serializer
->setFiltersFromEncodedFacets(
$template,
$encodedFacets
)
;
/*
* We check that the Dresses filter in the first facet
* and the Pengins filter in the Strange Birds facet were enabled.
*/
$this->assertTrue($facets[0]->getFilters()[1]->isActive());
$this->assertTrue($facets[1]->getFilters()[0]->isActive());
}
public function test_setFiltersFromEncodedFacets_range_filter_adds_the_filter()
{
$template = [
(new Facet())->setLabel('Price')->setProperty('range', true),
];
$encodedFacets = 'Price-€-5-3.14';
$facets = $this
->serializer
->setFiltersFromEncodedFacets(
$template,
$encodedFacets
)
;
$priceFilter = $facets[0]->getFilters()[0];
$this->assertEquals([
'from' => 5,
'to' => 3.14,
], $priceFilter->getValue());
$this->assertTrue($priceFilter->isActive());
}
public function test_setFiltersFromEncodedFacets_range_filter_enables_the_filter()
{
$template = [
(new Facet())->setLabel('Price')->setProperty('range', true)
->addFilter(
(new Filter())
->setActive(false)
->setValue(['from' => 2, 'to' => 7])
),
];
$encodedFacets = 'Price-€-5-3.14';
$facets = $this
->serializer
->setFiltersFromEncodedFacets(
$template,
$encodedFacets
)
;
$filters = $facets[0]->getFilters();
$this->assertCount(1, $filters);
$priceFilter = $filters[0];
$this->assertEquals([
'from' => 2,
'to' => 7,
], $priceFilter->getValue());
$this->assertTrue($priceFilter->isActive());
}
}

View File

@@ -0,0 +1,102 @@
<?php
require_once implode(DIRECTORY_SEPARATOR, [
__DIR__,
'..', 'src', 'Ps_FacetedsearchRangeAggregator.php',
]);
class Ps_FacetedsearchRangeAggregatorTest extends PHPUnit_Framework_TestCase
{
public function test_ranges_are_aggregated_simple()
{
$ranges = [
['price_min' => 16, 'price_max' => 20],
['price_min' => 26, 'price_max' => 32],
['price_min' => 25, 'price_max' => 31],
['price_min' => 50, 'price_max' => 61],
['price_min' => 28, 'price_max' => 35],
['price_min' => 30, 'price_max' => 37],
['price_min' => 16, 'price_max' => 20],
];
$aggregator = new Ps_FacetedsearchRangeAggregator();
$actual = $aggregator->aggregateRanges($ranges, 'price_min', 'price_max');
$this->assertEquals([
'min' => 16,
'max' => 61,
'ranges' => [
['min' => 16, 'max' => 20, 'count' => 2],
['min' => 25, 'max' => 37, 'count' => 4],
['min' => 50, 'max' => 61, 'count' => 1],
],
], $actual);
}
public function test_ranges_are_aggregated_big_overlap()
{
$ranges = [
['price_min' => 16, 'price_max' => 20],
['price_min' => 26, 'price_max' => 32],
['price_min' => 25, 'price_max' => 31],
['price_min' => 50, 'price_max' => 61],
['price_min' => 28, 'price_max' => 35],
['price_min' => 30, 'price_max' => 37],
['price_min' => 16, 'price_max' => 20],
['price_min' => 25, 'price_max' => 61],
];
$aggregator = new Ps_FacetedsearchRangeAggregator();
$actual = $aggregator->aggregateRanges($ranges, 'price_min', 'price_max');
$this->assertEquals([
'min' => 16,
'max' => 61,
'ranges' => [
['min' => 16, 'max' => 20, 'count' => 2],
['min' => 25, 'max' => 61, 'count' => 6],
],
], $actual);
}
public function test_ranges_are_merged()
{
$ranges = [
['min' => 16, 'max' => 18, 'count' => 1],
['min' => 20, 'max' => 30, 'count' => 3],
['min' => 40, 'max' => 62, 'count' => 5],
['min' => 80, 'max' => 100, 'count' => 7],
['min' => 120, 'max' => 130, 'count' => 9],
['min' => 130, 'max' => 140, 'count' => 11],
];
$aggregator = new Ps_FacetedsearchRangeAggregator();
$actual = $aggregator->mergeRanges($ranges, 3);
$this->assertEquals([
['min' => 10, 'max' => 30, 'count' => 4],
['min' => 30, 'max' => 100, 'count' => 12],
['min' => 100, 'max' => 140, 'count' => 20],
], $actual);
}
public function test_ranges_are_merged_and_max_boudary_is_rounded()
{
$ranges = [
['min' => 10, 'max' => 30, 'count' => 4],
['min' => 30, 'max' => 97, 'count' => 12],
['min' => 100, 'max' => 140, 'count' => 20],
];
$aggregator = new Ps_FacetedsearchRangeAggregator();
$actual = $aggregator->mergeRanges($ranges, 3);
$this->assertEquals([
['min' => 10, 'max' => 30, 'count' => 4],
['min' => 30, 'max' => 100, 'count' => 12],
['min' => 100, 'max' => 140, 'count' => 20],
], $actual);
}
}

View File

@@ -0,0 +1,7 @@
<phpunit bootstrap="../../../vendor/autoload.php">
<testsuites>
<testsuite name="FacetedSearch">
<directory>.</directory>
</testsuite>
</testsuites>
</phpunit>