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