packages/sql-fixture/tests/Unit/Hydrator/HydratorInterfaceTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Hydrator;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ReflectionException;
10use SqlFixture\Hydrator\HydratorInterface as Subject;
11
12#[CoversClass(Subject::class)]
13#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Hydrator\HydrationException::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Hydrator\ReflectionHydrator::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Hydrator\Reflection\ConstructorHydration::class)]
16#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Hydrator\Reflection\PropertyHydration::class)]
17#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Hydrator\Reflection\PropertyNames::class)]
18#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Hydrator\Reflection\ValueConversion::class)]
19#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Hydrator\Exception\ClassNotFoundException::class)]
20#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Hydrator\Exception\MissingConstructorArgumentException::class)]
21#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Hydrator\Reflection\ConversionTarget::class)]
22final class HydratorInterfaceTest extends TestCase
23{
24 /**
25 * @throws ReflectionException
26 */
27 public function testHydrateConvertsDatabaseScalarValues(): void
28 {
29 $target = new class (0, '') {
30 public function __construct(
31 public readonly int $id,
32 public readonly string $name,
33 ) {
34 }
35 };
36 $object = (new \SqlFixture\Hydrator\ReflectionHydrator())->hydrate(['id' => '42', 'name' => 'Alice'], $target::class);
37 self::assertSame(42, $object->id);
38 self::assertSame('Alice', $object->name);
39 }
40}
41