Completed
Push — 1.0-inceneev-composer-paramete... ( b90d91 )
by Kamil
51:25 queued 27:47
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
final class ResourcesCollectionProviderSpec extends ObjectBehavior
33
{
34
    function let(ResourcesResolverInterface $resourcesResolver, PagerfantaFactory $pagerfantaRepresentationFactory): void
35
    {
36
        $this->beConstructedWith($resourcesResolver, $pagerfantaRepresentationFactory);
37
    }
38
39
    function it_implements_resources_collection_provider_interface(): void
40
    {
41
        $this->shouldImplement(ResourcesCollectionProviderInterface::class);
42
    }
43
44
    function it_returns_resources_resolved_from_repository(
45
        ResourcesResolverInterface $resourcesResolver,
46
        RequestConfiguration $requestConfiguration,
47
        RepositoryInterface $repository,
48
        ResourceInterface $firstResource,
49
        ResourceInterface $secondResource
50
    ): void {
51
        $requestConfiguration->isHtmlRequest()->willReturn(true);
52
53
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn([$firstResource, $secondResource]);
54
55
        $this->get($requestConfiguration, $repository)->shouldReturn([$firstResource, $secondResource]);
56
    }
57
58
    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...
59
        ResourcesResolverInterface $resourcesResolver,
60
        RequestConfiguration $requestConfiguration,
61
        RepositoryInterface $repository,
62
        Pagerfanta $paginator,
63
        Request $request,
64
        ParameterBag $queryParameters
65
    ): void {
66
        $requestConfiguration->isHtmlRequest()->willReturn(true);
67
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(5);
68
69
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn($paginator);
70
71
        $requestConfiguration->getRequest()->willReturn($request);
72
        $request->query = $queryParameters;
73
        $queryParameters->has('limit')->willReturn(true);
74
        $queryParameters->getInt('limit')->willReturn(5);
75
        $queryParameters->get('page', 1)->willReturn(6);
76
77
        $paginator->setMaxPerPage(5)->shouldBeCalled();
78
        $paginator->setCurrentPage(6)->shouldBeCalled();
79
        $paginator->getCurrentPageResults()->shouldBeCalled();
80
81
        $this->get($requestConfiguration, $repository)->shouldReturn($paginator);
82
    }
83
84
    function it_restricts_max_pagination_limit_based_on_grid_configuration(
85
        ResourcesResolverInterface $resourcesResolver,
86
        RequestConfiguration $requestConfiguration,
87
        RepositoryInterface $repository,
88
        ResourceGridView $gridView,
89
        Grid $grid,
90
        Pagerfanta $paginator,
91
        Request $request,
92
        ParameterBag $queryParameters
93
    ): void {
94
        $requestConfiguration->isHtmlRequest()->willReturn(true);
95
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(1000);
96
97
        $grid->getLimits()->willReturn([10, 20, 99]);
98
99
        $gridView->getDefinition()->willReturn($grid);
0 ignored issues
show
Bug introduced by
The method willReturn() does not seem to exist on object<Sylius\Component\Grid\Definition\Grid>.

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...
100
        $gridView->getData()->willReturn($paginator);
101
102
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn($gridView);
103
104
        $requestConfiguration->getRequest()->willReturn($request);
105
        $request->query = $queryParameters;
106
        $queryParameters->has('limit')->willReturn(true);
107
        $queryParameters->getInt('limit')->willReturn(1000);
108
        $queryParameters->get('page', 1)->willReturn(1);
109
110
        $paginator->setMaxPerPage(99)->shouldBeCalled();
111
        $paginator->setCurrentPage(1)->shouldBeCalled();
112
        $paginator->getCurrentPageResults()->shouldBeCalled();
113
114
        $this->get($requestConfiguration, $repository)->shouldReturn($gridView);
115
    }
116
117
    function it_creates_a_paginated_representation_for_pagerfanta_for_non_html_requests(
118
        ResourcesResolverInterface $resourcesResolver,
119
        RequestConfiguration $requestConfiguration,
120
        RepositoryInterface $repository,
121
        Pagerfanta $paginator,
122
        Request $request,
123
        ParameterBag $queryParameters,
124
        ParameterBag $requestAttributes,
125
        PagerfantaFactory $pagerfantaRepresentationFactory,
126
        PaginatedRepresentation $paginatedRepresentation
127
    ): void {
128
        $requestConfiguration->isHtmlRequest()->willReturn(false);
129
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(8);
130
131
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn($paginator);
132
133
        $requestConfiguration->getRequest()->willReturn($request);
134
        $request->query = $queryParameters;
135
        $queryParameters->has('limit')->willReturn(true);
136
        $queryParameters->getInt('limit')->willReturn(8);
137
        $queryParameters->get('page', 1)->willReturn(6);
138
        $queryParameters->all()->willReturn(['foo' => 2, 'bar' => 15]);
139
140
        $request->attributes = $requestAttributes;
141
        $requestAttributes->get('_route')->willReturn('sylius_product_index');
142
        $requestAttributes->get('_route_params')->willReturn(['slug' => 'foo-bar']);
143
144
        $paginator->setMaxPerPage(8)->shouldBeCalled();
145
        $paginator->setCurrentPage(6)->shouldBeCalled();
146
        $paginator->getCurrentPageResults()->shouldBeCalled();
147
148
        $pagerfantaRepresentationFactory->createRepresentation($paginator, Argument::type(Route::class))->willReturn($paginatedRepresentation);
149
150
        $this->get($requestConfiguration, $repository)->shouldReturn($paginatedRepresentation);
151
    }
152
153
    function it_handles_resource_grid_view(
154
        ResourcesResolverInterface $resourcesResolver,
155
        RequestConfiguration $requestConfiguration,
156
        RepositoryInterface $repository,
157
        ResourceGridView $resourceGridView,
158
        Grid $grid,
159
        Pagerfanta $paginator,
160
        Request $request,
161
        ParameterBag $queryParameters
162
    ): void {
163
        $requestConfiguration->isHtmlRequest()->willReturn(true);
164
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(5);
165
166
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn($resourceGridView);
167
        $resourceGridView->getData()->willReturn($paginator);
168
169
        $grid->getLimits()->willReturn([10, 25, 50]);
170
        $resourceGridView->getDefinition()->willReturn($grid);
0 ignored issues
show
Bug introduced by
The method willReturn() does not seem to exist on object<Sylius\Component\Grid\Definition\Grid>.

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...
171
172
        $requestConfiguration->getRequest()->willReturn($request);
173
        $request->query = $queryParameters;
174
        $queryParameters->has('limit')->willReturn(true);
175
        $queryParameters->getInt('limit')->willReturn(5);
176
        $queryParameters->get('page', 1)->willReturn(6);
177
178
        $paginator->setMaxPerPage(5)->shouldBeCalled();
179
        $paginator->setCurrentPage(6)->shouldBeCalled();
180
        $paginator->getCurrentPageResults()->shouldBeCalled();
181
182
        $this->get($requestConfiguration, $repository)->shouldReturn($resourceGridView);
183
    }
184
}
185