Completed
Push — feature/menu-types ( 831fc6...84933c )
by Nicolas
15:41
created

MenuItemUriGeneratorTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 163
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
c 1
b 0
f 0
lcom 1
cbo 4
dl 0
loc 163
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 6 1
A it_generates_basic_uri_without_parent() 0 14 1
B it_generates_uri_with_the_parents_slug() 0 37 1
A it_generates_uri_with_multiple_parents() 0 58 1
B it_generates_a_uri_if_parent_isnt_a_page() 0 28 1
1
<?php
2
3
namespace Modules\Menu\Tests;
4
5
use Modules\Menu\Services\MenuItemUriGenerator;
6
use Modules\Page\Repositories\PageRepository;
7
8
class MenuItemUriGeneratorTest extends BaseMenuTest
9
{
10
    /**
11
     * @var PageRepository
12
     */
13
    private $page;
14
    /**
15
     * @var MenuItemUriGenerator
16
     */
17
    private $menuItemUriGenerator;
18
19
    public function setUp()
20
    {
21
        parent::setUp();
22
        $this->page = app(PageRepository::class);
23
        $this->menuItemUriGenerator = app(MenuItemUriGenerator::class);
24
    }
25
26
    /** @test */
27
    public function it_generates_basic_uri_without_parent()
28
    {
29
        $this->page->create([
30
            'is_home' => 1,
31
            'template' => 'default',
32
            'en' => [
33
                'title' => 'Awesome Page',
34
                'slug' => 'awesome-page',
35
                'body' => 'My Page Body',
36
            ],
37
        ]);
38
39
        self::assertEquals('awesome-page', $this->menuItemUriGenerator->generateUri(1, '', 'en'));
40
    }
41
42
    /** @test */
43
    public function it_generates_uri_with_the_parents_slug()
44
    {
45
        $this->page->create([
46
            'is_home' => 1,
47
            'template' => 'default',
48
            'en' => [
49
                'title' => 'Awesome Page',
50
                'slug' => 'awesome-page',
51
                'body' => 'My Page Body',
52
            ],
53
        ]);
54
        $this->page->create([
55
            'is_home' => 0,
56
            'template' => 'default',
57
            'en' => [
58
                'title' => 'About',
59
                'slug' => 'about',
60
                'body' => 'My Page Body',
61
            ],
62
        ]);
63
        $menu = $this->createMenu('main', 'Main');
64
        $data = [
65
            'menu_id' => $menu->id,
66
            'position' => 0,
67
            'target' => '_self',
68
            'page_id' => 1,
69
            'en' => [
70
                'status' => 1,
71
                'title' => 'First Menu Item',
72
                'uri' => 'awesome-page',
73
            ],
74
        ];
75
        $this->menuItem->create($data);
76
77
78
        self::assertEquals('awesome-page/about', $this->menuItemUriGenerator->generateUri(2, '1', 'en'));
79
    }
80
81
    /** @test */
82
    public function it_generates_uri_with_multiple_parents()
83
    {
84
        $this->page->create([
85
            'is_home' => 1,
86
            'template' => 'default',
87
            'en' => [
88
                'title' => 'Awesome Page',
89
                'slug' => 'awesome-page',
90
                'body' => 'My Page Body',
91
            ],
92
        ]);
93
        $this->page->create([
94
            'is_home' => 0,
95
            'template' => 'default',
96
            'en' => [
97
                'title' => 'Mid Page',
98
                'slug' => 'mid-page',
99
                'body' => 'My Page Body',
100
            ],
101
        ]);
102
        $this->page->create([
103
            'is_home' => 0,
104
            'template' => 'default',
105
            'en' => [
106
                'title' => 'About',
107
                'slug' => 'about',
108
                'body' => 'My Page Body',
109
            ],
110
        ]);
111
        $menu = $this->createMenu('main', 'Main');
112
        $data = [
113
            'menu_id' => $menu->id,
114
            'position' => 0,
115
            'target' => '_self',
116
            'page_id' => 1,
117
            'en' => [
118
                'status' => 1,
119
                'title' => 'First Menu Item',
120
                'uri' => 'awesome-page',
121
            ],
122
        ];
123
        $this->menuItem->create($data);
124
        $data = [
125
            'menu_id' => $menu->id,
126
            'position' => 0,
127
            'target' => '_self',
128
            'page_id' => 2,
129
            'parent_id' => 1,
130
            'en' => [
131
                'status' => 1,
132
                'title' => 'Second Menu Item',
133
                'uri' => 'awesome-page/mid-page',
134
            ],
135
        ];
136
        $this->menuItem->create($data);
137
138
        self::assertEquals('awesome-page/mid-page/about', $this->menuItemUriGenerator->generateUri(3, '2', 'en'));
139
    }
140
141
    /** @test */
142
    public function it_generates_a_uri_if_parent_isnt_a_page()
143
    {
144
        $this->page->create([
145
            'is_home' => 0,
146
            'template' => 'default',
147
            'en' => [
148
                'title' => 'About',
149
                'slug' => 'about',
150
                'body' => 'My Page Body',
151
            ],
152
        ]);
153
154
        $menu = $this->createMenu('main', 'Main');
155
        $data = [
156
            'menu_id' => $menu->id,
157
            'position' => 0,
158
            'target' => '_self',
159
            'page_id' => null,
160
            'en' => [
161
                'status' => 1,
162
                'title' => 'First Menu Item',
163
                'uri' => 'awesome-page',
164
            ],
165
        ];
166
        $this->menuItem->create($data);
167
168
        self::assertEquals('awesome-page/about', $this->menuItemUriGenerator->generateUri(1, '1', 'en'));
169
    }
170
}
171