Files
kupshop/bundles/KupShop/RecommendersBundle/Tests/RecommendersTest.php
2025-08-02 16:30:27 +02:00

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();
}
}