-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathCallbackUpcasterTest.php
More file actions
53 lines (43 loc) · 1.7 KB
/
Copy pathCallbackUpcasterTest.php
File metadata and controls
53 lines (43 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
declare(strict_types=1);
namespace Patchlevel\Hydrator\Tests\Unit\Extension\Upcast;
use Patchlevel\Hydrator\Extension\Upcast\CallbackUpcaster;
use Patchlevel\Hydrator\Metadata\AttributeMetadataFactory;
use Patchlevel\Hydrator\Tests\Unit\Extension\Lifecycle\Fixture\LifecycleFixture;
use Patchlevel\Hydrator\Tests\Unit\Extension\Upcast\Fixture\UpcastFixture;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
use function assert;
use function is_string;
#[CoversClass(CallbackUpcaster::class)]
final class CallbackUpcasterTest extends TestCase
{
public function testUpcast(): void
{
$metadata = (new AttributeMetadataFactory())->metadata(UpcastFixture::class);
$upcaster = CallbackUpcaster::forClass(
UpcastFixture::class,
static function (array $data, array $context): array {
$prefix = $context['prefix'] ?? '';
$name = $data['name'] ?? '';
assert(is_string($prefix));
assert(is_string($name));
$data['name'] = $prefix . $name;
return $data;
},
);
self::assertSame(
['name' => 'Upcast: foo'],
$upcaster->upcast($metadata, ['name' => 'foo'], ['prefix' => 'Upcast: ']),
);
}
public function testSkipDifferentClass(): void
{
$metadata = (new AttributeMetadataFactory())->metadata(LifecycleFixture::class);
$upcaster = CallbackUpcaster::forClass(
UpcastFixture::class,
static fn (array $data): array => ['name' => 'changed'],
);
self::assertSame(['name' => 'foo'], $upcaster->upcast($metadata, ['name' => 'foo'], []));
}
}