94 lines
3.2 KiB
PHP
94 lines
3.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace KupShop\RecommendersBundle\Tests;
|
|
|
|
use KupShop\RecommendersBundle\Recommenders\RecommendersLocator;
|
|
use KupShop\RecommendersBundle\Recommenders\RelatedProductsRecommender;
|
|
use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
|
|
|
|
class RecommendersTest extends \DatabaseTestCase
|
|
{
|
|
protected RecommendersLocator $recommendersLocator;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->recommendersLocator = $this->get(RecommendersLocator::class);
|
|
}
|
|
|
|
public function testRecommendersLocator(): void
|
|
{
|
|
$recommender = $this->recommendersLocator->getRecommender('related_product');
|
|
$this->assertInstanceOf(RelatedProductsRecommender::class, $recommender);
|
|
|
|
$this->expectException(ServiceNotFoundException::class);
|
|
$this->recommendersLocator->getRecommender('nesmysl');
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideCases
|
|
*/
|
|
public function testRecommenders(string $type, array $data, array $config, array $expected): void
|
|
{
|
|
$recommender = $this->recommendersLocator->getRecommender($type);
|
|
|
|
$result = $recommender->execute($data, $config);
|
|
$this->assertEquals($expected, $result->getProductIds());
|
|
}
|
|
|
|
public function provideCases(): \Generator
|
|
{
|
|
yield 'recommender newest_products limit 5' => [
|
|
'type' => 'newest_product',
|
|
'data' => [],
|
|
'config' => ['count' => 5],
|
|
'result' => [6266, 6208, 6207, 6206, 6195],
|
|
];
|
|
yield 'recommender newest_products no limit' => [
|
|
'type' => 'newest_product',
|
|
'data' => [],
|
|
'config' => [],
|
|
'result' => [6266, 6208, 6207, 6206, 6195, 6142, 100, 93, 82, 71, 58, 56, 53, 54],
|
|
];
|
|
|
|
yield 'recommender related_products type 1' => [
|
|
'type' => 'related_product',
|
|
'data' => ['product' => 6207],
|
|
'config' => ['count' => 5, 'related_type' => 1],
|
|
'result' => [71, 53, 54, 93, 100],
|
|
];
|
|
yield 'recommender related_products type 5' => [
|
|
'type' => 'related_product',
|
|
'data' => ['product' => ['id' => 6207]],
|
|
'config' => ['count' => 5, 'related_type' => 5],
|
|
'result' => [56, 58, 71, 82, 6142],
|
|
];
|
|
yield 'recommender related_products no related' => [
|
|
'type' => 'related_product',
|
|
'data' => ['product' => ['id' => 53]],
|
|
'config' => ['count' => 5],
|
|
'result' => [],
|
|
];
|
|
yield 'recommender related_products no related symmetric' => [
|
|
'type' => 'related_product',
|
|
'data' => ['product' => ['id' => 53]],
|
|
'config' => ['count' => 5, 'symmetric' => true],
|
|
'result' => [6207],
|
|
];
|
|
yield 'recommender related_products products' => [
|
|
'type' => 'related_product',
|
|
'data' => ['products' => [53, 100, 6207]],
|
|
'config' => ['count' => 5, 'related_type' => 1, 'symmetric' => true],
|
|
'result' => [6207, 71, 53, 54, 93],
|
|
];
|
|
}
|
|
|
|
public function getDataSet(): \IteratorAggregate
|
|
{
|
|
return $this->getJsonDataSetFromFile();
|
|
}
|
|
}
|