MenuOrdenerTest::setUp()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 6
rs 9.4286
cc 1
eloc 4
nc 1
nop 0
1
<?php namespace Modules\Menu\Tests;
2
3
class MenuOrdenerTest extends BaseMenuTest
4
{
5
    /**
6
     * @var \Modules\Menu\Services\MenuOrdener
7
     */
8
    protected $menuOrdener;
9
10
    public function setUp()
11
    {
12
        parent::setUp();
13
        $this->createMenu('main', 'Main Menu');
14
        $this->menuOrdener = app('Modules\Menu\Services\MenuOrdener');
15
    }
16
17
    /** @test */
18
    public function it_makes_item_child_of()
19
    {
20
        // Prepare
21
        $menu = $this->createMenu('main', 'Main Menu');
22
        $menuItem1 = $this->createMenuItemForMenu($menu->id, 1);
23
        $menuItem2 = $this->createMenuItemForMenu($menu->id, 2);
24
        $request = [
25
            1 => [
26
                'id' => $menuItem1->id,
27
                'children' => [
28
                    0 => [
29
                        'id' => $menuItem2->id,
30
                    ],
31
                ],
32
            ],
33
        ];
34
        $request = json_encode($request);
35
36
        // Run
37
        $this->menuOrdener->handle($request);
38
39
        // Assert
40
        $child = $this->menuItem->find($menuItem2->id);
41
        $this->assertEquals($menuItem1->id, $child->parent_id);
42
    }
43
44
    /** @test */
45
    public function it_makes_items_child_of_recursively()
46
    {
47
        // Prepare
48
        $menu = $this->createMenu('main', 'Main Menu');
49
        $menuItem1 = $this->createMenuItemForMenu($menu->id, 0);
50
        $menuItem2 = $this->createMenuItemForMenu($menu->id, 0, $menuItem1->id);
51
        $menuItem3 = $this->createMenuItemForMenu($menu->id, 1, $menuItem1->id);
52
        $request = [
53
            1 => [
54
                'id' => $menuItem1->id,
55
                'children' => [
56
                    0 => [
57
                        'id' => $menuItem2->id,
58
                        'children' => [
59
                            0 => [
60
                                'id' => $menuItem3->id,
61
                            ],
62
                        ],
63
                    ],
64
                ],
65
            ],
66
        ];
67
        $request = json_encode($request);
68
69
        // Run
70
        $this->menuOrdener->handle($request);
71
72
        // Assert
73
        $child = $this->menuItem->find($menuItem2->id);
74
        $this->assertEquals($menuItem1->id, $child->parent_id);
75
        $child2 = $this->menuItem->find($menuItem3->id);
76
        $this->assertEquals($menuItem2->id, $child2->parent_id);
77
    }
78
79
    /** @test */
80
    public function it_reorders_items()
81
    {
82
        // Prepare
83
        $menu = $this->createMenu('main', 'Main Menu');
84
        $menuItem1 = $this->createMenuItemForMenu($menu->id, 1);
85
        $menuItem2 = $this->createMenuItemForMenu($menu->id, 2);
86
87
        $request = [
88
            1 => [
89
                'id' => $menuItem2->id,
90
            ],
91
            2 => [
92
                'id' => $menuItem1->id,
93
            ],
94
        ];
95
        $request = json_encode($request);
96
97
        // Run
98
        $this->menuOrdener->handle($request);
99
100
        // Assert
101
        $item1 = $this->menuItem->find($menuItem1->id);
102
        $this->assertEquals(2, $item1->position);
103
        $item2 = $this->menuItem->find($menuItem2->id);
104
        $this->assertEquals(1, $item2->position);
105
    }
106
107
    /** @test */
108
    public function it_moves_items_to_root()
109
    {
110
        // Prepare
111
        $menu = $this->createMenu('main', 'Main Menu');
112
        $menuItem1 = $this->createMenuItemForMenu($menu->id, 0);
113
        $menuItem2 = $this->createMenuItemForMenu($menu->id, 1, $menuItem1->id);
114
115
        $request = [
116
            0 => [
117
                'id' => $menuItem1->id,
118
            ],
119
            1 => [
120
                'id' => $menuItem2->id,
121
            ],
122
        ];
123
        $request = json_encode($request);
124
125
        // Run
126
        $this->menuOrdener->handle($request);
127
128
        // Assert
129
        $item1 = $this->menuItem->find($menuItem1->id);
130
        $this->assertEquals(null, $item1->parent_id);
131
        $item2 = $this->menuItem->find($menuItem2->id);
132
        $this->assertEquals(null, $item2->parent_id);
133
    }
134
}
135