Completed
Push — master ( ebc071...9dcd83 )
by Tobias
29:49 queued 29:28
created

test/TransformerAbstractTest.php (26 issues)

Upgrade to new PHP Analysis Engine

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
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...
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()
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...
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']);
0 ignored issues
show
The method setAvailableIncludes() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
178
179
        $included = $transformer->processIncludedResources($scope, ['meh']);
0 ignored issues
show
The method processIncludedResources() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
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()
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...
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']);
0 ignored issues
show
The method setDefaultIncludes() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
205
206
        $included = $transformer->processIncludedResources($scope, ['meh']);
0 ignored issues
show
The method processIncludedResources() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
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) {
257
            return new Item(['included' => 'thing'], function ($data) {
258
                return $data;
259
            });
260
        });
261
262
        $transformer->setDefaultIncludes(['book']);
0 ignored issues
show
The method setDefaultIncludes() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
263
        $scope = new Scope($manager, new Item([], $transformer));
264
        $included = $transformer->processIncludedResources($scope, ['meh']);
0 ignored issues
show
The method processIncludedResources() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
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) {
279
            return new Item(['included' => 'thing'], function ($data) {
280
                return $data;
281
            });
282
        });
283
284
        $transformer->setAvailableIncludes(['book']);
0 ignored issues
show
The method setAvailableIncludes() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
285
        $scope = new Scope($manager, new Item([], $transformer));
286
        $included = $transformer->processIncludedResources($scope, ['meh']);
0 ignored issues
show
The method processIncludedResources() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
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']);
0 ignored issues
show
The method setAvailableIncludes() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
329
        $scope = new Scope($manager, new Collection([], $transformer));
330
        $included = $transformer->processIncludedResources($scope, ['meh']);
0 ignored issues
show
The method processIncludedResources() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
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']);
0 ignored issues
show
The method setDefaultIncludes() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
344
        $scope = new Scope(new Manager(), new Item([], $transformer));
345
        $included = $transformer->processIncludedResources($scope, ['meh']);
0 ignored issues
show
The method processIncludedResources() does not seem to exist on object<Mockery\MockInterface>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
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