Completed
Push — 1.2-resource-custom-repositori... ( 442e79 )
by Kamil
33:47
created

it_uses_custom_repository_if_specified()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 18
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 14
nc 1
nop 4
1
<?php
2
3
/*
4
 * This file is part of the Sylius package.
5
 *
6
 * (c) Paweł Jędrzejewski
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
namespace spec\Sylius\Bundle\ResourceBundle\Controller;
15
16
use Pagerfanta\Pagerfanta;
17
use PhpSpec\ObjectBehavior;
18
use Sylius\Bundle\ResourceBundle\Controller\RequestConfiguration;
19
use Sylius\Bundle\ResourceBundle\Controller\ResourcesResolverInterface;
20
use Sylius\Component\Resource\Model\ResourceInterface;
21
use Sylius\Component\Resource\Repository\RepositoryInterface;
22
23
final class ResourcesResolverSpec extends ObjectBehavior
24
{
25
    function it_implements_resources_resolver_interface(): void
26
    {
27
        $this->shouldImplement(ResourcesResolverInterface::class);
28
    }
29
30
    function it_gets_all_resources_if_has_no_criteria(
31
        RequestConfiguration $requestConfiguration,
32
        RepositoryInterface $repository,
33
        ResourceInterface $firstResource,
34
        ResourceInterface $secondResource
35
    ): void {
36
        $requestConfiguration->isHtmlRequest()->willReturn(true);
37
        $requestConfiguration->getRepositoryMethod(null)->willReturn(null);
38
39
        $requestConfiguration->isPaginated()->willReturn(false);
40
        $requestConfiguration->isFilterable()->willReturn(false);
41
        $requestConfiguration->isSortable()->willReturn(false);
42
        $requestConfiguration->getLimit()->willReturn(null);
43
44
        $repository->findBy([], [], null)->willReturn([$firstResource, $secondResource]);
45
46
        $this->getResources($requestConfiguration, $repository)->shouldReturn([$firstResource, $secondResource]);
47
    }
48
49
    function it_finds_resources_by_criteria_if_not_paginated(
50
        RequestConfiguration $requestConfiguration,
51
        RepositoryInterface $repository,
52
        ResourceInterface $firstResource,
53
        ResourceInterface $secondResource,
54
        ResourceInterface $thirdResource
55
    ): void {
56
        $requestConfiguration->isHtmlRequest()->willReturn(true);
57
        $requestConfiguration->getRepositoryMethod(null)->willReturn(null);
58
59
        $requestConfiguration->isPaginated()->willReturn(false);
60
        $requestConfiguration->isFilterable()->willReturn(true);
61
        $requestConfiguration->isSortable()->willReturn(true);
62
        $requestConfiguration->isLimited()->willReturn(true);
63
        $requestConfiguration->getLimit()->willReturn(15);
64
65
        $requestConfiguration->getCriteria()->willReturn(['custom' => 'criteria']);
66
        $requestConfiguration->getSorting()->willReturn(['name' => 'desc']);
67
68
        $repository->findBy(['custom' => 'criteria'], ['name' => 'desc'], 15)->willReturn([$firstResource, $secondResource, $thirdResource]);
69
70
        $this->getResources($requestConfiguration, $repository)->shouldReturn([$firstResource, $secondResource, $thirdResource]);
71
    }
72
73
    function it_uses_custom_method_and_arguments_if_specified(
74
        RequestConfiguration $requestConfiguration,
75
        RepositoryInterface $repository,
76
        ResourceInterface $firstResource
77
    ): void {
78
        $requestConfiguration->isHtmlRequest()->willReturn(true);
79
        $requestConfiguration->getRepositoryMethod()->willReturn('findAll');
80
        $requestConfiguration->getRepositoryArguments()->willReturn(['foo']);
81
82
        $requestConfiguration->isPaginated()->willReturn(false);
83
        $requestConfiguration->isLimited()->willReturn(true);
84
        $requestConfiguration->getLimit()->willReturn(15);
85
86
        $repository->findAll('foo')->willReturn([$firstResource]);
87
88
        $this->getResources($requestConfiguration, $repository)->shouldReturn([$firstResource]);
89
    }
90
91
    function it_uses_custom_repository_if_specified(
92
        RequestConfiguration $requestConfiguration,
93
        RepositoryInterface $repository,
94
        RepositoryInterface $customRepository,
95
        ResourceInterface $firstResource
96
    ): void {
97
        $requestConfiguration->isHtmlRequest()->willReturn(true);
98
        $requestConfiguration->getRepositoryMethod()->willReturn([$customRepository, 'findBy']);
99
        $requestConfiguration->getRepositoryArguments()->willReturn([['foo' => true]]);
100
101
        $requestConfiguration->isPaginated()->willReturn(false);
102
        $requestConfiguration->isLimited()->willReturn(true);
103
        $requestConfiguration->getLimit()->willReturn(15);
104
105
        $customRepository->findBy(['foo' => true])->willReturn([$firstResource]);
106
107
        $this->getResources($requestConfiguration, $repository)->shouldReturn([$firstResource]);
108
    }
109
110
    function it_creates_paginator_by_default(
111
        RequestConfiguration $requestConfiguration,
112
        RepositoryInterface $repository,
113
        Pagerfanta $paginator
114
    ): void {
115
        $requestConfiguration->isHtmlRequest()->willReturn(true);
116
        $requestConfiguration->getRepositoryMethod()->willReturn(null);
117
118
        $requestConfiguration->isPaginated()->willReturn(true);
119
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(5);
120
        $requestConfiguration->isLimited()->willReturn(false);
121
        $requestConfiguration->isFilterable()->willReturn(false);
122
        $requestConfiguration->isSortable()->willReturn(false);
123
124
        $repository->createPaginator([], [])->willReturn($paginator);
125
126
        $this->getResources($requestConfiguration, $repository)->shouldReturn($paginator);
127
    }
128
}
129