Completed
Push — locale-in-url ( b918e2...821ef5 )
by Kamil
48:02 queued 26:12
created

it_handles_Pagerfanta()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 24
rs 8.9713
c 0
b 0
f 0
cc 1
eloc 18
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
namespace spec\Sylius\Bundle\ResourceBundle\Controller;
13
14
use Hateoas\Configuration\Route;
15
use Hateoas\Representation\Factory\PagerfantaFactory;
16
use Hateoas\Representation\PaginatedRepresentation;
17
use Pagerfanta\Pagerfanta;
18
use PhpSpec\ObjectBehavior;
19
use Prophecy\Argument;
20
use Sylius\Bundle\ResourceBundle\Controller\RequestConfiguration;
21
use Sylius\Bundle\ResourceBundle\Controller\ResourcesCollectionProvider;
22
use Sylius\Bundle\ResourceBundle\Controller\ResourcesCollectionProviderInterface;
23
use Sylius\Bundle\ResourceBundle\Controller\ResourcesResolverInterface;
24
use Sylius\Bundle\ResourceBundle\Grid\View\ResourceGridView;
25
use Sylius\Component\Grid\Definition\Grid;
26
use Sylius\Component\Resource\Model\ResourceInterface;
27
use Sylius\Component\Resource\Repository\RepositoryInterface;
28
use Symfony\Component\HttpFoundation\ParameterBag;
29
use Symfony\Component\HttpFoundation\Request;
30
31
/**
32
 * @author Paweł Jędrzejewski <[email protected]>
33
 */
34
final class ResourcesCollectionProviderSpec extends ObjectBehavior
35
{
36
    function let(ResourcesResolverInterface $resourcesResolver, PagerfantaFactory $pagerfantaRepresentationFactory)
0 ignored issues
show
Comprehensibility Naming introduced by
The variable name $pagerfantaRepresentationFactory exceeds the maximum configured length of 20.

Very long variable names usually make code harder to read. It is therefore recommended not to make variable names too verbose.

Loading history...
37
    {
38
        $this->beConstructedWith($resourcesResolver, $pagerfantaRepresentationFactory);
39
    }
40
41
    function it_is_initializable()
42
    {
43
        $this->shouldHaveType(ResourcesCollectionProvider::class);
44
    }
45
46
    function it_implements_resources_collection_provider_interface()
47
    {
48
        $this->shouldImplement(ResourcesCollectionProviderInterface::class);
49
    }
50
51
    function it_returns_resources_resolved_from_repository(
52
        ResourcesResolverInterface $resourcesResolver,
53
        RequestConfiguration $requestConfiguration,
54
        RepositoryInterface $repository,
55
        ResourceInterface $firstResource,
56
        ResourceInterface $secondResource
57
    ) {
58
        $requestConfiguration->isHtmlRequest()->willReturn(true);
59
60
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn([$firstResource, $secondResource]);
61
62
        $this->get($requestConfiguration, $repository)->shouldReturn([$firstResource, $secondResource]);
63
    }
64
65
    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...
66
        ResourcesResolverInterface $resourcesResolver,
67
        RequestConfiguration $requestConfiguration,
68
        RepositoryInterface $repository,
69
        Pagerfanta $paginator,
70
        Request $request,
71
        ParameterBag $queryParameters
72
    ) {
73
        $requestConfiguration->isHtmlRequest()->willReturn(true);
74
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(5);
75
76
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn($paginator);
77
78
        $requestConfiguration->getRequest()->willReturn($request);
79
        $request->query = $queryParameters;
80
        $queryParameters->get('limit', 5)->willReturn(5);
81
        $queryParameters->get('page', 1)->willReturn(6);
82
83
        $paginator->setMaxPerPage(5)->shouldBeCalled();
84
        $paginator->setCurrentPage(6)->shouldBeCalled();
85
        $paginator->getCurrentPageResults()->shouldBeCalled();
86
87
        $this->get($requestConfiguration, $repository)->shouldReturn($paginator);
88
    }
89
90
    function it_creates_a_paginated_representation_for_pagerfanta_for_non_html_requests(
91
        ResourcesResolverInterface $resourcesResolver,
92
        RequestConfiguration $requestConfiguration,
93
        RepositoryInterface $repository,
94
        Pagerfanta $paginator,
95
        Request $request,
96
        ParameterBag $queryParameters,
97
        ParameterBag $requestAttributes,
98
        PagerfantaFactory $pagerfantaRepresentationFactory,
0 ignored issues
show
Comprehensibility Naming introduced by
The variable name $pagerfantaRepresentationFactory exceeds the maximum configured length of 20.

Very long variable names usually make code harder to read. It is therefore recommended not to make variable names too verbose.

Loading history...
99
        PaginatedRepresentation $paginatedRepresentation
0 ignored issues
show
Comprehensibility Naming introduced by
The variable name $paginatedRepresentation exceeds the maximum configured length of 20.

Very long variable names usually make code harder to read. It is therefore recommended not to make variable names too verbose.

Loading history...
100
    ) {
101
        $requestConfiguration->isHtmlRequest()->willReturn(false);
102
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(8);
103
104
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn($paginator);
105
106
        $requestConfiguration->getRequest()->willReturn($request);
107
        $request->query = $queryParameters;
108
        $queryParameters->get('limit', 8)->willReturn(8);
109
        $queryParameters->get('page', 1)->willReturn(6);
110
        $queryParameters->all()->willReturn(['foo' => 2, 'bar' => 15]);
111
112
        $request->attributes = $requestAttributes;
113
        $requestAttributes->get('_route')->willReturn('sylius_product_index');
114
        $requestAttributes->get('_route_params')->willReturn(['slug' => 'foo-bar']);
115
116
        $paginator->setMaxPerPage(8)->shouldBeCalled();
117
        $paginator->setCurrentPage(6)->shouldBeCalled();
118
        $paginator->getCurrentPageResults()->shouldBeCalled();
119
120
        $pagerfantaRepresentationFactory->createRepresentation($paginator, Argument::type(Route::class))->willReturn($paginatedRepresentation);
121
122
        $this->get($requestConfiguration, $repository)->shouldReturn($paginatedRepresentation);
123
    }
124
125
    function it_handles_resource_grid_view(
126
        ResourcesResolverInterface $resourcesResolver,
127
        RequestConfiguration $requestConfiguration,
128
        RepositoryInterface $repository,
129
        ResourceGridView $resourceGridView,
130
        Grid $grid,
131
        Pagerfanta $paginator,
132
        Request $request,
133
        ParameterBag $queryParameters
134
    ) {
135
        $requestConfiguration->isHtmlRequest()->willReturn(true);
136
        $requestConfiguration->getPaginationMaxPerPage()->willReturn(5);
137
138
        $resourcesResolver->getResources($requestConfiguration, $repository)->willReturn($resourceGridView);
139
        $resourceGridView->getData()->willReturn($paginator);
140
141
        $grid->getLimits()->willReturn([10, 25, 50]);
142
        $resourceGridView->getDefinition()->willReturn($grid);
143
144
        $requestConfiguration->getRequest()->willReturn($request);
145
        $request->query = $queryParameters;
146
        $queryParameters->get('limit', 10)->willReturn(5);
147
        $queryParameters->get('page', 1)->willReturn(6);
148
149
        $paginator->setMaxPerPage(5)->shouldBeCalled();
150
        $paginator->setCurrentPage(6)->shouldBeCalled();
151
        $paginator->getCurrentPageResults()->shouldBeCalled();
152
153
        $this->get($requestConfiguration, $repository)->shouldReturn($resourceGridView);
154
    }
155
}
156