Completed
Push — 1.0-contributing ( e0062d )
by Kamil
24:53
created

it_handles_Pagerfanta()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 25
rs 8.8571
cc 1
eloc 20
nc 1
nop 6
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 Hateoas\Configuration\Route;
17
use Hateoas\Representation\Factory\PagerfantaFactory;
18
use Hateoas\Representation\PaginatedRepresentation;
19
use Pagerfanta\Pagerfanta;
20
use PhpSpec\ObjectBehavior;
21
use Prophecy\Argument;
22
use Sylius\Bundle\ResourceBundle\Controller\RequestConfiguration;
23
use Sylius\Bundle\ResourceBundle\Controller\ResourcesCollectionProviderInterface;
24
use Sylius\Bundle\ResourceBundle\Controller\ResourcesResolverInterface;
25
use Sylius\Bundle\ResourceBundle\Grid\View\ResourceGridView;
26
use Sylius\Component\Grid\Definition\Grid;
27
use Sylius\Component\Resource\Model\ResourceInterface;
28
use Sylius\Component\Resource\Repository\RepositoryInterface;
29
use Symfony\Component\HttpFoundation\ParameterBag;
30
use Symfony\Component\HttpFoundation\Request;
31
32
/**
33
 * @author Paweł Jędrzejewski <[email protected]>
34
 */
35
final class ResourcesCollectionProviderSpec extends ObjectBehavior
36
{
37
    function let(ResourcesResolverInterface $resourcesResolver, PagerfantaFactory $pagerfantaRepresentationFactory): void
38
    {
39
        $this->beConstructedWith($resourcesResolver, $pagerfantaRepresentationFactory);
40
    }
41
42
    function it_implements_resources_collection_provider_interface(): void
43
    {
44
        $this->shouldImplement(ResourcesCollectionProviderInterface::class);
45
    }
46
47
    function it_returns_resources_resolved_from_repository(
48
        ResourcesResolverInterface $resourcesResolver,
49
        RequestConfiguration $requestConfiguration,
50
        RepositoryInterface $repository,
51
        ResourceInterface $firstResource,
52
        ResourceInterface $secondResource
53
    ): void {
54
        $requestConfiguration->isHtmlRequest()->willReturn(true);
55
56
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn([$firstResource, $secondResource]);
57
58
        $this->get($requestConfiguration, $repository)->shouldReturn([$firstResource, $secondResource]);
59
    }
60
61
    function it_handles_Pagerfanta(
0 ignored issues
show
Coding Style introduced by
function it_handles_Pagerfanta() does not seem to conform to the naming convention (^(?:(?:[a-z]|__)[a-zA-Z0-9]*|[a-z][a-z0-9_]*)$).

This check examines a number of code elements and verifies that they conform to the given naming conventions.

You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods.

Loading history...
62
        ResourcesResolverInterface $resourcesResolver,
63
        RequestConfiguration $requestConfiguration,
64
        RepositoryInterface $repository,
65
        Pagerfanta $paginator,
66
        Request $request,
67
        ParameterBag $queryParameters
68
    ): void {
69
        $requestConfiguration->isHtmlRequest()->willReturn(true);
70
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(5);
71
72
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn($paginator);
73
74
        $requestConfiguration->getRequest()->willReturn($request);
75
        $request->query = $queryParameters;
76
        $queryParameters->has('limit')->willReturn(true);
77
        $queryParameters->getInt('limit')->willReturn(5);
78
        $queryParameters->get('page', 1)->willReturn(6);
79
80
        $paginator->setMaxPerPage(5)->shouldBeCalled();
81
        $paginator->setCurrentPage(6)->shouldBeCalled();
82
        $paginator->getCurrentPageResults()->shouldBeCalled();
83
84
        $this->get($requestConfiguration, $repository)->shouldReturn($paginator);
85
    }
86
87
    function it_restricts_max_pagination_limit_based_on_grid_configuration(
88
        ResourcesResolverInterface $resourcesResolver,
89
        RequestConfiguration $requestConfiguration,
90
        RepositoryInterface $repository,
91
        ResourceGridView $gridView,
92
        Grid $grid,
93
        Pagerfanta $paginator,
94
        Request $request,
95
        ParameterBag $queryParameters
96
    ): void {
97
        $requestConfiguration->isHtmlRequest()->willReturn(true);
98
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(1000);
99
100
        $grid->getLimits()->willReturn([10, 20, 99]);
101
102
        $gridView->getDefinition()->willReturn($grid);
103
        $gridView->getData()->willReturn($paginator);
104
105
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn($gridView);
106
107
        $requestConfiguration->getRequest()->willReturn($request);
108
        $request->query = $queryParameters;
109
        $queryParameters->has('limit')->willReturn(true);
110
        $queryParameters->getInt('limit')->willReturn(1000);
111
        $queryParameters->get('page', 1)->willReturn(1);
112
113
        $paginator->setMaxPerPage(99)->shouldBeCalled();
114
        $paginator->setCurrentPage(1)->shouldBeCalled();
115
        $paginator->getCurrentPageResults()->shouldBeCalled();
116
117
        $this->get($requestConfiguration, $repository)->shouldReturn($gridView);
118
    }
119
120
    function it_creates_a_paginated_representation_for_pagerfanta_for_non_html_requests(
121
        ResourcesResolverInterface $resourcesResolver,
122
        RequestConfiguration $requestConfiguration,
123
        RepositoryInterface $repository,
124
        Pagerfanta $paginator,
125
        Request $request,
126
        ParameterBag $queryParameters,
127
        ParameterBag $requestAttributes,
128
        PagerfantaFactory $pagerfantaRepresentationFactory,
129
        PaginatedRepresentation $paginatedRepresentation
130
    ): void {
131
        $requestConfiguration->isHtmlRequest()->willReturn(false);
132
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(8);
133
134
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn($paginator);
135
136
        $requestConfiguration->getRequest()->willReturn($request);
137
        $request->query = $queryParameters;
138
        $queryParameters->has('limit')->willReturn(true);
139
        $queryParameters->getInt('limit')->willReturn(8);
140
        $queryParameters->get('page', 1)->willReturn(6);
141
        $queryParameters->all()->willReturn(['foo' => 2, 'bar' => 15]);
142
143
        $request->attributes = $requestAttributes;
144
        $requestAttributes->get('_route')->willReturn('sylius_product_index');
145
        $requestAttributes->get('_route_params')->willReturn(['slug' => 'foo-bar']);
146
147
        $paginator->setMaxPerPage(8)->shouldBeCalled();
148
        $paginator->setCurrentPage(6)->shouldBeCalled();
149
        $paginator->getCurrentPageResults()->shouldBeCalled();
150
151
        $pagerfantaRepresentationFactory->createRepresentation($paginator, Argument::type(Route::class))->willReturn($paginatedRepresentation);
152
153
        $this->get($requestConfiguration, $repository)->shouldReturn($paginatedRepresentation);
154
    }
155
156
    function it_handles_resource_grid_view(
157
        ResourcesResolverInterface $resourcesResolver,
158
        RequestConfiguration $requestConfiguration,
159
        RepositoryInterface $repository,
160
        ResourceGridView $resourceGridView,
161
        Grid $grid,
162
        Pagerfanta $paginator,
163
        Request $request,
164
        ParameterBag $queryParameters
165
    ): void {
166
        $requestConfiguration->isHtmlRequest()->willReturn(true);
167
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(5);
168
169
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn($resourceGridView);
170
        $resourceGridView->getData()->willReturn($paginator);
171
172
        $grid->getLimits()->willReturn([10, 25, 50]);
173
        $resourceGridView->getDefinition()->willReturn($grid);
174
175
        $requestConfiguration->getRequest()->willReturn($request);
176
        $request->query = $queryParameters;
177
        $queryParameters->has('limit')->willReturn(true);
178
        $queryParameters->getInt('limit')->willReturn(5);
179
        $queryParameters->get('page', 1)->willReturn(6);
180
181
        $paginator->setMaxPerPage(5)->shouldBeCalled();
182
        $paginator->setCurrentPage(6)->shouldBeCalled();
183
        $paginator->getCurrentPageResults()->shouldBeCalled();
184
185
        $this->get($requestConfiguration, $repository)->shouldReturn($resourceGridView);
186
    }
187
}
188