Completed
Pull Request — master (#74)
by Julien
07:02
created

EntityRepository   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 642
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 642
rs 9.8814
c 0
b 0
f 0
wmc 13

13 Methods

Rating   Name   Duplication   Size   Complexity  
B testFindWithCache() 0 98 1
A testPutWithoutStore() 0 16 1
B testFind() 0 41 1
A testFindNotFound() 0 7 1
B testFindOneByObject() 0 46 1
B testFindOneByWithoutResult() 0 35 1
A testClearCacheAfterUpdate() 0 67 1
A testCacheWithIriAsId() 0 70 1
B testFindOneByWithHal() 0 40 1
A testPersistWithUnitOfWork() 0 56 1
A testFindWithQueryParameters() 0 10 1
B beforeTestMethod() 0 31 1
A testWithoutMappingPrefix() 0 58 1
1
<?php
2
3
namespace Mapado\RestClientSdk\Tests\Units;
4
5
use atoum;
6
use Mapado\RestClientSdk\Mapping as RestMapping;
7
use Mapado\RestClientSdk\Mapping\Attribute;
8
use Mapado\RestClientSdk\Mapping\ClassMetadata;
9
use Mapado\RestClientSdk\Mapping\Driver\AnnotationDriver;
10
use Mapado\RestClientSdk\UnitOfWork;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, Mapado\RestClientSdk\Tests\Units\UnitOfWork. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
11
use Symfony\Component\Cache\Adapter\ArrayAdapter;
12
13
/**
14
 * Class EntityRepository
15
 *
16
 * @author Julien Deniau <[email protected]>
17
 */
18
class EntityRepository extends atoum
19
{
20
    private $mockedRestClient;
21
22
    private $mockedSdk;
23
24
    private $mockedHydrator;
25
26
    private $repository;
27
28
    private $mapping;
29
30
    private $unitOfWork;
31
32
    public function beforeTestMethod($method)
33
    {
34
        $this->mockGenerator->orphanize('__construct');
35
        $this->mockedSdk = new \mock\Mapado\RestClientSdk\SdkClient();
0 ignored issues
show
Bug introduced by
The type mock\Mapado\RestClientSdk\SdkClient was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
36
        $mockedHydrator = new \mock\Mapado\RestClientSdk\Model\ModelHydrator($this->mockedSdk);
0 ignored issues
show
Bug introduced by
The type mock\Mapado\RestClientSdk\Model\ModelHydrator was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
37
        $this->calling($this->mockedSdk)->getModelHydrator = $mockedHydrator;
38
39
        $this->mockGenerator->orphanize('__construct');
40
        $this->mockedRestClient = new \mock\Mapado\RestClientSdk\RestClient();
0 ignored issues
show
Bug introduced by
The type mock\Mapado\RestClientSdk\RestClient was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
41
        // $this->resetMock($this->mockedRestClient);
0 ignored issues
show
Unused Code Comprehensibility introduced by
70% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
42
43
        $this->mockedHydrator = new \mock\Mapado\RestClientSdk\Model\ModelHydrator($this->mockedSdk);
44
        $this->calling($this->mockedSdk)->getModelHydrator = $this->mockedHydrator;
45
46
        $this->mapping = new RestMapping('v12');
47
        $this->mapping->setMapping([
48
            new ClassMetadata(
49
                'orders',
50
                'Mapado\RestClientSdk\Tests\Model\JsonLd\Model',
51
                'mock\Mapado\RestClientSdk\EntityRepository'
52
            ),
53
        ]);
54
        $this->unitOfWork = new UnitOfWork($this->mapping);
55
56
        $this->calling($this->mockedSdk)->getMapping = $this->mapping;
57
58
        $this->repository = new \mock\Mapado\RestClientSdk\EntityRepository(
0 ignored issues
show
Bug introduced by
The type mock\Mapado\RestClientSdk\EntityRepository was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
59
            $this->mockedSdk,
60
            $this->mockedRestClient,
61
            $this->unitOfWork,
62
            'Mapado\RestClientSdk\Tests\Model\JsonLd\Model'
63
        );
64
    }
65
66
    /**
67
     * testFind
68
     */
69
    public function testFind()
70
    {
71
        $this->calling($this->mockedRestClient)->get = [];
72
73
        $this
74
            ->if($this->repository->find('1'))
75
            ->then
76
                ->mock($this->mockedRestClient)
77
                    ->call('get')
78
                        ->withArguments('v12/orders/1')->once()
79
80
            ->given($this->resetMock($this->mockedRestClient))
81
            ->if($this->repository->find('v12/orders/999'))
82
            ->then
83
                ->mock($this->mockedRestClient)
84
                    ->call('get')
85
                        ->withArguments('v12/orders/999')->once()
86
87
            ->if($this->repository->findAll())
88
            ->then
89
                ->mock($this->mockedRestClient)
90
                    ->call('get')
91
                        ->withArguments('v12/orders')->once()
92
93
            ->if($this->repository->findOneByFoo('bar'))
94
            ->then
95
                ->mock($this->mockedRestClient)
96
                    ->call('get')
97
                        ->withArguments('v12/orders?foo=bar')->once()
98
                ->mock($this->mockedHydrator)
99
                    ->call('hydrate')
100
                        ->twice()
101
102
            ->if($this->repository->findByFoo('baz'))
103
            ->then
104
                ->mock($this->mockedRestClient)
105
                    ->call('get')
106
                        ->withArguments('v12/orders?foo=baz')->once()
107
                ->mock($this->mockedHydrator)
108
                    ->call('hydrateList')
109
                        ->twice()
110
        ;
111
    }
112
113
    /**
114
     * testFindWithQueryParameters
115
     */
116
    public function testFindWithQueryParameters()
117
    {
118
        $this->calling($this->mockedRestClient)->get = [];
119
120
        $this
121
            ->if($this->repository->find('1', ['foo' => 'bar', 'bar' => 'baz']))
122
            ->then
123
                ->mock($this->mockedRestClient)
124
                    ->call('get')
125
                        ->withArguments('v12/orders/1?foo=bar&bar=baz')->once()
126
        ;
127
    }
128
129
    /**
130
     * testFindWithCache
131
     */
132
    public function testFindWithCache()
133
    {
134
        $mockOrder1 = new \mock\entity();
0 ignored issues
show
Bug introduced by
The type mock\entity was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
135
        $mockOrder2 = new \mock\entity();
136
        $mockOrder3 = new \mock\entity();
137
        $this->calling($mockOrder1)->getId = 'v12/orders/1';
138
        $this->calling($mockOrder2)->getId = 'v12/orders/2';
139
        $this->calling($mockOrder3)->getId = 'v12/orders/3';
140
141
        $this->calling($this->mockedHydrator)->hydrate = $mockOrder1;
142
        $this->calling($this->mockedHydrator)->hydrateList = [$mockOrder1, $mockOrder2, $mockOrder3];
143
144
        $arrayAdapter = new ArrayAdapter(0, false);
145
        $this->calling($this->mockedSdk)->getCacheItemPool = $arrayAdapter;
146
        $this->calling($this->mockedSdk)->getCachePrefix = 'test_prefix_';
147
148
        $this->calling($this->mockedRestClient)->get = [];
149
150
        $this->calling($this->mockedHydrator)->convertId[0] = 'v12/orders/1';
151
        $this->calling($this->mockedHydrator)->convertId[1] = 'v12/orders/1';
152
        $this->calling($this->mockedHydrator)->convertId[4] = 'v12/orders/3';
153
154
        $this
155
            ->if($this->repository->find(1))
156
            ->and($this->repository->find(1))
157
            ->and($this->repository->find(1, ['foo' => 'bar']))
158
            ->then
159
                ->mock($this->mockedRestClient)
160
                    ->call('get')
161
                        ->withArguments('v12/orders/1')->once()
162
                    ->call('get')
163
                        ->withArguments('v12/orders/1?foo=bar')->once()
164
165
            // find all
166
            ->if($this->repository->findAll())
167
            ->and($this->repository->findAll())
168
            ->if($this->repository->find(3))
169
            ->then
170
                ->mock($this->mockedRestClient)
171
                    ->call('get')
172
                        ->withArguments('v12/orders')->once()
173
                    ->call('get')
174
                        ->withArguments('v12/orders/3')->never()
175
176
            // find by
177
            ->given($this->resetMock($this->mockedRestClient))
178
                ->and($this->mockedSdk->getCacheItemPool()->clear())
179
180
            ->if($this->repository->findBy(['foo' => 'bar', 'bar' => 'baz']))
181
            ->and($this->repository->findBy(['foo' => 'bar', 'bar' => 'baz']))
182
            ->if($this->repository->find(1))
183
            ->then
184
                ->mock($this->mockedRestClient)
185
                    ->call('get')
186
                        ->withArguments('v12/orders?foo=bar&bar=baz')->once()
187
                    ->call('get')
188
                        ->withArguments('v12/orders/1')->never()
189
190
            // find by something
191
            ->given($this->resetMock($this->mockedRestClient))
192
193
            ->if($this->repository->findByBar('baz'))
194
                ->and($this->repository->findByBar('baz'))
195
                ->and($this->repository->find(1))
196
            ->then
197
                ->mock($this->mockedRestClient)
198
                    ->call('get')
199
                        ->withArguments('v12/orders?bar=baz')->once()
200
                    ->call('get')
201
                        ->withArguments('v12/orders/1')->never()
202
203
            // find one by
204
            ->given($this->resetMock($this->mockedRestClient))
205
206
            ->if($this->repository->findOneBy(['foo' => 'baz', 'bar' => 'bar']))
207
            ->and($this->repository->findOneBy(['foo' => 'baz', 'bar' => 'bar']))
208
            ->then
209
                ->mock($this->mockedRestClient)
210
                    ->call('get')
211
                        ->withArguments('v12/orders?foo=baz&bar=bar')->once()
212
213
            // find one by thing
214
            ->given($this->resetMock($this->mockedRestClient))
215
216
            ->if($this->repository->findOneByFoo('bar'))
217
            ->and($this->repository->findOneByFoo('bar'))
218
            ->then
219
                ->mock($this->mockedRestClient)
220
                    ->call('get')
221
                        ->withArguments('v12/orders?foo=bar')->once()
222
223
            // find one by with data already in cache
224
            ->given($this->resetMock($this->mockedRestClient))
225
            ->if($this->repository->findOneBy(['foo' => 'bar', 'bar' => 'baz']))
226
            ->then
227
                ->mock($this->mockedRestClient)
228
                    ->call('get')
229
                        ->withArguments('v12/orders?foo=bar&bar=baz')->never()
230
        ;
231
    }
232
233
    /**
234
     * testClearCacheAfterUpdate
235
     */
236
    public function testClearCacheAfterUpdate()
237
    {
238
        $mapping = new RestMapping('/v12');
239
        $mapping->setMapping([
240
            new ClassMetadata(
241
                'products',
242
                'Mapado\RestClientSdk\Tests\Model\JsonLd\Product',
243
                'mock\Mapado\RestClientSdk\EntityRepository'
244
            ),
245
        ]);
246
247
        $this->calling($this->mockedSdk)->getMapping = $mapping;
248
        $this->calling($this->mockedSdk)->getSerializer = new \Mapado\RestClientSdk\Model\Serializer($mapping, $this->unitOfWork);
249
250
        $product1 = new \Mapado\RestClientSdk\Tests\Model\JsonLd\Product();
251
        $product2 = new \Mapado\RestClientSdk\Tests\Model\JsonLd\Product();
252
        $product3 = new \Mapado\RestClientSdk\Tests\Model\JsonLd\Product();
253
        $product1->setId('/v12/products/1');
0 ignored issues
show
Bug introduced by
'/v12/products/1' of type string is incompatible with the type integer expected by parameter $id of Mapado\RestClientSdk\Tes...JsonLd\Product::setId(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

253
        $product1->setId(/** @scrutinizer ignore-type */ '/v12/products/1');
Loading history...
254
        $product2->setId('/v12/products/2');
255
        $product3->setId('/v12/products/3');
256
257
        $this->calling($this->mockedHydrator)->hydrate = $product1;
258
        $this->calling($this->mockedHydrator)->hydrateList = [$product1, $product2, $product3];
259
260
        $arrayAdapter = new ArrayAdapter(0, false);
261
        $this->calling($this->mockedSdk)->getCacheItemPool = $arrayAdapter;
262
        $this->calling($this->mockedSdk)->getCachePrefix = 'test_prefix_';
263
264
        $this->calling($this->mockedRestClient)->get = $product1;
265
        $this->calling($this->mockedRestClient)->put = $product1;
266
        $this->calling($this->mockedRestClient)->delete = null;
267
268
        $repository = new \mock\Mapado\RestClientSdk\EntityRepository(
269
            $this->mockedSdk,
270
            $this->mockedRestClient,
271
            $this->unitOfWork,
272
            'Mapado\RestClientSdk\Tests\Model\JsonLd\Product'
273
        );
274
275
        $this
276
            ->if($repository->find(1))
277
            ->then
278
                ->boolean($arrayAdapter->hasItem('test_prefix__v12_products_1'))
279
                    ->isTrue()
280
281
            ->if($repository->find(1))
282
            ->then
283
                ->mock($this->mockedRestClient)
284
                    ->call('get')
285
                        ->withArguments('/v12/products/1')->once()
286
287
            // after update
288
            ->if($repository->update($product1))
289
                ->boolean($arrayAdapter->hasItem('test_prefix__v12_products_1'))
290
                    ->isFalse()
291
292
            ->if($repository->find(1))
293
            ->then
294
                ->mock($this->mockedRestClient)
295
                    ->call('get')
296
                        ->withArguments('/v12/products/1')->twice()
297
298
            // after deletion
299
            ->if($repository->remove($product1))
300
            ->then
301
                ->boolean($arrayAdapter->hasItem('test_prefix__v12_products_1'))
302
                    ->isFalse()
303
        ;
304
    }
305
306
    public function testPutWithoutStore()
307
    {
308
        $product1 = new \Mapado\RestClientSdk\Tests\Model\JsonLd\Order();
309
        $product1->setId('/v12/orders/1');
310
311
        $this->calling($this->mockedHydrator)->hydrate = $product1;
312
        $this->calling($this->mockedHydrator)->hydrateList = [$product1];
313
314
        $this->calling($this->mockedRestClient)->put = [$product1];
315
        $this->calling($this->mockedSdk)->getSerializer = new \Mapado\RestClientSdk\Model\Serializer($this->mapping, $this->unitOfWork);
316
317
        $this
318
            ->given($updatedProduct = $this->repository->update($product1))
319
            ->then
320
                ->object($updatedProduct)
321
                    ->isIdenticalTo($product1);
322
    }
323
324
    public function testCacheWithIriAsId()
325
    {
326
        $annotationDriver = new AnnotationDriver(__DIR__ . '/../cache/');
327
        $mapping = new RestMapping();
328
        $mapping->setMapping($annotationDriver->loadDirectory(__DIR__ . '/../Model/Issue46/'));
329
330
        $unitOfWork = new UnitOfWork($mapping);
331
332
        $this->calling($this->mockedSdk)->getMapping = $mapping;
333
        $this->calling($this->mockedSdk)->getSerializer = new \Mapado\RestClientSdk\Model\Serializer($mapping, $unitOfWork);
334
335
        $section1 = new \Mapado\RestClientSdk\Tests\Model\Issue46\Section();
336
        $section1->setIri('/sections/1');
337
338
        $this->calling($this->mockedHydrator)->hydrate = $section1;
339
        $this->calling($this->mockedHydrator)->hydrateList = [$section1];
340
341
        $arrayAdapter = new ArrayAdapter(0, false);
342
        $this->calling($this->mockedSdk)->getCacheItemPool = $arrayAdapter;
343
        $this->calling($this->mockedSdk)->getCachePrefix = 'test_prefix_';
344
345
        $this->calling($this->mockedRestClient)->get = $section1;
346
        $this->calling($this->mockedRestClient)->put = $section1;
347
        $this->calling($this->mockedRestClient)->delete = null;
348
349
        $repository = new \mock\Mapado\RestClientSdk\EntityRepository(
350
            $this->mockedSdk,
351
            $this->mockedRestClient,
352
            $unitOfWork,
353
            'Mapado\RestClientSdk\Tests\Model\Issue46\Section'
354
        );
355
356
        $this
357
            ->if($repository->findBy(['section' => $section1]))
358
           ->then
359
               ->mock($this->mockedRestClient)
360
                   ->call('get')
361
                       ->withArguments('/sections?section=%2Fsections%2F1')->once()
362
363
            ->if($repository->findAll())
364
            ->then
365
                ->boolean($arrayAdapter->hasItem('test_prefix__sections_1'))
366
                    ->isTrue()
367
368
           ->if($repository->find(1))
369
           ->then
370
               ->mock($this->mockedRestClient)
371
                   ->call('get')
372
                       ->withArguments('/sections/1')->never()
373
374
            // after update
375
            ->if($repository->update($section1))
376
                ->boolean($arrayAdapter->hasItem('test_prefix__sections_1'))
377
                    ->isFalse()
378
            ->then
379
                ->mock($this->mockedRestClient)
380
                    ->call('put')
381
                        ->withArguments('/sections/1')->once()
382
383
            ->if($repository->find(1))
384
            ->then
385
                ->mock($this->mockedRestClient)
386
                    ->call('get')
387
                        ->withArguments('/sections/1')->once()
388
389
            // after deletion
390
            ->if($repository->remove($section1))
391
            ->then
392
                ->boolean($arrayAdapter->hasItem('test_prefix__sections_1'))
393
                    ->isFalse()
394
        ;
395
    }
396
397
    /**
398
     * testFindNotFound
399
     */
400
    public function testFindNotFound()
401
    {
402
        $this->calling($this->mockedRestClient)->get = null;
403
404
        $this
405
            ->variable($this->repository->find('1'))
406
            ->isNull()
407
        ;
408
    }
409
410
    public function testFindOneByObject()
411
    {
412
        $mapping = new RestMapping('v12');
413
        $mapping->setMapping([
414
            new ClassMetadata(
415
                'carts',
416
                'Mapado\RestClientSdk\Tests\Model\JsonLd\Cart',
417
                'mock\Mapado\RestClientSdk\EntityRepository'
418
            ),
419
            new ClassMetadata(
420
                'cart_items',
421
                'Mapado\RestClientSdk\Tests\Model\JsonLd\CartItem',
422
                'mock\Mapado\RestClientSdk\EntityRepository'
423
            ),
424
        ]);
425
426
        $this->calling($this->mockedSdk)->getMapping = $mapping;
427
428
        $this->calling($this->mockedRestClient)->get = [];
429
430
        $cartItemRepository = new \mock\Mapado\RestClientSdk\EntityRepository(
431
            $this->mockedSdk,
432
            $this->mockedRestClient,
433
            $this->unitOfWork,
434
            'Mapado\RestClientSdk\Tests\Model\JsonLd\CartItem'
435
        );
436
437
        $cart = new \Mapado\RestClientSdk\Tests\Model\JsonLd\Cart();
438
        $cart->setId(1);
439
440
        $this
441
            ->given($cart = new \Mapado\RestClientSdk\Tests\Model\JsonLd\Cart())
442
                ->and($cart->setId(1))
443
            ->if($cartItemRepository->findOneByCart($cart))
444
            ->then
445
                ->mock($this->mockedRestClient)
446
                    ->call('get')
447
                        ->withArguments('v12/cart_items?cart=1')->once()
448
449
            // test with unmapped class
450
            ->given($cart = new \mock\stdClass())
0 ignored issues
show
Bug introduced by
The type mock\stdClass was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
451
            ->if($cartItemRepository->findOneByCart($cart))
452
            ->then
453
                ->mock($this->mockedRestClient)
454
                    ->call('get')
455
                        ->withArguments('v12/cart_items?')->once()
456
        ;
457
    }
458
459
    public function testWithoutMappingPrefix()
460
    {
461
        $mapping = new RestMapping('/v12');
0 ignored issues
show
Unused Code introduced by
The assignment to $mapping is dead and can be removed.
Loading history...
462
        $mapping = new RestMapping();
463
        $mapping->setMapping([
464
            new ClassMetadata(
465
                'carts',
466
                'Mapado\RestClientSdk\Tests\Model\JsonLd\Cart',
467
                'mock\Mapado\RestClientSdk\EntityRepository'
468
            ),
469
            new ClassMetadata(
470
                'cart_items',
471
                'Mapado\RestClientSdk\Tests\Model\JsonLd\CartItem',
472
                'mock\Mapado\RestClientSdk\EntityRepository'
473
            ),
474
        ]);
475
476
        $this->calling($this->mockedSdk)->getSerializer = new \Mapado\RestClientSdk\Model\Serializer($mapping, $this->unitOfWork);
477
        $this->calling($this->mockedSdk)->getMapping = $mapping;
478
479
        $this->calling($this->mockedRestClient)->get = [];
480
        $this->calling($this->mockedRestClient)->post = [];
481
482
        $cartItemRepository = new \mock\Mapado\RestClientSdk\EntityRepository(
483
            $this->mockedSdk,
484
            $this->mockedRestClient,
485
            $this->unitOfWork,
486
            'Mapado\RestClientSdk\Tests\Model\JsonLd\CartItem'
487
        );
488
489
        $cart = new \Mapado\RestClientSdk\Tests\Model\JsonLd\Cart();
490
        $cart->setId(1);
491
492
        $this
493
            ->if($cartItemRepository->find(1))
494
            ->then
495
                ->mock($this->mockedRestClient)
496
                    ->call('get')
497
                        ->withArguments('/cart_items/1')->once()
498
499
            ->if($cartItemRepository->findAll())
500
            ->then
501
                ->mock($this->mockedRestClient)
502
                    ->call('get')
503
                        ->withArguments('/cart_items')->once()
504
505
            ->if($cartItemRepository->findBy(['foo' => 'bar']))
506
            ->then
507
                ->mock($this->mockedRestClient)
508
                    ->call('get')
509
                        ->withArguments('/cart_items?foo=bar')->once()
510
511
            ->given($cartItem = new \mock\Mapado\RestClientSdk\Tests\Model\JsonLd\CartItem())
0 ignored issues
show
Bug introduced by
The type mock\Mapado\RestClientSd...s\Model\JsonLd\CartItem was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
512
            ->if($cartItemRepository->persist($cartItem))
513
            ->then
514
                ->mock($this->mockedRestClient)
515
                    ->call('post')
516
                        ->withArguments('/cart_items')->once()
517
        ;
518
    }
519
520
    public function testFindOneByWithHal()
521
    {
522
        $mapping = new RestMapping('v12');
523
        $classMetadata = new ClassMetadata(
524
            'orders',
525
            'Mapado\RestClientSdk\Tests\Model\JsonLd\Order',
526
            'mock\Mapado\RestClientSdk\EntityRepository'
527
        );
528
        $classMetadata->setAttributeList([
529
            new Attribute('@id', 'id', 'string', true),
530
        ]);
531
        $mapping->setMapping([$classMetadata]);
532
533
        $this->calling($this->mockedSdk)->getMapping = $mapping;
534
535
        $this->repository = new \mock\Mapado\RestClientSdk\EntityRepository(
536
            $this->mockedSdk,
537
            $this->mockedRestClient,
538
            $this->unitOfWork,
539
            'Mapado\RestClientSdk\Tests\Model\JsonLd\Order'
540
        );
541
542
        $mapping->setConfig([
543
            'collectionKey' => 'fooList',
544
        ]);
545
        $this->calling($this->mockedRestClient)->get = [
546
            'fooList' => [
547
                [
548
                    '@id' => '/orders/2',
549
                ],
550
            ],
551
        ];
552
        $this->calling($this->mockedSdk)->getSerializer = new \Mapado\RestClientSdk\Model\Serializer($mapping, $this->unitOfWork);
553
554
        $this
555
            ->then
556
                ->object($order = $this->repository->findOneBy(['a' => 'a']))
557
                    ->isInstanceOf('Mapado\RestClientSdk\Tests\Model\JsonLd\Order')
558
                ->string($order->getId())
559
                    ->isEqualTo('/orders/2')
560
        ;
561
    }
562
563
    /**
564
     * testFindOneByWithoutResult
565
     */
566
    public function testFindOneByWithoutResult()
567
    {
568
        $mapping = new RestMapping('v12');
569
        $classMetadata = new ClassMetadata(
570
            'orders',
571
            'Mapado\RestClientSdk\Tests\Model\JsonLd\Order',
572
            'mock\Mapado\RestClientSdk\EntityRepository'
573
        );
574
        $classMetadata->setAttributeList([
575
            new Attribute('@id', 'id', 'string', true),
576
        ]);
577
        $mapping->setMapping([$classMetadata]);
578
579
        $this->calling($this->mockedSdk)->getMapping = $mapping;
580
581
        $this->repository = new \mock\Mapado\RestClientSdk\EntityRepository(
582
            $this->mockedSdk,
583
            $this->mockedRestClient,
584
            $this->unitOfWork,
585
            'Mapado\RestClientSdk\Tests\Model\JsonLd\Order'
586
        );
587
588
        $mapping->setConfig([
589
            'collectionKey' => 'fooList',
590
        ]);
591
        $this->calling($this->mockedRestClient)->get = [
592
            'fooList' => [
593
            ],
594
        ];
595
        $this->calling($this->mockedSdk)->getSerializer = new \Mapado\RestClientSdk\Model\Serializer($mapping, $this->unitOfWork);
596
597
        $this
598
            ->then
599
                ->variable($order = $this->repository->findOneBy(['a' => 'a']))
600
                    ->isNull()
601
        ;
602
    }
603
604
    public function testPersistWithUnitOfWork()
605
    {
606
        $annotationDriver = new AnnotationDriver(__DIR__ . '/../cache/');
607
        $mapping = new RestMapping();
608
        $mapping->setMapping($annotationDriver->loadDirectory(__DIR__ . '/../Model/JsonLd/'));
609
610
        $unitOfWork = new UnitOfWork($mapping);
611
612
        $this->calling($this->mockedSdk)->getMapping = $mapping;
613
        $this->calling($this->mockedSdk)->getSerializer = new \Mapado\RestClientSdk\Model\Serializer($mapping, $unitOfWork);
614
615
        $cartItemRepository = new \mock\Mapado\RestClientSdk\EntityRepository(
0 ignored issues
show
Unused Code introduced by
The assignment to $cartItemRepository is dead and can be removed.
Loading history...
616
            $this->mockedSdk,
617
            $this->mockedRestClient,
618
            $unitOfWork,
619
            'Mapado\RestClientSdk\Tests\Model\JsonLd\CartItem'
620
        );
621
        $cartRepository = new \mock\Mapado\RestClientSdk\EntityRepository(
622
            $this->mockedSdk,
623
            $this->mockedRestClient,
624
            $unitOfWork,
625
            'Mapado\RestClientSdk\Tests\Model\JsonLd\Cart'
626
        );
627
628
        $cart = new \Mapado\RestClientSdk\Tests\Model\JsonLd\Cart();
629
        $cart->setStatus('pending');
630
        $cartItem = new \Mapado\RestClientSdk\Tests\Model\JsonLd\CartItem();
631
        $cartItem->setCart($cart);
632
        $cartItem->setAmount(0);
633
        $cartItem2 = new \Mapado\RestClientSdk\Tests\Model\JsonLd\CartItem();
634
        $cartItem2->setCart($cart);
635
        $cartItem2->setData(['foo' => 'bar']);
636
637
        $this->calling($this->mockedRestClient)->post = [];
638
639
        $this
640
            ->if($cartRepository->persist($cart))
641
            ->then
642
                ->mock($this->mockedRestClient)
643
                    ->call('post')
644
                        ->withArguments(
645
                            '/cart',
646
                            [
647
                                'status' => 'pending',
648
                                'cart_items' => [
649
                                    [
650
                                        'amount' => 0,
651
                                        'data' => [],
652
                                    ],
653
                                    [
654
                                        'data' => ['foo' => 'bar'],
655
                                    ],
656
                                ],
657
                            ]
658
                        )
659
                        ->once()
660
        ;
661
    }
662
}
663