Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit abdcefb

Browse files
added test to test self referring instances
1 parent 8426cf7 commit abdcefb

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
<?php
2+
/**
3+
* @see https://github.com/zendframework/zend-expressive-hal for the canonical source repository
4+
* @copyright Copyright (c) 2017 Zend Technologies USA Inc. (http://www.zend.com)
5+
* @license https://github.com/zendframework/zend-expressive-hal/blob/master/LICENSE.md New BSD License
6+
*/
7+
8+
namespace ZendTest\Expressive\Hal\ResourceGenerator;
9+
10+
use PHPUnit\Framework\TestCase;
11+
use Psr\Container\ContainerInterface;
12+
use Psr\Http\Message\ServerRequestInterface;
13+
use Zend\Expressive\Hal\HalResource;
14+
use Zend\Expressive\Hal\Link;
15+
use Zend\Expressive\Hal\LinkGenerator;
16+
use Zend\Expressive\Hal\Metadata\MetadataMap;
17+
use Zend\Expressive\Hal\Metadata\RouteBasedCollectionMetadata;
18+
use Zend\Expressive\Hal\Metadata\RouteBasedResourceMetadata;
19+
use Zend\Expressive\Hal\ResourceGenerator;
20+
use ZendTest\Expressive\Hal\Assertions;
21+
use ZendTest\Expressive\Hal\TestAsset;
22+
23+
class ResourceWithSelfReferringInstanceTest extends TestCase
24+
{
25+
use Assertions;
26+
27+
public function testSelfReferringIsEmbeddedAsResource()
28+
{
29+
$parent = new TestAsset\FooBar;
30+
$parent->id = 1234;
31+
$parent->foo = 'FOO';
32+
$parent->bar = $parent;
33+
34+
$request = $this->prophesize(ServerRequestInterface::class);
35+
36+
$metadataMap = $this->createMetadataMap();
37+
$hydrators = $this->createHydrators();
38+
$linkGenerator = $this->createLinkGenerator($request);
39+
40+
$generator = new ResourceGenerator(
41+
$metadataMap->reveal(),
42+
$hydrators->reveal(),
43+
$linkGenerator->reveal()
44+
);
45+
46+
$generator->addStrategy(
47+
RouteBasedResourceMetadata::class,
48+
ResourceGenerator\RouteBasedResourceStrategy::class
49+
);
50+
51+
$generator->addStrategy(
52+
RouteBasedCollectionMetadata::class,
53+
ResourceGenerator\RouteBasedCollectionStrategy::class
54+
);
55+
56+
$resource = $generator->fromObject($parent, $request->reveal());
57+
$this->assertInstanceOf(HalResource::class, $resource);
58+
59+
$childResource = $resource->getElement('bar');
60+
$this->assertInstanceOf(HalResource::class, $childResource);
61+
$this->assertSame($parent, $childResource);
62+
}
63+
64+
public function createMetadataMap()
65+
{
66+
$metadataMap = $this->prophesize(MetadataMap::class);
67+
68+
$fooBarMetadata = new RouteBasedResourceMetadata(
69+
TestAsset\FooBar::class,
70+
'foo-bar',
71+
self::getObjectPropertyHydratorClass()
72+
);
73+
74+
$metadataMap->has(TestAsset\FooBar::class)->willReturn(true);
75+
$metadataMap->get(TestAsset\FooBar::class)->willReturn($fooBarMetadata);
76+
77+
return $metadataMap;
78+
}
79+
80+
public function createLinkGenerator($request)
81+
{
82+
$linkGenerator = $this->prophesize(LinkGenerator::class);
83+
84+
$linkGenerator
85+
->fromRoute(
86+
'self',
87+
$request->reveal(),
88+
'foo-bar',
89+
[ 'id' => 1234 ]
90+
)
91+
->willReturn(new Link('self', '/api/foo-bar/1234'));
92+
93+
return $linkGenerator;
94+
}
95+
96+
public function createHydrators()
97+
{
98+
$hydratorClass = self::getObjectPropertyHydratorClass();
99+
100+
$hydrators = $this->prophesize(ContainerInterface::class);
101+
$hydrators->get($hydratorClass)->willReturn(new $hydratorClass());
102+
return $hydrators;
103+
}
104+
}

0 commit comments

Comments
 (0)