Completed
Push — scalar-types/resource ( 4814fd )
by Kamil
23:02
created

SingleResourceProviderSpec::it_is_initializable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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