Skip to content

Commit 6976e83

Browse files
committed
add tests & fix phpstan
1 parent bd75848 commit 6976e83

3 files changed

Lines changed: 115 additions & 2 deletions

File tree

phpstan-baseline.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ parameters:
103103
path: tests/Unit/Metadata/AttributeMetadataFactoryTest.php
104104

105105
-
106-
message: '#^Parameter \#1 \$class of method Patchlevel\\Hydrator\\MetadataHydrator\:\:hydrate\(\) expects class\-string\<Unknown\>, string given\.$#'
106+
message: '#^Parameter \#1 \$class of method Patchlevel\\Hydrator\\Hydrator\:\:hydrate\(\) expects class\-string\<Unknown\>, string given\.$#'
107107
identifier: argument.type
108108
count: 1
109109
path: tests/Unit/MetadataHydratorTest.php

tests/Unit/HydratorBuilderTest.php

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Patchlevel\Hydrator\Tests\Unit;
6+
7+
use Patchlevel\Hydrator\Extension;
8+
use Patchlevel\Hydrator\Guesser\ChainGuesser;
9+
use Patchlevel\Hydrator\Guesser\Guesser;
10+
use Patchlevel\Hydrator\HydratorBuilder;
11+
use Patchlevel\Hydrator\Metadata\AttributeMetadataFactory;
12+
use Patchlevel\Hydrator\Metadata\MetadataEnricher;
13+
use Patchlevel\Hydrator\MetadataHydrator;
14+
use Patchlevel\Hydrator\Middleware\Middleware;
15+
use PHPUnit\Framework\Attributes\CoversClass;
16+
use PHPUnit\Framework\TestCase;
17+
use ReflectionProperty;
18+
19+
#[CoversClass(HydratorBuilder::class)]
20+
final class HydratorBuilderTest extends TestCase
21+
{
22+
public function testBuild(): void
23+
{
24+
$hydrator = (new HydratorBuilder())->build();
25+
26+
self::assertInstanceOf(MetadataHydrator::class, $hydrator);
27+
}
28+
29+
public function testAddMiddlewareWithPriority(): void
30+
{
31+
$middleware1 = $this->createMock(Middleware::class);
32+
$middleware2 = $this->createMock(Middleware::class);
33+
34+
$builder = new HydratorBuilder();
35+
$builder->addMiddleware($middleware1, 10);
36+
$builder->addMiddleware($middleware2, 20);
37+
38+
$hydrator = $builder->build();
39+
40+
$reflection = new ReflectionProperty(MetadataHydrator::class, 'middlewares');
41+
$middlewares = $reflection->getValue($hydrator);
42+
43+
self::assertSame([$middleware2, $middleware1], $middlewares);
44+
}
45+
46+
public function testAddMetadataEnricherWithPriority(): void
47+
{
48+
$enricher1 = $this->createMock(MetadataEnricher::class);
49+
$enricher2 = $this->createMock(MetadataEnricher::class);
50+
51+
$builder = new HydratorBuilder();
52+
$builder->addMetadataEnricher($enricher1, 10);
53+
$builder->addMetadataEnricher($enricher2, 20);
54+
55+
$hydrator = $builder->build();
56+
57+
$reflection = new ReflectionProperty(MetadataHydrator::class, 'metadataEnrichers');
58+
$enrichers = $reflection->getValue($hydrator);
59+
60+
self::assertSame([$enricher2, $enricher1], $enrichers);
61+
}
62+
63+
public function testAddGuesserWithPriority(): void
64+
{
65+
$guesser1 = $this->createMock(Guesser::class);
66+
$guesser2 = $this->createMock(Guesser::class);
67+
68+
$builder = new HydratorBuilder();
69+
$builder->addGuesser($guesser1, 10);
70+
$builder->addGuesser($guesser2, 20);
71+
72+
$hydrator = $builder->build();
73+
74+
$reflection = new ReflectionProperty(MetadataHydrator::class, 'metadataFactory');
75+
$metadataFactory = $reflection->getValue($hydrator);
76+
77+
self::assertInstanceOf(AttributeMetadataFactory::class, $metadataFactory);
78+
79+
$reflection = new ReflectionProperty(AttributeMetadataFactory::class, 'guesser');
80+
$guesser = $reflection->getValue($metadataFactory);
81+
82+
self::assertInstanceOf(ChainGuesser::class, $guesser);
83+
84+
$reflection = new ReflectionProperty(ChainGuesser::class, 'guessers');
85+
$guessers = $reflection->getValue($guesser);
86+
87+
self::assertSame([$guesser2, $guesser1], $guessers);
88+
}
89+
90+
public function testEnableDefaultLazy(): void
91+
{
92+
$builder = new HydratorBuilder();
93+
$builder->enableDefaultLazy();
94+
95+
$hydrator = $builder->build();
96+
97+
$reflection = new ReflectionProperty(MetadataHydrator::class, 'defaultLazy');
98+
self::assertTrue($reflection->getValue($hydrator));
99+
}
100+
101+
public function testUseExtension(): void
102+
{
103+
$extension = $this->createMock(Extension::class);
104+
$builder = new HydratorBuilder();
105+
106+
$extension->expects(self::once())
107+
->method('configure')
108+
->with($builder);
109+
110+
$builder->useExtension($extension);
111+
}
112+
}

tests/Unit/MetadataHydratorTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Patchlevel\Hydrator\Cryptography\CryptographyExtension;
1414
use Patchlevel\Hydrator\Cryptography\PayloadCryptographer;
1515
use Patchlevel\Hydrator\DenormalizationFailure;
16+
use Patchlevel\Hydrator\Hydrator;
1617
use Patchlevel\Hydrator\HydratorBuilder;
1718
use Patchlevel\Hydrator\Metadata\AttributeMetadataFactory;
1819
use Patchlevel\Hydrator\Metadata\ClassMetadata;
@@ -50,7 +51,7 @@
5051
#[CoversClass(TransformMiddleware::class)]
5152
final class MetadataHydratorTest extends TestCase
5253
{
53-
private MetadataHydrator $hydrator;
54+
private Hydrator $hydrator;
5455

5556
public function setUp(): void
5657
{

0 commit comments

Comments
 (0)