Skip to content

Commit 7e4b62e

Browse files
committed
ServiceContainer: hydration tests
1 parent 6104fa5 commit 7e4b62e

File tree

3 files changed

+73
-0
lines changed

3 files changed

+73
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace Webdevcave\Yadic\Tests\ExampleNamespace;
4+
5+
use Webdevcave\Yadic\Annotations\ArrayOf;
6+
7+
class Candidate
8+
{
9+
public function __construct(
10+
public ?string $name = null,
11+
public ?int $age = null,
12+
#[ArrayOf(Skill::class)]
13+
public array $skills = []
14+
)
15+
{
16+
}
17+
}

tests/ExampleNamespace/Skill.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
namespace Webdevcave\Yadic\Tests\ExampleNamespace;
4+
5+
class Skill
6+
{
7+
public function __construct(
8+
public string $title,
9+
)
10+
{
11+
}
12+
}

tests/ServiceContainerTest.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,26 @@
55
use Exception;
66
use PHPUnit\Framework\Attributes\CoversClass;
77
use PHPUnit\Framework\TestCase;
8+
use Webdevcave\Yadic\Annotations\ArrayOf;
89
use Webdevcave\Yadic\Annotations\Inject;
910
use Webdevcave\Yadic\Annotations\Provides;
1011
use Webdevcave\Yadic\Annotations\Singleton;
1112
use Webdevcave\Yadic\Exceptions\ContainerException;
1213
use Webdevcave\Yadic\Exceptions\NotFoundException;
1314
use Webdevcave\Yadic\ServiceContainer;
15+
use Webdevcave\Yadic\Tests\ExampleNamespace\Candidate;
1416
use Webdevcave\Yadic\Tests\ExampleNamespace\ClassA;
1517
use Webdevcave\Yadic\Tests\ExampleNamespace\ClassB;
1618
use Webdevcave\Yadic\Tests\ExampleNamespace\ClassC;
1719
use Webdevcave\Yadic\Tests\ExampleNamespace\ClassD;
1820
use Webdevcave\Yadic\Tests\ExampleNamespace\InterfaceA;
21+
use Webdevcave\Yadic\Tests\ExampleNamespace\Skill;
1922

2023
#[CoversClass(ServiceContainer::class)]
2124
#[CoversClass(Provides::class)]
2225
#[CoversClass(Inject::class)]
2326
#[CoversClass(Singleton::class)]
27+
#[CoversClass(ArrayOf::class)]
2428
class ServiceContainerTest extends TestCase
2529
{
2630
private ?ServiceContainer $container;
@@ -95,6 +99,46 @@ public function testNoAutowirableResource()
9599
$this->container->get(ClassD::class);
96100
}
97101

102+
public function testHydrationForVector()
103+
{
104+
$data = [
105+
['title' => 'PHP'],
106+
['title' => 'Java'],
107+
['title' => 'Rust'],
108+
['title' => 'React'],
109+
];
110+
$instances = $this->container->hydrate(Skill::class, $data);
111+
112+
$this->assertContainsOnlyInstancesOf(Skill::class, $instances);
113+
114+
foreach ($data as $key => $skill) {
115+
$this->assertEquals($skill['title'], $instances[$key]->title);
116+
}
117+
}
118+
119+
public function testHydrationForMatrix()
120+
{
121+
$data = [
122+
'name' => 'John Doe',
123+
'age' => 25,
124+
'skills' => [
125+
['title' => 'PHP'],
126+
['title' => 'Java'],
127+
['title' => 'Rust'],
128+
['title' => 'React'],
129+
],
130+
];
131+
$instance = $this->container->hydrate(Candidate::class, $data);
132+
133+
$this->assertInstanceOf(Candidate::class, $instance);
134+
$this->assertEquals($data['name'], $instance->name);
135+
$this->assertEquals($data['age'], $instance->age);
136+
137+
foreach ($data['skills'] as $key => $skill) {
138+
$this->assertEquals($skill['title'], $instance->skills[$key]->title);
139+
}
140+
}
141+
98142
protected function setUp(): void
99143
{
100144
$this->container = new ServiceContainer();

0 commit comments

Comments
 (0)