Passed
Branch develop (bae466)
by Paul
06:12
created

FieldTest::test_build_radio()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 12
rs 9.9332
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Tests;
4
5
use GeminiLabs\SiteReviews\Contracts\FieldContract;
6
use GeminiLabs\SiteReviews\Modules\Html\Field;
7
8
/**
9
 * Test case for the Plugin.
10
 * @group plugin
11
 */
12
class FieldTest extends \WP_UnitTestCase
0 ignored issues
show
Bug introduced by
The type WP_UnitTestCase was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
13
{
14
    public function test_build_checkbox(): void
15
    {
16
        $this->assertEquals(
17
            '<div>'.
18
                '<label for="site-reviews-foobar-1">'.
19
                    '<input type="checkbox" id="site-reviews-foobar-1" name="site-reviews[foobar]" value="1" /> Foobar'.
20
                '</label>'.
21
            '</div>',
22
            $this->build([
23
                'label' => 'Foobar',
24
                'name' => 'foobar',
25
                'type' => 'checkbox',
26
            ])
27
        );
28
    }
29
30
    public function test_build_checkboxes(): void
31
    {
32
        $this->assertEquals(
33
            '<div>'.
34
                '<label>Foobar</label>'.
35
                '<label for="site-reviews-foobar-1">'.
36
                    '<input type="checkbox" id="site-reviews-foobar-1" name="site-reviews[foobar][]" value="foo" /> Foo'.
37
                '</label>'.
38
                '<label for="site-reviews-foobar-2">'.
39
                    '<input type="checkbox" id="site-reviews-foobar-2" name="site-reviews[foobar][]" value="bar" /> Bar'.
40
                '</label>'.
41
            '</div>',
42
            $this->build([
43
                'label' => 'Foobar',
44
                'name' => 'foobar',
45
                'type' => 'checkbox',
46
                'options' => [
47
                    'foo' => 'Foo',
48
                    'bar' => 'Bar',
49
                ],
50
            ])
51
        );
52
    }
53
54
    public function test_build_code(): void
55
    {
56
        $this->assertEquals(
57
            '<div>'.
58
                '<label for="site-reviews-foobar">Foobar</label>'.
59
                '<textarea id="site-reviews-foobar" name="site-reviews[foobar]"></textarea>'.
60
            '</div>',
61
            $this->build([
62
                'label' => 'Foobar',
63
                'name' => 'foobar',
64
                'type' => 'code',
65
            ])
66
        );
67
    }
68
69
    public function test_build_color(): void
70
    {
71
        $this->assertEquals(
72
            '<div>'.
73
                '<label for="site-reviews-foobar">Foobar</label>'.
74
                '<input type="color" id="site-reviews-foobar" name="site-reviews[foobar]" value="" />'.
75
            '</div>',
76
            $this->build([
77
                'label' => 'Foobar',
78
                'name' => 'foobar',
79
                'type' => 'color',
80
            ])
81
        );
82
    }
83
84
    public function test_build_email(): void
85
    {
86
        $this->assertEquals(
87
            '<div>'.
88
                '<label for="site-reviews-foobar">Foobar</label>'.
89
                '<input type="email" id="site-reviews-foobar" name="site-reviews[foobar]" value="" />'.
90
            '</div>',
91
            $this->build([
92
                'label' => 'Foobar',
93
                'name' => 'foobar',
94
                'type' => 'email',
95
            ])
96
        );
97
    }
98
99
    public function test_build_hidden(): void
100
    {
101
        $this->assertEquals(
102
            '<input type="hidden" name="site-reviews[foobar]" value="" />',
103
            $this->build([
104
                'label' => 'Foobar',
105
                'name' => 'foobar',
106
                'type' => 'hidden',
107
            ])
108
        );
109
    }
110
111
    public function test_build_number(): void
112
    {
113
        $this->assertEquals(
114
            '<div>'.
115
                '<label for="site-reviews-foobar">Foobar</label>'.
116
                '<input type="number" id="site-reviews-foobar" name="site-reviews[foobar]" max="10" min="0" step="1" value="" />'.
117
            '</div>',
118
            $this->build([
119
                'label' => 'Foobar',
120
                'max' => 10,
121
                'min' => 0,
122
                'name' => 'foobar',
123
                'step' => 1,
124
                'type' => 'number',
125
            ])
126
        );
127
    }
128
129
    public function test_build_password(): void
130
    {
131
        $this->assertEquals(
132
            '<div>'.
133
                '<label for="site-reviews-foobar">Foobar</label>'.
134
                '<input type="password" id="site-reviews-foobar" name="site-reviews[foobar]" autocomplete="off" value="" />'.
135
            '</div>',
136
            $this->build([
137
                'label' => 'Foobar',
138
                'name' => 'foobar',
139
                'type' => 'password',
140
            ])
141
        );
142
    }
143
144
    public function test_build_radio(): void
145
    {
146
        $this->assertEquals(
147
            '<div>'.
148
                '<label for="site-reviews-foobar-1">'.
149
                    '<input type="radio" id="site-reviews-foobar-1" name="site-reviews[foobar]" value="1" /> Foobar'.
150
                '</label>'.
151
            '</div>',
152
            $this->build([
153
                'label' => 'Foobar',
154
                'name' => 'foobar',
155
                'type' => 'radio',
156
            ])
157
        );
158
    }
159
160
    public function test_build_radios(): void
161
    {
162
        $this->assertEquals(
163
            '<div>'.
164
                '<label>Foobar</label>'.
165
                '<label for="site-reviews-foobar-1">'.
166
                    '<input type="radio" id="site-reviews-foobar-1" name="site-reviews[foobar]" value="foo" /> Foo'.
167
                '</label>'.
168
                '<label for="site-reviews-foobar-2">'.
169
                    '<input type="radio" id="site-reviews-foobar-2" name="site-reviews[foobar]" value="bar" /> Bar'.
170
                '</label>'.
171
            '</div>',
172
            $this->build([
173
                'label' => 'Foobar',
174
                'name' => 'foobar',
175
                'type' => 'radio',
176
                'options' => [
177
                    'foo' => 'Foo',
178
                    'bar' => 'Bar',
179
                ],
180
            ])
181
        );
182
    }
183
184
    public function test_build_rating(): void
185
    {
186
        $this->assertEquals(
187
            '<div>'.
188
                '<label for="site-reviews-foobar">Your overall rating</label>'.
189
                '<select class="browser-default disable-select no-wrap no_wrap" id="site-reviews-foobar" name="site-reviews[foobar]">'.
190
                    '<option value="">Select a Rating</option>'.
191
                    '<option value="5">5 Stars</option>'.
192
                    '<option value="4">4 Stars</option>'.
193
                    '<option value="3">3 Stars</option>'.
194
                    '<option value="2">2 Stars</option>'.
195
                    '<option value="1">1 Star</option>'.
196
                '</select>'.
197
            '</div>',
198
            $this->build([
199
                'label' => 'Your overall rating',
200
                'name' => 'foobar',
201
                'type' => 'rating',
202
            ])
203
        );
204
    }
205
206
    public function test_build_select(): void
207
    {
208
        $this->assertEquals(
209
            '<div>'.
210
                '<label for="site-reviews-foobar">Color</label>'.
211
                '<select id="site-reviews-foobar" name="site-reviews[foobar]">'.
212
                    '<option value="">Select a color</option>'.
213
                    '<option value="red">Red</option>'.
214
                    '<option value="green">Green</option>'.
215
                    '<option value="blue">Blue</option>'.
216
                '</select>'.
217
            '</div>',
218
            $this->build([
219
                'label' => 'Color',
220
                'name' => 'foobar',
221
                'options' => [
222
                    'red' => 'Red',
223
                    'green' => 'Green',
224
                    'blue' => 'Blue',
225
                ],
226
                'placeholder' => 'Select a color',
227
                'type' => 'select',
228
            ])
229
        );
230
    }
231
232
    public function test_build_text(): void
233
    {
234
        $this->assertEquals(
235
            '<div>'.
236
                '<label for="site-reviews-foobar">Foobar</label>'.
237
                '<input type="text" id="site-reviews-foobar" name="site-reviews[foobar]" value="" />'.
238
            '</div>',
239
            $this->build([
240
                'label' => 'Foobar',
241
                'name' => 'foobar',
242
                'type' => 'text',
243
            ])
244
        );
245
    }
246
247
    public function test_build_textarea(): void
248
    {
249
        $this->assertEquals(
250
            '<div>'.
251
                '<label for="site-reviews-foobar">Foobar</label>'.
252
                '<textarea id="site-reviews-foobar" name="site-reviews[foobar]" placeholder="Foobar..."></textarea>'.
253
            '</div>',
254
            $this->build([
255
                'label' => 'Foobar',
256
                'name' => 'foobar',
257
                'placeholder' => 'Foobar...',
258
                'type' => 'textarea',
259
            ])
260
        );
261
    }
262
263
    public function test_build_toggle(): void
264
    {
265
        $this->assertEquals(
266
            '<div>'.
267
                '<label for="site-reviews-foobar-1">'.
268
                    '<input type="checkbox" id="site-reviews-foobar-1" name="site-reviews[foobar]" required value="1" /> Foobar'.
269
                '</label>'.
270
            '</div>',
271
            $this->build([
272
                'label' => 'Foobar',
273
                'name' => 'foobar',
274
                'required' => true,
275
                'type' => 'toggle',
276
            ])
277
        );
278
    }
279
280
    public function test_build_unknown(): void
281
    {
282
        $this->assertEquals(
283
            '',
284
            $this->build([
285
                'label' => 'Foobar',
286
                'name' => 'foobar',
287
                'type' => 'unknown',
288
            ])
289
        );
290
    }
291
292
    public function test_build_url(): void
293
    {
294
        $this->assertEquals(
295
            '<div>'.
296
                '<label for="site-reviews-foobar">Foobar</label>'.
297
                '<input type="url" id="site-reviews-foobar" name="site-reviews[foobar]" value="" />'.
298
            '</div>',
299
            $this->build([
300
                'label' => 'Foobar',
301
                'name' => 'foobar',
302
                'type' => 'url',
303
            ])
304
        );
305
    }
306
307
    public function test_build_yes_no(): void
308
    {
309
        $this->assertEquals(
310
            '<div>'.
311
                '<label>Foobar</label>'.
312
                '<label for="site-reviews-foobar-1">'.
313
                    '<input type="radio" id="site-reviews-foobar-1" name="site-reviews[foobar]" value="no" /> No'.
314
                '</label>'.
315
                '<label for="site-reviews-foobar-2">'.
316
                    '<input type="radio" id="site-reviews-foobar-2" name="site-reviews[foobar]" value="yes" /> Yes'.
317
                '</label>'.
318
            '</div>',
319
            $this->build([
320
                'label' => 'Foobar',
321
                'name' => 'foobar',
322
                'type' => 'yes_no',
323
                'options' => [ // this should be ignored in a yes_no field
324
                    'x' => 'X',
325
                    'y' => 'Y',
326
                    'z' => 'Z',
327
                ],
328
            ])
329
        );
330
    }
331
332
    protected function build(array $args = []): string
333
    {
334
        $html = $this->field($args)->build();
335
        $parts = preg_split('/\R/', $html);
336
        $parts = array_map('trim', $parts);
337
        return implode('', $parts);
338
    }
339
340
    protected function field(array $args = []): FieldContract
341
    {
342
        return new Field($args);
343
    }
344
}
345