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

CustomerShowMenuBuilderSpec::let()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 2
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\AdminBundle\Menu;
13
14
use Knp\Menu\FactoryInterface;
15
use Knp\Menu\ItemInterface;
16
use PhpSpec\ObjectBehavior;
17
use Prophecy\Argument;
18
use Sylius\Bundle\AdminBundle\Menu\CustomerShowMenuBuilder;
19
use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent;
20
use Sylius\Component\Core\Model\CustomerInterface;
21
use Sylius\Component\User\Model\UserInterface;
22
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
23
24
/**
25
 * @author Grzegorz Sadowski <[email protected]>
26
 */
27
final class CustomerShowMenuBuilderSpec extends ObjectBehavior
28
{
29
    function let(
30
        FactoryInterface $factory,
31
        EventDispatcherInterface $eventDispatcher
32
    ) {
33
        $this->beConstructedWith($factory, $eventDispatcher);
34
    }
35
36
    function it_is_initializable()
37
    {
38
        $this->shouldHaveType(CustomerShowMenuBuilder::class);
39
    }
40
41
    function it_creates_a_customer_show_menu_for_customer_with_user(
42
        FactoryInterface $factory,
43
        EventDispatcherInterface $eventDispatcher,
44
        ItemInterface $menu,
45
        CustomerInterface $customer,
46
        UserInterface $user
47
    ) {
48
        $factory->createItem('root')->willReturn($menu);
49
50
        $customer->getId()->willReturn(7);
51
        $customer->getUser()->willReturn($user);
52
        $user->getId()->willReturn(4);
53
54
        $menu->setExtra('column_id', 'actions')->shouldBeCalled()->willReturn($menu);
55
56
        $menu
57
            ->addChild('update', [
58
                'route' => 'sylius_admin_customer_update',
59
                'routeParameters' => ['id' => 7]
60
            ])
61
            ->shouldBeCalled()
62
            ->willReturn($menu)
63
        ;
64
        $menu->setAttribute('type', 'edit')->shouldBeCalled()->willReturn($menu);
65
        $menu->setLabel('sylius.ui.edit')->shouldBeCalled()->willReturn($menu);
66
67
        $menu
68
            ->addChild('order_index', [
69
                'route' => 'sylius_admin_customer_order_index',
70
                'routeParameters' => ['id' => 7]
71
            ])
72
            ->shouldBeCalled()
73
            ->willReturn($menu)
74
        ;
75
        $menu->setAttribute('type', 'show')->shouldBeCalled()->willReturn($menu);
76
        $menu->setLabel('sylius.ui.show_orders')->shouldBeCalled()->willReturn($menu);
77
78
        $menu
79
            ->addChild('user_delete', [
80
                'route' => 'sylius_admin_shop_user_delete',
81
                'routeParameters' => ['id' => 4]
82
            ])
83
            ->shouldBeCalled()
84
            ->willReturn($menu)
85
        ;
86
        $menu->setAttribute('type', 'delete')->shouldBeCalled()->willReturn($menu);
87
        $menu->setAttribute('resource_id', 7)->shouldBeCalled()->willReturn($menu);
88
        $menu->setLabel('sylius.ui.delete')->shouldBeCalled()->willReturn($menu);
89
90
        $eventDispatcher
91
            ->dispatch('sylius.menu.admin.customer.show', Argument::type(MenuBuilderEvent::class))
92
            ->shouldBeCalled()
93
        ;
94
95
        $this->createMenu(['customer' => $customer])->shouldReturn($menu);
96
    }
97
98
    function it_creates_a_customer_show_menu_for_customer_without_user(
99
        FactoryInterface $factory,
100
        EventDispatcherInterface $eventDispatcher,
101
        ItemInterface $menu,
102
        CustomerInterface $customer
103
    ) {
104
        $factory->createItem('root')->willReturn($menu);
105
106
        $customer->getId()->willReturn(7);
107
        $customer->getUser()->willReturn(null);
108
109
        $menu->setExtra('column_id', 'no-account')->shouldBeCalled()->willReturn($menu);
110
111
        $menu
112
            ->addChild('order_index', [
113
                'route' => 'sylius_admin_customer_order_index',
114
                'routeParameters' => ['id' => 7]
115
            ])
116
            ->shouldBeCalled()
117
            ->willReturn($menu)
118
        ;
119
        $menu->setAttribute('type', 'show')->shouldBeCalled()->willReturn($menu);
120
        $menu->setLabel('sylius.ui.show_orders')->shouldBeCalled()->willReturn($menu);
121
122
        $eventDispatcher
123
            ->dispatch('sylius.menu.admin.customer.show', Argument::type(MenuBuilderEvent::class))
124
            ->shouldBeCalled()
125
        ;
126
127
        $this->createMenu(['customer' => $customer])->shouldReturn($menu);
128
    }
129
130
    function it_returns_an_empty_customer_show_menu_when_there_is_no_customer_in_options(
131
        FactoryInterface $factory,
132
        ItemInterface $menu
133
    ) {
134
135
        $factory->createItem('root')->willReturn($menu);
136
137
        $this->createMenu([])->shouldReturn($menu);
138
    }
139
}
140