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( |
|
|
|
|
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); |
|
|
|
|
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); |
|
|
|
|
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
|
|
|
|
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.