These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php namespace League\Fractal\Test; |
||
2 | |||
3 | use League\Fractal\Manager; |
||
4 | use League\Fractal\Resource\Collection; |
||
5 | use League\Fractal\Resource\Item; |
||
6 | use League\Fractal\Scope; |
||
7 | use Mockery as m; |
||
8 | use PHPUnit\Framework\TestCase; |
||
9 | |||
10 | class TransformerAbstractTest extends TestCase |
||
11 | { |
||
12 | /** |
||
13 | * @covers \League\Fractal\TransformerAbstract::setAvailableIncludes |
||
14 | */ |
||
15 | public function testSetAvailableIncludes() |
||
16 | { |
||
17 | $transformer = m::mock('League\Fractal\TransformerAbstract')->makePartial(); |
||
18 | $this->assertInstanceOf('League\Fractal\TransformerAbstract', $transformer->setAvailableIncludes(['foo'])); |
||
19 | } |
||
20 | |||
21 | /** |
||
22 | * @covers \League\Fractal\TransformerAbstract::getAvailableIncludes |
||
23 | */ |
||
24 | View Code Duplication | public function testGetAvailableIncludes() |
|
0 ignored issues
–
show
|
|||
25 | { |
||
26 | $transformer = m::mock('League\Fractal\TransformerAbstract')->makePartial(); |
||
27 | |||
28 | $transformer->setAvailableIncludes(['foo', 'bar']); |
||
29 | $this->assertSame(['foo', 'bar'], $transformer->getAvailableIncludes()); |
||
30 | } |
||
31 | |||
32 | /** |
||
33 | * @covers \League\Fractal\TransformerAbstract::setDefaultIncludes |
||
34 | */ |
||
35 | public function testSetDefaultIncludes() |
||
36 | { |
||
37 | $transformer = m::mock('League\Fractal\TransformerAbstract')->makePartial(); |
||
38 | $this->assertInstanceOf('League\Fractal\TransformerAbstract', $transformer->setDefaultIncludes(['foo'])); |
||
39 | } |
||
40 | |||
41 | /** |
||
42 | * @covers \League\Fractal\TransformerAbstract::getDefaultIncludes |
||
43 | */ |
||
44 | View Code Duplication | public function testGetDefaultIncludes() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
45 | { |
||
46 | $transformer = m::mock('League\Fractal\TransformerAbstract')->makePartial(); |
||
47 | |||
48 | $transformer->setDefaultIncludes(['foo', 'bar']); |
||
49 | $this->assertSame(['foo', 'bar'], $transformer->getDefaultIncludes()); |
||
50 | } |
||
51 | |||
52 | /** |
||
53 | * @covers \League\Fractal\TransformerAbstract::setCurrentScope |
||
54 | */ |
||
55 | View Code Duplication | public function testSetCurrentScope() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
56 | { |
||
57 | $transformer = $this->getMockForAbstractClass('League\Fractal\TransformerAbstract'); |
||
58 | $manager = new Manager(); |
||
59 | $scope = new Scope($manager, m::mock('League\Fractal\Resource\ResourceAbstract')); |
||
60 | $this->assertInstanceOf('League\Fractal\TransformerAbstract', $transformer->setCurrentScope($scope)); |
||
61 | } |
||
62 | |||
63 | /** |
||
64 | * @covers \League\Fractal\TransformerAbstract::getCurrentScope |
||
65 | */ |
||
66 | View Code Duplication | public function testGetCurrentScope() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
67 | { |
||
68 | $transformer = m::mock('League\Fractal\TransformerAbstract')->makePartial(); |
||
69 | $manager = new Manager(); |
||
70 | $scope = new Scope($manager, m::mock('League\Fractal\Resource\ResourceAbstract')); |
||
71 | $transformer->setCurrentScope($scope); |
||
72 | $this->assertSame($transformer->getCurrentScope(), $scope); |
||
73 | } |
||
74 | |||
75 | View Code Duplication | public function testProcessEmbeddedResourcesNoAvailableIncludes() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
76 | { |
||
77 | $transformer = m::mock('League\Fractal\TransformerAbstract')->makePartial(); |
||
78 | |||
79 | $manager = new Manager(); |
||
80 | $manager->parseIncludes('foo'); |
||
81 | |||
82 | $scope = new Scope($manager, m::mock('League\Fractal\Resource\ResourceAbstract')); |
||
83 | $this->assertFalse($transformer->processIncludedResources($scope, ['some' => 'data'])); |
||
84 | } |
||
85 | |||
86 | View Code Duplication | public function testProcessEmbeddedResourcesNoDefaultIncludes() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
87 | { |
||
88 | $transformer = m::mock('League\Fractal\TransformerAbstract')->makePartial(); |
||
89 | |||
90 | $manager = new Manager(); |
||
91 | $manager->parseIncludes('foo'); |
||
92 | |||
93 | $scope = new Scope($manager, m::mock('League\Fractal\Resource\ResourceAbstract')); |
||
94 | $this->assertFalse($transformer->processIncludedResources($scope, ['some' => 'data'])); |
||
95 | } |
||
96 | |||
97 | /** |
||
98 | * @covers \League\Fractal\TransformerAbstract::processIncludedResources |
||
99 | * @covers \League\Fractal\TransformerAbstract::callIncludeMethod |
||
100 | * @expectedException \BadMethodCallException |
||
101 | */ |
||
102 | public function testProcessEmbeddedResourcesInvalidAvailableEmbed() |
||
103 | { |
||
104 | $transformer = m::mock('League\Fractal\TransformerAbstract')->makePartial(); |
||
105 | |||
106 | $manager = new Manager(); |
||
107 | $manager->parseIncludes('book'); |
||
108 | |||
109 | $scope = new Scope($manager, m::mock('League\Fractal\Resource\ResourceAbstract')); |
||
110 | $transformer->setCurrentScope($scope); |
||
111 | |||
112 | $transformer->setAvailableIncludes(['book']); |
||
113 | $transformer->processIncludedResources($scope, []); |
||
114 | } |
||
115 | |||
116 | /** |
||
117 | * @covers \League\Fractal\TransformerAbstract::processIncludedResources |
||
118 | * @covers \League\Fractal\TransformerAbstract::callIncludeMethod |
||
119 | * @expectedException \BadMethodCallException |
||
120 | */ |
||
121 | View Code Duplication | public function testProcessEmbeddedResourcesInvalidDefaultEmbed() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
122 | { |
||
123 | $transformer = m::mock('League\Fractal\TransformerAbstract')->makePartial(); |
||
124 | |||
125 | $manager = new Manager(); |
||
126 | |||
127 | $scope = new Scope($manager, m::mock('League\Fractal\Resource\ResourceAbstract')); |
||
128 | |||
129 | $transformer->setDefaultIncludes(['book']); |
||
130 | $transformer->processIncludedResources($scope, []); |
||
131 | } |
||
132 | |||
133 | /** |
||
134 | * @covers \League\Fractal\TransformerAbstract::processIncludedResources |
||
135 | * @covers \League\Fractal\TransformerAbstract::callIncludeMethod |
||
136 | */ |
||
137 | View Code Duplication | public function testProcessIncludedAvailableResources() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
138 | { |
||
139 | $manager = new Manager(); |
||
140 | $manager->parseIncludes('book'); |
||
141 | $transformer = m::mock('League\Fractal\TransformerAbstract[transform]'); |
||
142 | |||
143 | $transformer->shouldReceive('includeBook')->once()->andReturnUsing(function ($data) { |
||
144 | return new Item(['included' => 'thing'], function ($data) { |
||
145 | return $data; |
||
146 | }); |
||
147 | }); |
||
148 | |||
149 | $transformer->setAvailableIncludes(['book', 'publisher']); |
||
150 | $scope = new Scope($manager, new Item([], $transformer)); |
||
151 | $included = $transformer->processIncludedResources($scope, ['meh']); |
||
152 | $this->assertSame(['book' => ['data' => ['included' => 'thing']]], $included); |
||
153 | } |
||
154 | |||
155 | /** |
||
156 | * @covers \League\Fractal\TransformerAbstract::processIncludedResources |
||
157 | * @covers \League\Fractal\TransformerAbstract::figureOutWhichIncludes |
||
158 | */ |
||
159 | View Code Duplication | public function testProcessExcludedAvailableResources() |
|
160 | { |
||
161 | $manager = new Manager(); |
||
162 | $transformer = m::mock('League\Fractal\TransformerAbstract[transform]'); |
||
163 | $scope = new Scope($manager, new Item([], $transformer)); |
||
164 | |||
165 | $transformer->shouldReceive('includeBook')->never(); |
||
166 | |||
167 | $transformer->shouldReceive('includePublisher')->once()->andReturnUsing(function ($data) { |
||
168 | return new Item(['another' => 'thing'], function ($data) { |
||
169 | return $data; |
||
170 | }); |
||
171 | }); |
||
172 | |||
173 | // available includes that have been requested are excluded |
||
174 | $manager->parseIncludes('book,publisher'); |
||
175 | $manager->parseExcludes('book'); |
||
176 | |||
177 | $transformer->setAvailableIncludes(['book', 'publisher']); |
||
178 | |||
179 | $included = $transformer->processIncludedResources($scope, ['meh']); |
||
180 | $this->assertSame(['publisher' => ['data' => ['another' => 'thing']]], $included); |
||
181 | } |
||
182 | |||
183 | /** |
||
184 | * @covers \League\Fractal\TransformerAbstract::processIncludedResources |
||
185 | * @covers \League\Fractal\TransformerAbstract::figureOutWhichIncludes |
||
186 | */ |
||
187 | View Code Duplication | public function testProcessExcludedDefaultResources() |
|
188 | { |
||
189 | $manager = new Manager(); |
||
190 | $transformer = m::mock('League\Fractal\TransformerAbstract[transform]'); |
||
191 | $scope = new Scope($manager, new Item([], $transformer)); |
||
192 | |||
193 | $transformer->shouldReceive('includeBook')->never(); |
||
194 | |||
195 | $transformer->shouldReceive('includePublisher')->once()->andReturnUsing(function ($data) { |
||
196 | return new Item(['another' => 'thing'], function ($data) { |
||
197 | return $data; |
||
198 | }); |
||
199 | }); |
||
200 | |||
201 | $manager->parseIncludes('book,publisher'); |
||
202 | $manager->parseExcludes('book'); |
||
203 | |||
204 | $transformer->setDefaultIncludes(['book', 'publisher']); |
||
205 | |||
206 | $included = $transformer->processIncludedResources($scope, ['meh']); |
||
207 | $this->assertSame(['publisher' => ['data' => ['another' => 'thing']]], $included); |
||
208 | } |
||
209 | |||
210 | /** |
||
211 | * @covers \League\Fractal\TransformerAbstract::processIncludedResources |
||
212 | * @covers \League\Fractal\TransformerAbstract::callIncludeMethod |
||
213 | */ |
||
214 | public function testProcessIncludedAvailableResourcesEmptyEmbed() |
||
215 | { |
||
216 | $manager = new Manager(); |
||
217 | $manager->parseIncludes(['book']); |
||
218 | $transformer = m::mock('League\Fractal\TransformerAbstract[transform]'); |
||
219 | |||
220 | $transformer->shouldReceive('includeBook')->once()->andReturn(null); |
||
221 | |||
222 | $transformer->setAvailableIncludes(['book']); |
||
223 | $scope = new Scope($manager, new Item([], $transformer)); |
||
224 | $included = $transformer->processIncludedResources($scope, ['meh']); |
||
225 | |||
226 | $this->assertFalse($included); |
||
227 | } |
||
228 | |||
229 | /** |
||
230 | * @covers \League\Fractal\TransformerAbstract::callIncludeMethod |
||
231 | * @expectedException \Exception |
||
232 | * @expectedExceptionMessage Invalid return value from League\Fractal\TransformerAbstract::includeBook(). |
||
233 | */ |
||
234 | View Code Duplication | public function testCallEmbedMethodReturnsCrap() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
235 | { |
||
236 | $manager = new Manager(); |
||
237 | $manager->parseIncludes('book'); |
||
238 | $transformer = m::mock('League\Fractal\TransformerAbstract[transform]'); |
||
239 | |||
240 | $transformer->shouldReceive('includeBook')->once()->andReturn(new \stdClass()); |
||
241 | |||
242 | $transformer->setAvailableIncludes(['book']); |
||
243 | $scope = new Scope($manager, new Item([], $transformer)); |
||
244 | $transformer->processIncludedResources($scope, ['meh']); |
||
245 | } |
||
246 | |||
247 | /** |
||
248 | * @covers \League\Fractal\TransformerAbstract::processIncludedResources |
||
249 | * @covers \League\Fractal\TransformerAbstract::callIncludeMethod |
||
250 | */ |
||
251 | View Code Duplication | public function testProcessEmbeddedDefaultResources() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
252 | { |
||
253 | $manager = new Manager(); |
||
254 | $transformer = m::mock('League\Fractal\TransformerAbstract[transform]'); |
||
255 | |||
256 | $transformer->shouldReceive('includeBook')->once()->andReturnUsing(function ($data) { |
||
0 ignored issues
–
show
|
|||
257 | return new Item(['included' => 'thing'], function ($data) { |
||
258 | return $data; |
||
259 | }); |
||
260 | }); |
||
261 | |||
262 | $transformer->setDefaultIncludes(['book']); |
||
263 | $scope = new Scope($manager, new Item([], $transformer)); |
||
264 | $included = $transformer->processIncludedResources($scope, ['meh']); |
||
265 | $this->assertSame(['book' => ['data' => ['included' => 'thing']]], $included); |
||
266 | } |
||
267 | |||
268 | /** |
||
269 | * @covers \League\Fractal\TransformerAbstract::processIncludedResources |
||
270 | * @covers \League\Fractal\TransformerAbstract::callIncludeMethod |
||
271 | */ |
||
272 | View Code Duplication | public function testIncludedItem() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
273 | { |
||
274 | $manager = new Manager(); |
||
275 | $manager->parseIncludes('book'); |
||
276 | |||
277 | $transformer = m::mock('League\Fractal\TransformerAbstract[transform]'); |
||
278 | $transformer->shouldReceive('includeBook')->once()->andReturnUsing(function ($data) { |
||
0 ignored issues
–
show
|
|||
279 | return new Item(['included' => 'thing'], function ($data) { |
||
280 | return $data; |
||
281 | }); |
||
282 | }); |
||
283 | |||
284 | $transformer->setAvailableIncludes(['book']); |
||
285 | $scope = new Scope($manager, new Item([], $transformer)); |
||
286 | $included = $transformer->processIncludedResources($scope, ['meh']); |
||
287 | $this->assertSame(['book' => ['data' => ['included' => 'thing']]], $included); |
||
288 | } |
||
289 | |||
290 | public function testParamBagIsProvidedForIncludes() |
||
291 | { |
||
292 | $manager = new Manager(); |
||
293 | $manager->parseIncludes('book:foo(bar)'); |
||
294 | |||
295 | $transformer = m::mock('League\Fractal\TransformerAbstract')->makePartial(); |
||
296 | |||
297 | $transformer->shouldReceive('includeBook') |
||
298 | ->with(m::any(), m::type('\League\Fractal\ParamBag')) |
||
299 | ->once(); |
||
300 | |||
301 | $transformer->setAvailableIncludes(['book']); |
||
302 | $scope = new Scope($manager, new Item([], $transformer)); |
||
303 | |||
304 | $this->assertFalse($transformer->processIncludedResources($scope, [])); |
||
305 | } |
||
306 | |||
307 | /** |
||
308 | * @covers \League\Fractal\TransformerAbstract::processIncludedResources |
||
309 | * @covers \League\Fractal\TransformerAbstract::callIncludeMethod |
||
310 | */ |
||
311 | public function testIncludedCollection() |
||
312 | { |
||
313 | $manager = new Manager(); |
||
314 | $manager->parseIncludes('book'); |
||
315 | |||
316 | $collectionData = [ |
||
317 | ['included' => 'thing'], |
||
318 | ['another' => 'thing'], |
||
319 | ]; |
||
320 | |||
321 | $transformer = m::mock('League\Fractal\TransformerAbstract[transform]'); |
||
322 | $transformer->shouldReceive('includeBook')->once()->andReturnUsing(function ($data) use ($collectionData) { |
||
323 | return new Collection($collectionData, function ($data) { |
||
324 | return $data; |
||
325 | }); |
||
326 | }); |
||
327 | |||
328 | $transformer->setAvailableIncludes(['book']); |
||
329 | $scope = new Scope($manager, new Collection([], $transformer)); |
||
330 | $included = $transformer->processIncludedResources($scope, ['meh']); |
||
331 | $this->assertSame(['book' => ['data' => $collectionData]], $included); |
||
332 | } |
||
333 | |||
334 | /** |
||
335 | * @covers \League\Fractal\TransformerAbstract::processIncludedResources |
||
336 | * @covers \League\Fractal\TransformerAbstract::callIncludeMethod |
||
337 | */ |
||
338 | View Code Duplication | public function testProcessEmbeddedDefaultResourcesEmptyEmbed() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
339 | { |
||
340 | $transformer = m::mock('League\Fractal\TransformerAbstract[transform]'); |
||
341 | $transformer->shouldReceive('includeBook')->once()->andReturn(null); |
||
342 | |||
343 | $transformer->setDefaultIncludes(['book']); |
||
344 | $scope = new Scope(new Manager(), new Item([], $transformer)); |
||
345 | $included = $transformer->processIncludedResources($scope, ['meh']); |
||
346 | |||
347 | $this->assertFalse($included); |
||
348 | } |
||
349 | |||
350 | /** |
||
351 | * @covers \League\Fractal\TransformerAbstract::item |
||
352 | */ |
||
353 | public function testItem() |
||
354 | { |
||
355 | $mock = m::mock('League\Fractal\TransformerAbstract'); |
||
356 | $item = $mock->item([], function () { |
||
357 | }); |
||
358 | $this->assertInstanceOf('League\Fractal\Resource\Item', $item); |
||
359 | } |
||
360 | |||
361 | /** |
||
362 | * @covers \League\Fractal\TransformerAbstract::collection |
||
363 | */ |
||
364 | public function testCollection() |
||
365 | { |
||
366 | $mock = m::mock('League\Fractal\TransformerAbstract'); |
||
367 | $collection = $mock->collection([], function () { |
||
368 | }); |
||
369 | $this->assertInstanceOf('League\Fractal\Resource\Collection', $collection); |
||
370 | } |
||
371 | |||
372 | public function tearDown() |
||
373 | { |
||
374 | m::close(); |
||
375 | } |
||
376 | } |
||
377 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.