Completed
Push — 1.0 ( ef9da1...11182f )
by Kamil
62:43 queued 31:38
created

it_uses_a_custom_method_if_configured()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 9
nc 1
nop 3
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 PhpSpec\ObjectBehavior;
17
use Sylius\Bundle\ResourceBundle\Controller\RequestConfiguration;
18
use Sylius\Bundle\ResourceBundle\Controller\SingleResourceProviderInterface;
19
use Sylius\Component\Resource\Model\ResourceInterface;
20
use Sylius\Component\Resource\Repository\RepositoryInterface;
21
use Symfony\Component\HttpFoundation\ParameterBag;
22
use Symfony\Component\HttpFoundation\Request;
23
24
final class SingleResourceProviderSpec extends ObjectBehavior
25
{
26
    function it_implements_single_resource_provider_interface(): void
27
    {
28
        $this->shouldImplement(SingleResourceProviderInterface::class);
29
    }
30
31
    function it_looks_for_specific_resource_with_id_by_default(
32
        RequestConfiguration $requestConfiguration,
33
        Request $request,
34
        ParameterBag $requestAttributes,
35
        RepositoryInterface $repository
36
    ): void {
37
        $requestConfiguration->getCriteria()->willReturn([]);
38
        $requestConfiguration->getRepositoryMethod()->willReturn(null);
39
        $requestConfiguration->getRequest()->willReturn($request);
40
        $request->attributes = $requestAttributes;
41
        $requestAttributes->has('id')->willReturn(true);
42
        $requestAttributes->has('slug')->willReturn(false);
43
        $requestAttributes->get('id')->willReturn(5);
44
45
        $repository->find(5)->willReturn(null);
46
47
        $this->get($requestConfiguration, $repository)->shouldReturn(null);
48
    }
49
50
    function it_can_find_specific_resource_with_id_by_default(
51
        RequestConfiguration $requestConfiguration,
52
        Request $request,
53
        ParameterBag $requestAttributes,
54
        RepositoryInterface $repository,
55
        ResourceInterface $resource
56
    ): void {
57
        $requestConfiguration->getCriteria()->willReturn([]);
58
        $requestConfiguration->getRepositoryMethod()->willReturn(null);
59
        $requestConfiguration->getRequest()->willReturn($request);
60
        $request->attributes = $requestAttributes;
61
        $requestAttributes->has('id')->willReturn(true);
62
        $requestAttributes->has('slug')->willReturn(false);
63
        $requestAttributes->get('id')->willReturn(3);
64
65
        $repository->find(3)->willReturn($resource);
66
67
        $this->get($requestConfiguration, $repository)->shouldReturn($resource);
68
    }
69
70
    function it_can_find_specific_resource_with_slug_by_default(
71
        RequestConfiguration $requestConfiguration,
72
        Request $request,
73
        ParameterBag $requestAttributes,
74
        RepositoryInterface $repository,
75
        ResourceInterface $resource
76
    ): void {
77
        $requestConfiguration->getCriteria()->willReturn([]);
78
        $requestConfiguration->getRepositoryMethod()->willReturn(null);
79
        $requestConfiguration->getRequest()->willReturn($request);
80
        $request->attributes = $requestAttributes;
81
        $requestAttributes->has('id')->willReturn(false);
82
        $requestAttributes->has('slug')->willReturn(true);
83
        $requestAttributes->get('slug')->willReturn('the-most-awesome-hat');
84
85
        $repository->findOneBy(['slug' => 'the-most-awesome-hat'])->willReturn($resource);
86
87
        $this->get($requestConfiguration, $repository)->shouldReturn($resource);
88
    }
89
90
    function it_can_find_specific_resource_with_custom_criteria(
91
        RequestConfiguration $requestConfiguration,
92
        Request $request,
93
        ParameterBag $requestAttributes,
94
        RepositoryInterface $repository,
95
        ResourceInterface $resource
96
    ): void {
97
        $requestConfiguration->getCriteria()->willReturn(['request-configuration-criteria' => '1']);
98
        $requestConfiguration->getRepositoryMethod()->willReturn(null);
99
        $requestConfiguration->getRequest()->willReturn($request);
100
        $request->attributes = $requestAttributes;
101
        $requestAttributes->has('id')->willReturn(false);
102
        $requestAttributes->has('slug')->willReturn(false);
103
104
        $repository->findOneBy(['request-configuration-criteria' => '1'])->willReturn($resource);
105
106
        $this->get($requestConfiguration, $repository)->shouldReturn($resource);
107
    }
108
109
    function it_can_find_specific_resource_with_merged_custom_criteria(
110
        RequestConfiguration $requestConfiguration,
111
        Request $request,
112
        ParameterBag $requestAttributes,
113
        RepositoryInterface $repository,
114
        ResourceInterface $resource
115
    ): void {
116
        $requestConfiguration->getCriteria()->willReturn(['request-configuration-criteria' => '1']);
117
        $requestConfiguration->getRepositoryMethod()->willReturn(null);
118
        $requestConfiguration->getRequest()->willReturn($request);
119
        $request->attributes = $requestAttributes;
120
        $requestAttributes->has('id')->willReturn(false);
121
        $requestAttributes->has('slug')->willReturn(true);
122
        $requestAttributes->get('slug')->willReturn('banana');
123
124
        $repository->findOneBy(['slug' => 'banana', 'request-configuration-criteria' => '1'])->willReturn($resource);
125
126
        $this->get($requestConfiguration, $repository)->shouldReturn($resource);
127
    }
128
129
    function it_can_find_specific_resource_with_merged_custom_criteria_overwriting_the_attributes(
130
        RequestConfiguration $requestConfiguration,
131
        Request $request,
132
        ParameterBag $requestAttributes,
133
        RepositoryInterface $repository,
134
        ResourceInterface $resource
135
    ): void {
136
        $requestConfiguration->getCriteria()->willReturn(['id' => 5]);
137
        $requestConfiguration->getRepositoryMethod()->willReturn(null);
138
        $requestConfiguration->getRequest()->willReturn($request);
139
        $request->attributes = $requestAttributes;
140
        $requestAttributes->has('id')->willReturn(false);
141
        $requestAttributes->has('slug')->willReturn(false);
142
143
        $repository->findOneBy(['id' => 5])->willReturn($resource);
144
145
        $this->get($requestConfiguration, $repository)->shouldReturn($resource);
146
    }
147
148
    function it_uses_a_custom_method_if_configured(
149
        RequestConfiguration $requestConfiguration,
150
        RepositoryInterface $repository,
151
        ResourceInterface $resource
152
    ): void {
153
        $requestConfiguration->getRepositoryMethod()->willReturn('findAll');
154
        $requestConfiguration->getRepositoryArguments()->willReturn(['foo']);
155
156
        $repository->findAll('foo')->willReturn($resource);
157
158
        $this->get($requestConfiguration, $repository)->shouldReturn($resource);
159
    }
160
}
161