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