Completed
Push — pr-9119 ( 4ecfb3 )
by Kamil
54:28 queued 25:29
created

FlashHelperSpec::it_adds_resource_message_by_default()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 29
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 29
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 22
nc 1
nop 7
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\FlashHelperInterface;
18
use Sylius\Bundle\ResourceBundle\Controller\RequestConfiguration;
19
use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
20
use Sylius\Component\Resource\Metadata\MetadataInterface;
21
use Sylius\Component\Resource\Model\ResourceInterface;
22
use Sylius\Component\Resource\ResourceActions;
23
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
24
use Symfony\Component\HttpFoundation\Session\SessionInterface;
25
use Symfony\Component\Translation\MessageCatalogueInterface;
26
use Symfony\Component\Translation\TranslatorBagInterface;
27
use Symfony\Component\Translation\TranslatorInterface;
28
29
final class FlashHelperSpec extends ObjectBehavior
30
{
31
    function let(SessionInterface $session, TranslatorInterface $translator): void
32
    {
33
        $this->beConstructedWith($session, $translator, 'en');
34
    }
35
36
    function it_implements_flash_helper_interface(): void
37
    {
38
        $this->shouldImplement(FlashHelperInterface::class);
39
    }
40
41
    function it_adds_resource_message_by_default(
42
        SessionInterface $session,
43
        TranslatorBagInterface $translator,
44
        MessageCatalogueInterface $messageCatalogue,
45
        FlashBagInterface $flashBag,
46
        MetadataInterface $metadata,
47
        RequestConfiguration $requestConfiguration,
48
        ResourceInterface $resource
49
    ): void {
50
        $metadata->getApplicationName()->willReturn('sylius');
51
        $metadata->getHumanizedName()->willReturn('product');
52
53
        $requestConfiguration->getMetadata()->willReturn($metadata);
54
        $requestConfiguration->getFlashMessage(ResourceActions::CREATE)->willReturn('sylius.product.create');
55
56
        $translator->getCatalogue('en')->willReturn($messageCatalogue);
57
        $messageCatalogue->has('sylius.product.create', 'flashes')->willReturn(false);
58
59
        $session->getBag('flashes')->willReturn($flashBag);
60
        $flashBag->add(
61
            'success',
62
            [
63
                'message' => 'sylius.resource.create',
64
                'parameters' => ['%resource%' => 'Product'],
65
            ]
66
        )->shouldBeCalled();
67
68
        $this->addSuccessFlash($requestConfiguration, ResourceActions::CREATE, $resource);
69
    }
70
71
    function it_adds_resource_message_when_catalogue_is_unavailable_and_given_message_cannot_be_translated(
72
        SessionInterface $session,
73
        TranslatorInterface $translator,
74
        FlashBagInterface $flashBag,
75
        MetadataInterface $metadata,
76
        RequestConfiguration $requestConfiguration,
77
        ResourceInterface $resource
78
    ): void {
79
        $parameters = ['%resource%' => 'Product'];
80
81
        $metadata->getApplicationName()->willReturn('sylius');
82
        $metadata->getHumanizedName()->willReturn('product');
83
84
        $requestConfiguration->getMetadata()->willReturn($metadata);
85
        $requestConfiguration->getFlashMessage(ResourceActions::CREATE)->willReturn('sylius.product.create');
86
87
        $translator->trans('sylius.product.create', $parameters, 'flashes')->willReturn('sylius.product.create');
88
89
        $session->getBag('flashes')->willReturn($flashBag);
90
        $flashBag->add(
91
            'success',
92
            [
93
                'message' => 'sylius.resource.create',
94
                'parameters' => $parameters,
95
            ]
96
        )->shouldBeCalled();
97
98
        $this->addSuccessFlash($requestConfiguration, ResourceActions::CREATE, $resource);
99
    }
100
101
    function it_adds_resource_message_when_catalogue_is_unavailable_and_given_message_can_be_translated(
102
        SessionInterface $session,
103
        TranslatorInterface $translator,
104
        FlashBagInterface $flashBag,
105
        MetadataInterface $metadata,
106
        RequestConfiguration $requestConfiguration,
107
        ResourceInterface $resource
108
    ): void {
109
        $parameters = ['%resource%' => 'Spoon'];
110
111
        $metadata->getApplicationName()->willReturn('app');
112
        $metadata->getHumanizedName()->willReturn('spoon');
113
114
        $requestConfiguration->getMetadata()->willReturn($metadata);
115
        $requestConfiguration->getFlashMessage(ResourceActions::CREATE)
116
            ->willReturn('%resource% is the best cutlery of them all!')
117
        ;
118
119
        $translator->trans('%resource% is the best cutlery of them all!', $parameters, 'flashes')
120
            ->willReturn('Spoon is the best cutlery of them all!')
121
        ;
122
123
        $session->getBag('flashes')->willReturn($flashBag);
124
        $flashBag->add(
125
            'success',
126
            [
127
                'message' => '%resource% is the best cutlery of them all!',
128
                'parameters' => $parameters,
129
            ]
130
        )->shouldBeCalled();
131
132
        $this->addSuccessFlash($requestConfiguration, ResourceActions::CREATE, $resource);
133
    }
134
135
    function it_adds_resource_message_if_message_was_not_found_in_the_catalogue(
136
        SessionInterface $session,
137
        TranslatorBagInterface $translator,
138
        MessageCatalogueInterface $messageCatalogue,
139
        FlashBagInterface $flashBag,
140
        MetadataInterface $metadata,
141
        RequestConfiguration $requestConfiguration,
142
        ResourceInterface $resource
143
    ): void {
144
        $metadata->getApplicationName()->willReturn('sylius');
145
        $metadata->getHumanizedName()->willReturn('product');
146
147
        $requestConfiguration->getMetadata()->willReturn($metadata);
148
        $requestConfiguration->getFlashMessage(ResourceActions::CREATE)->willReturn('sylius.product.create');
149
150
        $translator->getCatalogue('en')->willReturn($messageCatalogue);
151
152
        $messageCatalogue->has('sylius.product.create', 'flashes')->willReturn(false);
153
154
        $session->getBag('flashes')->willReturn($flashBag);
155
        $flashBag->add(
156
            'success',
157
            [
158
                'message' => 'sylius.resource.create',
159
                'parameters' => ['%resource%' => 'Product'],
160
            ]
161
        )->shouldBeCalled();
162
163
        $this->addSuccessFlash($requestConfiguration, ResourceActions::CREATE, $resource);
164
    }
165
166
    function it_adds_overwritten_message(
167
        SessionInterface $session,
168
        TranslatorBagInterface $translator,
169
        MessageCatalogueInterface $messageCatalogue,
170
        FlashBagInterface $flashBag,
171
        MetadataInterface $metadata,
172
        RequestConfiguration $requestConfiguration,
173
        ResourceInterface $resource
174
    ): void {
175
        $metadata->getApplicationName()->willReturn('sylius');
176
        $metadata->getHumanizedName()->willReturn('product');
177
178
        $requestConfiguration->getMetadata()->willReturn($metadata);
179
        $requestConfiguration->getFlashMessage(ResourceActions::CREATE)->willReturn('sylius.product.create');
180
181
        $translator->getCatalogue('en')->willReturn($messageCatalogue);
182
183
        $messageCatalogue->has('sylius.product.create', 'flashes')->willReturn(true);
184
185
        $session->getBag('flashes')->willReturn($flashBag);
186
        $flashBag->add('success', 'sylius.product.create')->shouldBeCalled();
187
188
        $this->addSuccessFlash($requestConfiguration, ResourceActions::CREATE, $resource);
189
    }
190
191
    function it_adds_custom_message(
192
        SessionInterface $session,
193
        TranslatorBagInterface $translator,
194
        MessageCatalogueInterface $messageCatalogue,
195
        FlashBagInterface $flashBag,
196
        MetadataInterface $metadata,
197
        RequestConfiguration $requestConfiguration,
198
        ResourceInterface $resource
199
    ): void {
200
        $metadata->getApplicationName()->willReturn('app');
201
        $metadata->getHumanizedName()->willReturn('book');
202
203
        $requestConfiguration->getMetadata()->willReturn($metadata);
204
        $requestConfiguration->getFlashMessage('send')->willReturn('app.book.send');
205
206
        $translator->getCatalogue('en')->willReturn($messageCatalogue);
207
208
        $messageCatalogue->has('app.book.send', 'flashes')->willReturn(true);
209
210
        $session->getBag('flashes')->willReturn($flashBag);
211
        $flashBag->add('success', 'app.book.send')->shouldBeCalled();
212
213
        $this->addSuccessFlash($requestConfiguration, 'send', $resource);
214
    }
215
216
    function it_adds_message_from_event(
217
        SessionInterface $session,
218
        FlashBagInterface $flashBag,
219
        RequestConfiguration $requestConfiguration,
220
        ResourceControllerEvent $event
221
    ): void {
222
        $event->getMessage()->willReturn('sylius.channel.cannot_be_deleted');
223
        $event->getMessageType()->willReturn(ResourceControllerEvent::TYPE_WARNING);
224
        $event->getMessageParameters()->willReturn(['%name%' => 'Germany Sylius Webshop']);
225
226
        $session->getBag('flashes')->willReturn($flashBag);
227
228
        $flashBag->add(ResourceControllerEvent::TYPE_WARNING,
229
            [
230
                'message' => 'sylius.channel.cannot_be_deleted',
231
                'parameters' => ['%name%' => 'Germany Sylius Webshop'],
232
            ]
233
        )->shouldBeCalled();
234
235
        $this->addFlashFromEvent($requestConfiguration, $event);
236
    }
237
}
238