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

ReviewFieldTest   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 557
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 24
eloc 409
dl 0
loc 557
rs 10
c 0
b 0
f 0

24 Methods

Rating   Name   Duplication   Size   Complexity  
A test_build_color() 0 14 1
A test_build_hidden() 0 8 1
A test_build_checkbox() 0 18 1
A test_build_text() 0 14 1
A test_build_email() 0 14 1
A test_build_unknown() 0 8 1
A test_build_rating() 0 21 1
A test_build_code() 0 14 1
A test_build_textarea() 0 15 1
A test_build_url() 0 14 1
A test_build_number() 0 17 1
A field() 0 3 1
A test_build_yes_no() 0 23 1
A test_build_password() 0 14 1
A test_build_range() 0 26 1
A test_build_checkboxes() 0 30 1
A test_build_radio() 0 18 1
A test_build_toggle() 0 20 1
A test_build_checkboxes_with_descriptions() 0 36 1
A build() 0 6 1
A test_build_toggles() 0 34 1
A test_build_radios() 0 30 1
A test_build_range_with_labels() 0 36 1
A test_build_select() 0 25 1
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Tests;
4
5
use GeminiLabs\SiteReviews\Contracts\FieldContract;
6
use GeminiLabs\SiteReviews\Modules\Html\ReviewField;
7
8
/**
9
 * Test case for the Plugin.
10
 * @group plugin
11
 */
12
class ReviewFieldTest 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 class="glsr-field glsr-field-choice" data-field="foobar">'.
18
                '<div class="glsr-field-subgroup">'.
19
                    '<span class="glsr-field-checkbox">'.
20
                        '<label for="site-reviews-foobar-1">'.
21
                            '<span><input type="checkbox" class="glsr-input-checkbox" id="site-reviews-foobar-1" name="site-reviews[foobar]" value="1" />&#8203;</span> <!-- zero-space character used for alignment -->'.
22
                            '<span>Foobar</span>'.
23
                        '</label>'.
24
                    '</span>'.
25
                '</div>'.
26
                '<div class="glsr-field-error"></div>'.
27
            '</div>',
28
            $this->build([
29
                'label' => 'Foobar',
30
                'name' => 'foobar',
31
                'type' => 'checkbox',
32
            ])
33
        );
34
    }
35
36
    public function test_build_checkboxes(): void
37
    {
38
        $this->assertEquals(
39
            '<div class="glsr-field glsr-field-choice" data-field="foobar">'.
40
                '<label class="glsr-label" for="">'.
41
                    '<span>Foobar</span>'.
42
                '</label>'.
43
                '<div class="glsr-field-subgroup">'.
44
                    '<span class="glsr-field-checkbox">'.
45
                        '<label for="site-reviews-foobar-1">'.
46
                            '<span><input type="checkbox" class="glsr-input-checkbox" id="site-reviews-foobar-1" name="site-reviews[foobar][]" value="foo" />&#8203;</span> <!-- zero-space character used for alignment -->'.
47
                            '<span>Foo</span>'.
48
                        '</label>'.
49
                    '</span>'.
50
                    '<span class="glsr-field-checkbox">'.
51
                        '<label for="site-reviews-foobar-2">'.
52
                            '<span><input type="checkbox" class="glsr-input-checkbox" id="site-reviews-foobar-2" name="site-reviews[foobar][]" value="bar" />&#8203;</span> <!-- zero-space character used for alignment -->'.
53
                            '<span>Bar</span>'.
54
                        '</label>'.
55
                    '</span>'.
56
                '</div>'.
57
                '<div class="glsr-field-error"></div>'.
58
            '</div>',
59
            $this->build([
60
                'label' => 'Foobar',
61
                'name' => 'foobar',
62
                'type' => 'checkbox',
63
                'options' => [
64
                    'foo' => 'Foo',
65
                    'bar' => 'Bar',
66
                ],
67
            ])
68
        );
69
    }
70
71
    public function test_build_checkboxes_with_descriptions(): void
72
    {
73
        $this->assertEquals(
74
            '<div class="glsr-field glsr-field-choice" data-field="foobar">'.
75
                '<label class="glsr-label" for="">'.
76
                    '<span>Foobar</span>'.
77
                '</label>'.
78
                '<div class="glsr-field-subgroup">'.
79
                    '<span class="glsr-field-checkbox">'.
80
                        '<label for="site-reviews-foobar-1">'.
81
                            '<span><input type="checkbox" class="glsr-input-checkbox" id="site-reviews-foobar-1" name="site-reviews[foobar][]" value="foo" />&#8203;</span> <!-- zero-space character used for alignment -->'.
82
                            '<span>'.
83
                                '<span>Foo</span>'.
84
                                '<span>this is foo</span>'.
85
                            '</span>'.
86
                        '</label>'.
87
                    '</span>'.
88
                    '<span class="glsr-field-checkbox">'.
89
                        '<label for="site-reviews-foobar-2">'.
90
                            '<span><input type="checkbox" class="glsr-input-checkbox" id="site-reviews-foobar-2" name="site-reviews[foobar][]" value="bar" />&#8203;</span> <!-- zero-space character used for alignment -->'.
91
                            '<span>'.
92
                                '<span>Bar</span>'.
93
                                '<span>this is bar</span>'.
94
                            '</span>'.
95
                        '</label>'.
96
                    '</span>'.
97
                '</div>'.
98
                '<div class="glsr-field-error"></div>'.
99
            '</div>',
100
            $this->build([
101
                'label' => 'Foobar',
102
                'name' => 'foobar',
103
                'type' => 'checkbox',
104
                'options' => [
105
                    'foo' => ['Foo', 'this is foo'],
106
                    'bar' => ['Bar', 'this is bar'],
107
                ],
108
            ])
109
        );
110
    }
111
112
    public function test_build_code(): void
113
    {
114
        $this->assertEquals(
115
            '<div class="glsr-field glsr-field-code" data-field="foobar">'.
116
                '<label class="glsr-label" for="site-reviews-foobar">'.
117
                    '<span>Foobar</span>'.
118
                '</label>'.
119
                '<textarea class="glsr-textarea" id="site-reviews-foobar" name="site-reviews[foobar]"></textarea>'.
120
                '<div class="glsr-field-error"></div>'.
121
            '</div>',
122
            $this->build([
123
                'label' => 'Foobar',
124
                'name' => 'foobar',
125
                'type' => 'code',
126
            ])
127
        );
128
    }
129
130
    public function test_build_color(): void
131
    {
132
        $this->assertEquals(
133
            '<div class="glsr-field glsr-field-color" data-field="foobar">'.
134
                '<label class="glsr-label" for="site-reviews-foobar">'.
135
                    '<span>Foobar</span>'.
136
                '</label>'.
137
                '<input type="color" class="glsr-input glsr-input-color" id="site-reviews-foobar" name="site-reviews[foobar]" value="" />'.
138
                '<div class="glsr-field-error"></div>'.
139
            '</div>',
140
            $this->build([
141
                'label' => 'Foobar',
142
                'name' => 'foobar',
143
                'type' => 'color',
144
            ])
145
        );
146
    }
147
148
    public function test_build_email(): void
149
    {
150
        $this->assertEquals(
151
            '<div class="glsr-field glsr-field-email" data-field="foobar">'.
152
                '<label class="glsr-label" for="site-reviews-foobar">'.
153
                    '<span>Foobar</span>'.
154
                '</label>'.
155
                '<input type="email" class="glsr-input glsr-input-email" id="site-reviews-foobar" name="site-reviews[foobar]" value="" />'.
156
                '<div class="glsr-field-error"></div>'.
157
            '</div>',
158
            $this->build([
159
                'label' => 'Foobar',
160
                'name' => 'foobar',
161
                'type' => 'email',
162
            ])
163
        );
164
    }
165
166
    public function test_build_hidden(): void
167
    {
168
        $this->assertEquals(
169
            '<input type="hidden" name="site-reviews[foobar]" value="" />',
170
            $this->build([
171
                'label' => 'Foobar',
172
                'name' => 'foobar',
173
                'type' => 'hidden',
174
            ])
175
        );
176
    }
177
178
    public function test_build_number(): void
179
    {
180
        $this->assertEquals(
181
            '<div class="glsr-field glsr-field-number" data-field="foobar">'.
182
                '<label class="glsr-label" for="site-reviews-foobar">'.
183
                    '<span>Foobar</span>'.
184
                '</label>'.
185
                '<input type="number" class="glsr-input glsr-input-number" id="site-reviews-foobar" name="site-reviews[foobar]" max="10" min="0" step="1" value="" />'.
186
                '<div class="glsr-field-error"></div>'.
187
            '</div>',
188
            $this->build([
189
                'label' => 'Foobar',
190
                'max' => 10,
191
                'min' => 0,
192
                'name' => 'foobar',
193
                'step' => 1,
194
                'type' => 'number',
195
            ])
196
        );
197
    }
198
199
    public function test_build_password(): void
200
    {
201
        $this->assertEquals(
202
            '<div class="glsr-field glsr-field-password" data-field="foobar">'.
203
                '<label class="glsr-label" for="site-reviews-foobar">'.
204
                    '<span>Foobar</span>'.
205
                '</label>'.
206
                '<input type="password" class="glsr-input glsr-input-password" id="site-reviews-foobar" name="site-reviews[foobar]" autocomplete="off" value="" />'.
207
                '<div class="glsr-field-error"></div>'.
208
            '</div>',
209
            $this->build([
210
                'label' => 'Foobar',
211
                'name' => 'foobar',
212
                'type' => 'password',
213
            ])
214
        );
215
    }
216
217
    public function test_build_radio(): void
218
    {
219
        $this->assertEquals(
220
            '<div class="glsr-field glsr-field-choice" data-field="foobar">'.
221
                '<div class="glsr-field-subgroup">'.
222
                    '<span class="glsr-field-radio">'.
223
                        '<label for="site-reviews-foobar-1">'.
224
                            '<span><input type="radio" class="glsr-input-radio" id="site-reviews-foobar-1" name="site-reviews[foobar]" value="1" />&#8203;</span> <!-- zero-space character used for alignment -->'.
225
                            '<span>Foobar</span>'.
226
                        '</label>'.
227
                    '</span>'.
228
                '</div>'.
229
                '<div class="glsr-field-error"></div>'.
230
            '</div>',
231
            $this->build([
232
                'label' => 'Foobar',
233
                'name' => 'foobar',
234
                'type' => 'radio',
235
            ])
236
        );
237
    }
238
239
    public function test_build_radios(): void
240
    {
241
        $this->assertEquals(
242
            '<div class="glsr-field glsr-field-choice" data-field="foobar">'.
243
                '<label class="glsr-label" for="">'.
244
                    '<span>Foobar</span>'.
245
                '</label>'.
246
                '<div class="glsr-field-subgroup">'.
247
                    '<span class="glsr-field-radio">'.
248
                        '<label for="site-reviews-foobar-1">'.
249
                            '<span><input type="radio" class="glsr-input-radio" id="site-reviews-foobar-1" name="site-reviews[foobar]" value="foo" />&#8203;</span> <!-- zero-space character used for alignment -->'.
250
                            '<span>Foo</span>'.
251
                        '</label>'.
252
                    '</span>'.
253
                    '<span class="glsr-field-radio">'.
254
                        '<label for="site-reviews-foobar-2">'.
255
                            '<span><input type="radio" class="glsr-input-radio" id="site-reviews-foobar-2" name="site-reviews[foobar]" value="bar" />&#8203;</span> <!-- zero-space character used for alignment -->'.
256
                            '<span>Bar</span>'.
257
                        '</label>'.
258
                    '</span>'.
259
                '</div>'.
260
                '<div class="glsr-field-error"></div>'.
261
            '</div>',
262
            $this->build([
263
                'label' => 'Foobar',
264
                'name' => 'foobar',
265
                'type' => 'radio',
266
                'options' => [
267
                    'foo' => 'Foo',
268
                    'bar' => 'Bar',
269
                ],
270
            ])
271
        );
272
    }
273
274
    public function test_build_range(): void
275
    {
276
        $this->assertEquals(
277
            '<div class="glsr-field glsr-field-choice" data-field="foobar">'.
278
                '<label class="glsr-label" for="">'.
279
                    '<span>Foobar</span>'.
280
                '</label>'.
281
                '<span class="glsr-range-options" data-placeholder="Please select">'.
282
                    '<span class="glsr-field-range">'.
283
                        '<input type="radio" class="glsr-input-range" id="site-reviews-foobar-1" name="site-reviews[foobar]" value="1" />'.
284
                        '<label for="site-reviews-foobar-1">Foo</label>'.
285
                    '</span>'.
286
                    '<span class="glsr-field-range">'.
287
                        '<input type="radio" class="glsr-input-range" id="site-reviews-foobar-2" name="site-reviews[foobar]" value="2" />'.
288
                        '<label for="site-reviews-foobar-2">Bar</label>'.
289
                    '</span>'.
290
                '</span>'.
291
                '<div class="glsr-field-error"></div>'.
292
            '</div>',
293
            $this->build([
294
                'label' => 'Foobar',
295
                'name' => 'foobar',
296
                'type' => 'range',
297
                'options' => [
298
                    'foo' => 'Foo',
299
                    'bar' => 'Bar',
300
                ],
301
            ])
302
        );
303
    }
304
305
    public function test_build_range_with_labels(): void
306
    {
307
        $this->assertEquals(
308
            '<div class="glsr-field glsr-field-choice" data-field="foobar">'.
309
                '<label class="glsr-label" for="">'.
310
                    '<span>Foobar</span>'.
311
                '</label>'.
312
                '<span class="glsr-range-labels">'.
313
                    '<span>Left</span>'.
314
                    '<span>Middle</span>'.
315
                    '<span>Right</span>'.
316
                '</span>'.
317
                '<span class="glsr-range-options" data-placeholder="Please select">'.
318
                    '<span class="glsr-field-range">'.
319
                        '<input type="radio" class="glsr-input-range" id="site-reviews-foobar-1" name="site-reviews[foobar]" value="1" />'.
320
                        '<label for="site-reviews-foobar-1">Foo</label>'.
321
                    '</span>'.
322
                    '<span class="glsr-field-range">'.
323
                        '<input type="radio" class="glsr-input-range" id="site-reviews-foobar-2" name="site-reviews[foobar]" value="2" />'.
324
                        '<label for="site-reviews-foobar-2">Bar</label>'.
325
                    '</span>'.
326
                '</span>'.
327
                '<div class="glsr-field-error"></div>'.
328
            '</div>',
329
            $this->build([
330
                'label' => 'Foobar',
331
                'labels' => [
332
                    'Left',
333
                    'Middle',
334
                    'Right',
335
                ],
336
                'name' => 'foobar',
337
                'type' => 'range',
338
                'options' => [
339
                    'foo' => 'Foo',
340
                    'bar' => 'Bar',
341
                ],
342
            ])
343
        );
344
    }
345
346
    public function test_build_rating(): void
347
    {
348
        $this->assertEquals(
349
            '<div class="glsr-field glsr-field-rating" data-field="foobar">'.
350
                '<label class="glsr-label" for="site-reviews-foobar">'.
351
                    '<span>Your overall rating</span>'.
352
                '</label>'.
353
                '<select class="browser-default disable-select glsr-select no-wrap no_wrap" id="site-reviews-foobar" name="site-reviews[foobar]">'.
354
                    '<option value="">Select a Rating</option>'.
355
                    '<option value="5">5 Stars</option>'.
356
                    '<option value="4">4 Stars</option>'.
357
                    '<option value="3">3 Stars</option>'.
358
                    '<option value="2">2 Stars</option>'.
359
                    '<option value="1">1 Star</option>'.
360
                '</select>'.
361
                '<div class="glsr-field-error"></div>'.
362
            '</div>',
363
            $this->build([
364
                'label' => 'Your overall rating',
365
                'name' => 'foobar',
366
                'type' => 'rating',
367
            ])
368
        );
369
    }
370
371
    public function test_build_select(): void
372
    {
373
        $this->assertEquals(
374
            '<div class="glsr-field glsr-field-select" data-field="foobar">'.
375
                '<label class="glsr-label" for="site-reviews-foobar">'.
376
                    '<span>Foobar</span>'.
377
                '</label>'.
378
                '<select class="glsr-select" id="site-reviews-foobar" name="site-reviews[foobar]">'.
379
                    '<option value="">Select a color</option>'.
380
                    '<option value="red">Red</option>'.
381
                    '<option value="green">Green</option>'.
382
                    '<option value="blue">Blue</option>'.
383
                '</select>'.
384
                '<div class="glsr-field-error"></div>'.
385
            '</div>',
386
            $this->build([
387
                'label' => 'Foobar',
388
                'name' => 'foobar',
389
                'options' => [
390
                    'red' => 'Red',
391
                    'green' => 'Green',
392
                    'blue' => 'Blue',
393
                ],
394
                'placeholder' => 'Select a color',
395
                'type' => 'select',
396
            ])
397
        );
398
    }
399
400
    public function test_build_text(): void
401
    {
402
        $this->assertEquals(
403
            '<div class="glsr-field glsr-field-text" data-field="foobar">'.
404
                '<label class="glsr-label" for="site-reviews-foobar">'.
405
                    '<span>Foobar</span>'.
406
                '</label>'.
407
                '<input type="text" class="glsr-input glsr-input-text" id="site-reviews-foobar" name="site-reviews[foobar]" value="" />'.
408
                '<div class="glsr-field-error"></div>'.
409
            '</div>',
410
            $this->build([
411
                'label' => 'Foobar',
412
                'name' => 'foobar',
413
                'type' => 'text',
414
            ])
415
        );
416
    }
417
418
    public function test_build_textarea(): void
419
    {
420
        $this->assertEquals(
421
            '<div class="glsr-field glsr-field-textarea" data-field="foobar">'.
422
                '<label class="glsr-label" for="site-reviews-foobar">'.
423
                    '<span>Foobar</span>'.
424
                '</label>'.
425
                '<textarea class="glsr-textarea" id="site-reviews-foobar" name="site-reviews[foobar]" placeholder="Foobar..."></textarea>'.
426
                '<div class="glsr-field-error"></div>'.
427
            '</div>',
428
            $this->build([
429
                'label' => 'Foobar',
430
                'name' => 'foobar',
431
                'placeholder' => 'Foobar...',
432
                'type' => 'textarea',
433
            ])
434
        );
435
    }
436
437
    public function test_build_toggle(): void
438
    {
439
        $this->assertEquals(
440
            '<div class="glsr-field glsr-field-choice glsr-required" data-field="foobar">'.
441
                '<span class="glsr-field-toggle">'.
442
                    '<span class="glsr-toggle">'.
443
                        '<label for="site-reviews-foobar-1">Foobar</label>'.
444
                        '<span class="glsr-toggle-switch">'.
445
                            '<input type="checkbox" class="glsr-input-toggle" id="site-reviews-foobar-1" name="site-reviews[foobar]" required value="1" /> &#8203; <!-- zero-space character used for alignment -->'.
446
                            '<span class="glsr-toggle-track"></span>'.
447
                        '</span>'.
448
                    '</span>'.
449
                '</span>'.
450
                '<div class="glsr-field-error"></div>'.
451
            '</div>',
452
            $this->build([
453
                'label' => 'Foobar',
454
                'name' => 'foobar',
455
                'required' => true,
456
                'type' => 'toggle',
457
            ])
458
        );
459
    }
460
461
    public function test_build_toggles(): void
462
    {
463
        $this->assertEquals(
464
            '<div class="glsr-field glsr-field-choice" data-field="foobar">'.
465
                '<label class="glsr-label" for="">'.
466
                    '<span>Foobar</span>'.
467
                '</label>'.
468
                '<span class="glsr-field-toggle">'.
469
                    '<span class="glsr-toggle">'.
470
                        '<label for="site-reviews-foobar-1">Foo</label>'.
471
                        '<span class="glsr-toggle-switch">'.
472
                            '<input type="checkbox" class="glsr-input-toggle" id="site-reviews-foobar-1" name="site-reviews[foobar][]" value="foo" /> &#8203; <!-- zero-space character used for alignment -->'.
473
                            '<span class="glsr-toggle-track"></span>'.
474
                        '</span>'.
475
                    '</span>'.
476
                '</span>'.
477
                '<span class="glsr-field-toggle">'.
478
                    '<span class="glsr-toggle">'.
479
                        '<label for="site-reviews-foobar-2">Bar</label>'.
480
                        '<span class="glsr-toggle-switch">'.
481
                            '<input type="checkbox" class="glsr-input-toggle" id="site-reviews-foobar-2" name="site-reviews[foobar][]" value="bar" /> &#8203; <!-- zero-space character used for alignment -->'.
482
                            '<span class="glsr-toggle-track"></span>'.
483
                        '</span>'.
484
                    '</span>'.
485
                '</span>'.
486
                '<div class="glsr-field-error"></div>'.
487
            '</div>',
488
            $this->build([
489
                'label' => 'Foobar',
490
                'name' => 'foobar',
491
                'type' => 'toggle',
492
                'options' => [
493
                    'foo' => 'Foo',
494
                    'bar' => 'Bar',
495
                ],
496
            ])
497
        );
498
    }
499
500
    public function test_build_unknown(): void
501
    {
502
        $this->assertEquals(
503
            '',
504
            $this->build([
505
                'label' => 'Foobar',
506
                'name' => 'foobar',
507
                'type' => 'unknown',
508
            ])
509
        );
510
    }
511
512
    public function test_build_url(): void
513
    {
514
        $this->assertEquals(
515
            '<div class="glsr-field glsr-field-url" data-field="foobar">'.
516
                '<label class="glsr-label" for="site-reviews-foobar">'.
517
                    '<span>Foobar</span>'.
518
                '</label>'.
519
                '<input type="url" class="glsr-input glsr-input-url" id="site-reviews-foobar" name="site-reviews[foobar]" value="" />'.
520
                '<div class="glsr-field-error"></div>'.
521
            '</div>',
522
            $this->build([
523
                'label' => 'Foobar',
524
                'name' => 'foobar',
525
                'type' => 'url',
526
            ])
527
        );
528
    }
529
530
    public function test_build_yes_no(): void
531
    {
532
        $this->assertEquals(
533
            '<div class="glsr-field glsr-field-choice" data-field="foobar">'.
534
                '<label class="glsr-label" for="">'.
535
                    '<span>Foobar</span>'.
536
                '</label>'.
537
                '<label for="site-reviews-foobar-1">'.
538
                    '<input type="radio" class="glsr-input-radio" id="site-reviews-foobar-1" name="site-reviews[foobar]" value="no" /> No'.
539
                '</label>'.
540
                '<label for="site-reviews-foobar-2">'.
541
                    '<input type="radio" class="glsr-input-radio" id="site-reviews-foobar-2" name="site-reviews[foobar]" value="yes" /> Yes'.
542
                '</label>'.
543
                '<div class="glsr-field-error"></div>'.
544
            '</div>',
545
            $this->build([
546
                'label' => 'Foobar',
547
                'name' => 'foobar',
548
                'type' => 'yes_no',
549
                'options' => [ // this should be ignored in a yes_no field
550
                    'x' => 'X',
551
                    'y' => 'Y',
552
                    'z' => 'Z',
553
                ],
554
            ])
555
        );
556
    }
557
558
    protected function build(array $args = []): string
559
    {
560
        $html = $this->field($args)->build();
561
        $parts = preg_split('/\R/', $html);
562
        $parts = array_map('trim', $parts);
563
        return implode('', $parts);
564
    }
565
566
    protected function field(array $args = []): FieldContract
567
    {
568
        return new ReviewField($args);
569
    }
570
}
571