Passed
Push — master ( f02495...4136df )
by Alexander
01:44
created

DropdownTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 144
Duplicated Lines 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 105
dl 0
loc 144
rs 10
c 1
b 1
f 0
wmc 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Yii\Bootstrap4\Tests;
6
7
use Yiisoft\Yii\Bootstrap4\Dropdown;
8
9
/**
10
 * Tests for Dropdown widget.
11
 *
12
 * DropdownTest.
13
 */
14
final class DropdownTest extends TestCase
15
{
16
    public function testIds(): void
17
    {
18
        Dropdown::counter(0);
19
20
        $html = Dropdown::widget()
21
            ->items([
22
                [
23
                    'label' => 'Page1'
24
                ],
25
                [
26
                    'label' => 'Dropdown1',
27
                    'url' => '#test',
28
                    'items' => [
29
                        ['label' => 'Page2'],
30
                        ['label' => 'Page3'],
31
                    ]
32
                ],
33
                [
34
                    'label' => 'Dropdown2',
35
                    'visible' => false,
36
                    'items' => [
37
                        ['label' => 'Page4', 'content' => 'Page4'],
38
                        ['label' => 'Page5', 'content' => 'Page5'],
39
                    ]
40
                ]
41
            ])
42
            ->render();
43
44
        $expected = <<<EXPECTED
45
<div id="w0-dropdown" class="dropdown-menu"><h6 class="dropdown-header">Page1</h6>
46
<div class="dropdown" aria-expanded="false">
47
<a class="dropdown-item dropdown-toggle" href="#test" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" role="button">Dropdown1</a>
48
<div id="w1-dropdown" class="dropdown-submenu dropdown-menu"><h6 class="dropdown-header">Page2</h6>
49
<h6 class="dropdown-header">Page3</h6></div>
50
</div></div>
51
EXPECTED;
52
53
        $this->assertEqualsWithoutLE($expected, $html);
54
    }
55
56
    public function testSubMenuOptions(): void
57
    {
58
        Dropdown::counter(0);
59
60
        $html = Dropdown::widget()
61
            ->submenuOptions(['class' => 'submenu-list'])
62
            ->items([
63
                [
64
                    'label' => 'Dropdown1',
65
                    'items' => [
66
                        ['label' => 'Page1', 'content' => 'Page2'],
67
                        ['label' => 'Page2', 'content' => 'Page3'],
68
                    ]
69
                ],
70
                '-',
71
                [
72
                    'label' => 'Dropdown2',
73
                    'items' => [
74
                        ['label' => 'Page3', 'content' => 'Page4'],
75
                        ['label' => 'Page4', 'content' => 'Page5'],
76
                    ],
77
                    'submenuOptions' => [
78
                        'class' => 'submenu-override',
79
                    ],
80
                ]
81
            ])
82
            ->render();
83
84
        $expected = <<<EXPECTED
85
<div id="w0-dropdown" class="dropdown-menu"><div class="dropdown" aria-expanded="false">
86
<a class="dropdown-item dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" role="button">Dropdown1</a>
87
<div id="w1-dropdown" class="submenu-list dropdown-submenu dropdown-menu"><h6 class="dropdown-header">Page1</h6>
88
<h6 class="dropdown-header">Page2</h6></div>
89
</div>
90
<div class="dropdown-divider"></div>
91
<div class="dropdown" aria-expanded="false">
92
<a class="dropdown-item dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" role="button">Dropdown2</a>
93
<div id="w2-dropdown" class="submenu-override dropdown-submenu dropdown-menu"><h6 class="dropdown-header">Page3</h6>
94
<h6 class="dropdown-header">Page4</h6></div>
95
</div></div>
96
EXPECTED;
97
98
        $this->assertEqualsWithoutLE($expected, $html);
99
    }
100
101
    public function testForms(): void
102
    {
103
        Dropdown::counter(0);
104
105
        $form = <<<HTML
106
<form class="px-4 py-3">
107
<div class="form-group">
108
<label for="exampleDropdownFormEmail1">Email address</label>
109
<input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="[email protected]">
110
</div>
111
<div class="form-group">
112
<label for="exampleDropdownFormPassword1">Password</label>
113
<input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
114
</div>
115
<div class="form-check">
116
<input type="checkbox" class="form-check-input" id="dropdownCheck">
117
<label class="form-check-label" for="dropdownCheck">
118
Remember me
119
</label>
120
</div>
121
<button type="submit" class="btn btn-primary">Sign in</button>
122
</form>
123
HTML;
124
125
        $html = Dropdown::widget()
126
            ->items([
127
                $form,
128
                '-',
129
                ['label' => 'New around here? Sign up', 'url' => '#'],
130
                ['label' => 'Forgot password?', 'url' => '#']
131
            ])
132
            ->render();
133
134
        $expected = <<<HTML
135
<div id="w0-dropdown" class="dropdown-menu"><form class="px-4 py-3">
136
<div class="form-group">
137
<label for="exampleDropdownFormEmail1">Email address</label>
138
<input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="[email protected]">
139
</div>
140
<div class="form-group">
141
<label for="exampleDropdownFormPassword1">Password</label>
142
<input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
143
</div>
144
<div class="form-check">
145
<input type="checkbox" class="form-check-input" id="dropdownCheck">
146
<label class="form-check-label" for="dropdownCheck">
147
Remember me
148
</label>
149
</div>
150
<button type="submit" class="btn btn-primary">Sign in</button>
151
</form>
152
<div class="dropdown-divider"></div>
153
<a class="dropdown-item" href="#">New around here? Sign up</a>
154
<a class="dropdown-item" href="#">Forgot password?</a></div>
155
HTML;
156
157
        $this->assertEqualsWithoutLE($expected, $html);
158
    }
159
}
160