Passed
Branch master (1e39e8)
by Caen
03:01
created

CanBeInNavigationTest   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 163
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 57
c 2
b 0
f 0
dl 0
loc 163
rs 10
wmc 24
1
<?php
2
3
namespace Hyde\Framework\Testing\Feature\Concerns;
4
5
use Hyde\Framework\Models\Pages\DocumentationPage;
6
use Hyde\Framework\Models\Pages\MarkdownPage;
7
use Hyde\Framework\Models\Pages\MarkdownPost;
8
use Hyde\Testing\TestCase;
9
10
/**
11
 * @covers \Hyde\Framework\Concerns\CanBeInNavigation
12
 */
13
class CanBeInNavigationTest extends TestCase
14
{
15
    public function test_show_in_navigation_returns_false_for_markdown_post()
16
    {
17
        $page = $this->mock(MarkdownPost::class)->makePartial();
18
19
        $this->assertFalse($page->showInNavigation());
20
    }
21
22
    public function test_show_in_navigation_returns_true_for_documentation_page_if_slug_is_index()
23
    {
24
        $page = $this->mock(DocumentationPage::class)->makePartial();
25
        $page->identifier = 'index';
26
27
        $this->assertTrue($page->showInNavigation());
28
    }
29
30
    public function test_show_in_navigation_returns_false_for_documentation_page_if_slug_is_not_index()
31
    {
32
        $page = $this->mock(DocumentationPage::class)->makePartial();
33
        $page->identifier = 'not-index';
34
35
        $this->assertFalse($page->showInNavigation());
36
    }
37
38
    public function test_show_in_navigation_returns_false_for_abstract_markdown_page_if_matter_navigation_hidden_is_true()
39
    {
40
        $page = MarkdownPage::make('foo', ['navigation.hidden' => true]);
41
42
        $this->assertFalse($page->showInNavigation());
43
    }
44
45
    public function test_show_in_navigation_returns_true_for_abstract_markdown_page_if_matter_navigation_hidden_is_false()
46
    {
47
        $page = MarkdownPage::make('foo', ['navigation.hidden' => false]);
48
49
        $this->assertTrue($page->showInNavigation());
50
    }
51
52
    public function test_show_in_navigation_returns_true_for_abstract_markdown_page_if_matter_navigation_hidden_is_not_set()
53
    {
54
        $page = MarkdownPage::make('foo', ['navigation.hidden' => null]);
55
56
        $this->assertTrue($page->showInNavigation());
57
    }
58
59
    public function test_show_in_navigation_returns_false_if_slug_is_present_in_config_hyde_navigation_exclude()
60
    {
61
        $page = MarkdownPage::make('foo');
62
63
        $this->assertTrue($page->showInNavigation());
64
65
        config(['hyde.navigation.exclude' => ['foo']]);
66
        $this->assertFalse($page->showInNavigation());
67
    }
68
69
    public function test_show_in_navigation_returns_false_if_slug_is_404()
70
    {
71
        $page = MarkdownPage::make('404');
72
        $this->assertFalse($page->showInNavigation());
73
    }
74
75
    public function test_show_in_navigation_defaults_to_true_if_all_checks_pass()
76
    {
77
        $page = MarkdownPage::make('foo');
78
        $this->assertTrue($page->showInNavigation());
79
    }
80
81
    public function test_navigation_menu_priority_returns_front_matter_value_of_navigation_priority_if_abstract_markdown_page_and_not_null()
82
    {
83
        $page = MarkdownPage::make('foo', ['navigation.priority' => 1]);
84
        $this->assertEquals(1, $page->navigationMenuPriority());
85
    }
86
87
    public function test_navigation_menu_priority_returns_specified_config_value_if_slug_exists_in_config_hyde_navigation_order()
88
    {
89
        $page = MarkdownPage::make('foo');
90
        $this->assertEquals(999, $page->navigationMenuPriority());
91
92
        config(['hyde.navigation.order' => ['foo' => 1]]);
93
        $this->assertEquals(1, $page->navigationMenuPriority());
94
    }
95
96
    public function test_navigation_menu_priority_gives_precedence_to_front_matter_over_config_hyde_navigation_order()
97
    {
98
        $page = MarkdownPage::make('foo', ['navigation.priority' => 1]);
99
100
        $this->assertEquals(1, $page->navigationMenuPriority());
101
102
        config(['hyde.navigation.order' => ['foo' => 2]]);
103
        $this->assertEquals(1, $page->navigationMenuPriority());
104
    }
105
106
    public function test_navigation_menu_priority_returns_100_for_documentation_page()
107
    {
108
        $page = DocumentationPage::make('foo');
109
        $this->assertEquals(100, $page->navigationMenuPriority());
110
    }
111
112
    public function test_navigation_menu_priority_returns_0_if_slug_is_index()
113
    {
114
        $page = MarkdownPage::make('index');
115
        $this->assertEquals(0, $page->navigationMenuPriority());
116
    }
117
118
    public function test_navigation_menu_priority_does_not_return_0_if_slug_is_index_but_model_is_documentation_page()
119
    {
120
        $page = DocumentationPage::make('index');
121
        $this->assertEquals(100, $page->navigationMenuPriority());
122
    }
123
124
    public function test_navigation_menu_priority_returns_10_if_slug_is_posts()
125
    {
126
        $page = MarkdownPage::make('posts');
127
        $this->assertEquals(10, $page->navigationMenuPriority());
128
    }
129
130
    public function test_navigation_menu_priority_defaults_to_999_if_no_other_conditions_are_met()
131
    {
132
        $page = MarkdownPage::make('foo');
133
        $this->assertEquals(999, $page->navigationMenuPriority());
134
    }
135
136
    public function test_navigation_menu_title_returns_navigation_title_matter_if_set()
137
    {
138
        $page = MarkdownPage::make('foo', ['navigation.title' => 'foo']);
139
        $this->assertEquals('foo', $page->navigationMenuTitle());
140
    }
141
142
    public function test_navigation_menu_title_returns_title_matter_if_set()
143
    {
144
        $page = MarkdownPage::make('foo', ['title' => 'foo']);
145
        $this->assertEquals('foo', $page->navigationMenuTitle());
146
    }
147
148
    public function test_navigation_menu_title_navigation_title_has_precedence_over_title()
149
    {
150
        $page = MarkdownPage::make('foo', ['title' => 'foo', 'navigation.title' => 'bar']);
151
        $this->assertEquals('bar', $page->navigationMenuTitle());
152
    }
153
154
    public function test_navigation_menu_title_returns_docs_if_slug_is_index_and_model_is_documentation_page()
155
    {
156
        $page = DocumentationPage::make('index');
157
        $this->assertEquals('Docs', $page->navigationMenuTitle());
158
    }
159
160
    public function test_navigation_menu_title_returns_home_if_slug_is_index_and_model_is_not_documentation_page()
161
    {
162
        $page = MarkdownPage::make('index');
163
        $this->assertEquals('Home', $page->navigationMenuTitle());
164
    }
165
166
    public function test_navigation_menu_title_returns_title_if_title_is_set_and_not_empty()
167
    {
168
        $page = MarkdownPage::make('bar', ['title' => 'foo']);
169
        $this->assertEquals('foo', $page->navigationMenuTitle());
170
    }
171
172
    public function test_navigation_menu_title_falls_back_to_hyde_make_title_from_slug()
173
    {
174
        $page = MarkdownPage::make('foo');
175
        $this->assertEquals('Foo', $page->navigationMenuTitle());
176
    }
177
}
178