-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPresetMappingTest.php
97 lines (68 loc) · 3.25 KB
/
PresetMappingTest.php
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
declare(strict_types=1);
/*
* This file is part of rekalogika/mapper package.
*
* (c) Priyadi Iman Nurcahyo <https://rekalogika.dev>
*
* For the full copyright and license information, please view the LICENSE file
* that was distributed with this source code.
*/
namespace Rekalogika\Mapper\Tests\IntegrationTest;
use Rekalogika\Mapper\ObjectCache\ObjectCache;
use Rekalogika\Mapper\Tests\Common\FrameworkTestCase;
use Rekalogika\Mapper\Tests\Fixtures\Scalar\ObjectWithScalarProperties;
use Rekalogika\Mapper\Tests\Fixtures\ScalarDto\ObjectWithScalarPropertiesDto;
use Rekalogika\Mapper\Transformer\Context\PresetMappingFactory;
use Rekalogika\Mapper\TypeResolver\TypeResolverInterface;
use Rekalogika\Mapper\Util\TypeFactory;
class PresetMappingTest extends FrameworkTestCase
{
private function createObjectCache(): ObjectCache
{
$typeResolver = $this->get('rekalogika.mapper.type_resolver');
$this->assertInstanceOf(TypeResolverInterface::class, $typeResolver);
return new ObjectCache($typeResolver);
}
public function testFromObjectCache(): void
{
$objectCache = $this->createObjectCache();
$source = new ObjectWithScalarProperties();
$targetType = TypeFactory::objectOfClass(ObjectWithScalarPropertiesDto::class);
$target = new ObjectWithScalarPropertiesDto();
$objectCache->saveTarget($source, $targetType, $target);
$presetMapping = PresetMappingFactory::fromObjectCache($objectCache);
$result = $presetMapping->findResult($source, ObjectWithScalarPropertiesDto::class);
$this->assertSame($target, $result);
}
public function testFromObjectCacheReversed(): void
{
$objectCache = $this->createObjectCache();
$source = new ObjectWithScalarProperties();
$targetType = TypeFactory::objectOfClass(ObjectWithScalarProperties::class);
$target = new ObjectWithScalarPropertiesDto();
$objectCache->saveTarget($source, $targetType, $target);
$presetMapping = PresetMappingFactory::fromObjectCacheReversed($objectCache);
$result = $presetMapping->findResult($target, $source::class);
$this->assertSame($source, $result);
}
public function testMerge(): void
{
$objectCache = $this->createObjectCache();
$source = new ObjectWithScalarProperties();
$targetType = TypeFactory::objectOfClass(ObjectWithScalarProperties::class);
$target = new ObjectWithScalarPropertiesDto();
$objectCache->saveTarget($source, $targetType, $target);
$presetMapping = PresetMappingFactory::fromObjectCacheReversed($objectCache);
$source2 = new ObjectWithScalarProperties();
$targetType2 = TypeFactory::objectOfClass(ObjectWithScalarProperties::class);
$target2 = new ObjectWithScalarPropertiesDto();
$objectCache->saveTarget($source2, $targetType2, $target2);
$presetMapping2 = PresetMappingFactory::fromObjectCacheReversed($objectCache);
$presetMapping->mergeFrom($presetMapping2);
$result = $presetMapping->findResult($target, $source::class);
$this->assertSame($source, $result);
$result = $presetMapping->findResult($target2, $source2::class);
$this->assertSame($source2, $result);
}
}