117 lines
2.9 KiB
PHP
117 lines
2.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Diffhead\PHP\DataEnrichmentKit\Tests;
|
|
|
|
use Diffhead\PHP\DataEnrichmentKit\Enricher;
|
|
use Diffhead\PHP\DataEnrichmentKit\Interface\Repository;
|
|
use Diffhead\PHP\DataEnrichmentKit\Object\Item;
|
|
use Diffhead\PHP\DataEnrichmentKit\Object\ItemsBag;
|
|
use Diffhead\PHP\DataEnrichmentKit\Object\Request;
|
|
use Diffhead\PHP\DataEnrichmentKit\Object\Target;
|
|
use Diffhead\PHP\DataEnrichmentKit\Service\Enrichment;
|
|
use Diffhead\PHP\DataEnrichmentKit\Storage\Repositories;
|
|
use Diffhead\PHP\DataEnrichmentKit\Storage\Requests;
|
|
use PHPUnit\Framework\Attributes\CoversClass;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
#[CoversClass(Enricher::class)]
|
|
class EnricherTest extends TestCase
|
|
{
|
|
public function testEnrich(): void
|
|
{
|
|
$posts = [
|
|
[
|
|
'user_id' => 1,
|
|
'content' => 'Post by user 1'
|
|
],
|
|
[
|
|
'user_id' => 2,
|
|
'content' => 'Post by user 2'
|
|
],
|
|
[
|
|
'user_id' => 3,
|
|
'content' => 'Post by user 3'
|
|
],
|
|
];
|
|
|
|
$enrichment = new Enrichment($this->getRepositories());
|
|
$enricher = new Enricher($enrichment);
|
|
|
|
$items = new ItemsBag();
|
|
$items->push(new Item('*.user_id', 'user'));
|
|
|
|
$target = new Target('user', 'id');
|
|
|
|
$requests = new Requests([
|
|
new Request($items, $target)
|
|
]);
|
|
|
|
$enriched = $enricher->enrich($posts, $requests);
|
|
|
|
$this->assertSame(
|
|
[
|
|
'user_id' => 1,
|
|
'content' => 'Post by user 1',
|
|
'user' => [
|
|
'id' => 1,
|
|
'name' => 'Blank.1',
|
|
],
|
|
],
|
|
$enriched[0]
|
|
);
|
|
|
|
$this->assertSame(
|
|
[
|
|
'user_id' => 2,
|
|
'content' => 'Post by user 2',
|
|
'user' => [
|
|
'id' => 2,
|
|
'name' => 'Blank.2',
|
|
],
|
|
],
|
|
$enriched[1]
|
|
);
|
|
|
|
$this->assertSame(
|
|
[
|
|
'user_id' => 3,
|
|
'content' => 'Post by user 3',
|
|
'user' => [
|
|
'id' => 3,
|
|
'name' => 'Blank.3',
|
|
],
|
|
],
|
|
$enriched[2]
|
|
);
|
|
}
|
|
|
|
private function getRepositories(): Repositories
|
|
{
|
|
return new Repositories([
|
|
'user' => new EnricherTestUserRepository(),
|
|
]);
|
|
}
|
|
}
|
|
|
|
class EnricherTestUserRepository implements Repository
|
|
{
|
|
public function getByFieldValues(string $field, array $values): iterable
|
|
{
|
|
return [
|
|
$this->getBlankWithId(1),
|
|
$this->getBlankWithId(2),
|
|
$this->getBlankWithId(3),
|
|
];
|
|
}
|
|
|
|
private function getBlankWithId(int $id): array
|
|
{
|
|
return [
|
|
'id' => $id,
|
|
'name' => sprintf('Blank.%d', $id)
|
|
];
|
|
}
|
|
}
|