|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace Hateoas\Tests; |
|
4
|
|
|
|
|
5
|
|
|
use Hateoas\HateoasBuilder; |
|
6
|
|
|
use Hateoas\Tests\Fixtures\CircularReference1; |
|
7
|
|
|
use Hateoas\Tests\Fixtures\CircularReference2; |
|
8
|
|
|
use Hateoas\UrlGenerator\CallableUrlGenerator; |
|
9
|
|
|
use JMS\Serializer\SerializationContext; |
|
10
|
|
|
use Hateoas\Tests\Fixtures\AdrienBrault; |
|
11
|
|
|
use Hateoas\Tests\Fixtures\WithAlternativeRouter; |
|
12
|
|
|
|
|
13
|
|
|
/** |
|
14
|
|
|
* Contains functional tests |
|
15
|
|
|
*/ |
|
16
|
|
|
class HateoasBuilderTest extends TestCase |
|
17
|
|
|
{ |
|
18
|
|
|
public function testBuild() |
|
19
|
|
|
{ |
|
20
|
|
|
$hateoasBuilder = new HateoasBuilder(); |
|
21
|
|
|
$hateoas = $hateoasBuilder->build(); |
|
22
|
|
|
|
|
23
|
|
|
$this->assertInstanceOf('Hateoas\Hateoas', $hateoas); |
|
24
|
|
|
} |
|
25
|
|
|
|
|
26
|
|
|
public function testSerializeAdrienBraultWithExclusion() |
|
27
|
|
|
{ |
|
28
|
|
|
$hateoas = HateoasBuilder::buildHateoas(); |
|
29
|
|
|
|
|
30
|
|
|
$adrienBrault = new AdrienBrault(); |
|
31
|
|
|
$fakeAdrienBrault = new AdrienBrault(); |
|
32
|
|
|
$fakeAdrienBrault->firstName = 'John'; |
|
33
|
|
|
$fakeAdrienBrault->lastName = 'Smith'; |
|
34
|
|
|
|
|
35
|
|
|
$context = SerializationContext::create()->setGroups(array('simple')); |
|
36
|
|
|
$context2 = clone $context; |
|
37
|
|
|
|
|
38
|
|
|
$this->assertSame( |
|
39
|
|
|
<<<XML |
|
40
|
|
|
<?xml version="1.0" encoding="UTF-8"?> |
|
41
|
|
|
<result> |
|
42
|
|
|
<first_name><![CDATA[Adrien]]></first_name> |
|
43
|
|
|
<last_name><![CDATA[Brault]]></last_name> |
|
44
|
|
|
<link rel="self" href="http://adrienbrault.fr"/> |
|
45
|
|
|
<link rel="computer" href="http://www.apple.com/macbook-pro/"/> |
|
46
|
|
|
</result> |
|
47
|
|
|
|
|
48
|
|
|
XML |
|
49
|
|
|
, |
|
50
|
|
|
$hateoas->serialize($adrienBrault, 'xml', $context) |
|
51
|
|
|
); |
|
52
|
|
|
$this->assertSame( |
|
53
|
|
|
<<<XML |
|
54
|
|
|
<?xml version="1.0" encoding="UTF-8"?> |
|
55
|
|
|
<result> |
|
56
|
|
|
<first_name><![CDATA[John]]></first_name> |
|
57
|
|
|
<last_name><![CDATA[Smith]]></last_name> |
|
58
|
|
|
<link rel="computer" href="http://www.apple.com/macbook-pro/"/> |
|
59
|
|
|
</result> |
|
60
|
|
|
|
|
61
|
|
|
XML |
|
62
|
|
|
, |
|
63
|
|
|
$hateoas->serialize($fakeAdrienBrault, 'xml', $context2) |
|
64
|
|
|
); |
|
65
|
|
|
} |
|
66
|
|
|
|
|
67
|
|
|
public function testAlternativeUrlGenerator() |
|
68
|
|
|
{ |
|
69
|
|
|
$brokenUrlGenerator = new CallableUrlGenerator(function ($name, $parameters) { |
|
70
|
|
|
return $name . '?' . http_build_query($parameters); |
|
71
|
|
|
}); |
|
72
|
|
|
|
|
73
|
|
|
$hateoas = HateoasBuilder::create() |
|
74
|
|
|
->setUrlGenerator('my_generator', $brokenUrlGenerator) |
|
75
|
|
|
->build() |
|
76
|
|
|
; |
|
77
|
|
|
|
|
78
|
|
|
$this->assertSame( |
|
79
|
|
|
<<<XML |
|
80
|
|
|
<?xml version="1.0" encoding="UTF-8"?> |
|
81
|
|
|
<result> |
|
82
|
|
|
<link rel="search" href="/search?query=hello"/> |
|
83
|
|
|
</result> |
|
84
|
|
|
|
|
85
|
|
|
XML |
|
86
|
|
|
, |
|
87
|
|
|
$hateoas->serialize(new WithAlternativeRouter(), 'xml') |
|
88
|
|
|
); |
|
89
|
|
|
} |
|
90
|
|
|
|
|
91
|
|
|
public function testCyclicalReferences() |
|
92
|
|
|
{ |
|
93
|
|
|
$hateoas = HateoasBuilder::create()->build(); |
|
94
|
|
|
|
|
95
|
|
|
$reference1 = new CircularReference1(); |
|
96
|
|
|
$reference2 = new CircularReference2(); |
|
97
|
|
|
$reference1->setReference2($reference2); |
|
98
|
|
|
$reference2->setReference1($reference1); |
|
99
|
|
|
|
|
100
|
|
|
$this->assertSame( |
|
101
|
|
|
<<<XML |
|
102
|
|
|
<?xml version="1.0" encoding="UTF-8"?> |
|
103
|
|
|
<result> |
|
104
|
|
|
<name><![CDATA[reference1]]></name> |
|
105
|
|
|
<entry rel="reference2"> |
|
106
|
|
|
<name><![CDATA[reference2]]></name> |
|
107
|
|
|
<entry rel="reference1"/> |
|
108
|
|
|
</entry> |
|
109
|
|
|
</result> |
|
110
|
|
|
|
|
111
|
|
|
XML |
|
112
|
|
|
, |
|
113
|
|
|
$hateoas->serialize($reference1, 'xml') |
|
114
|
|
|
); |
|
115
|
|
|
|
|
116
|
|
|
$this->assertSame( |
|
117
|
|
|
'{' |
|
118
|
|
|
.'"name":"reference1",' |
|
119
|
|
|
.'"_embedded":{' |
|
120
|
|
|
.'"reference2":{' |
|
121
|
|
|
.'"name":"reference2",' |
|
122
|
|
|
.'"_embedded":{' |
|
123
|
|
|
.'"reference1":null' |
|
124
|
|
|
.'}' |
|
125
|
|
|
.'}' |
|
126
|
|
|
.'}' |
|
127
|
|
|
.'}', |
|
128
|
|
|
$hateoas->serialize($reference1, 'json') |
|
129
|
|
|
); |
|
130
|
|
|
} |
|
131
|
|
|
} |
|
132
|
|
|
|