Completed
Push — develop ( d42c3f...ac22da )
by Freddie
02:15
created

InputBuilderTest::testItSetEqualToConstraint()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 11
rs 10
eloc 7
nc 1
nop 0
1
<?php
2
3
namespace FlexPHP\Inputs\Tests\Unit\Builder;
4
5
use FlexPHP\Inputs\Builder\InputBuilder;
6
use FlexPHP\Inputs\Tests\TestCase;
7
8
class InputBuilderTest extends TestCase
9
{
10
    public function testItDefault(): void
11
    {
12
        $render = (new InputBuilder('foo', []))->render();
13
14
        $this->assertEquals(<<<'T'
15
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" class="form-control" /></div>
16
T, $render);
17
    }
18
19
    public function testItDefaultSlug(): void
20
    {
21
        $render = (new InputBuilder('foo_bar', []))->render();
22
23
        $this->assertEquals(<<<'T'
24
<div class="form-group"><label for="form_foo_bar">Foo bar</label><input type="text" id="form_foo_bar" name="form[foo_bar]" class="form-control" /></div>
25
T, $render);
26
    }
27
28
    /**
29
     * @dataProvider getDefaultWithSpacesOptions
30
     */
31
    public function testItDefaultSpace($name): void
32
    {
33
        $render = (new InputBuilder($name, []))->render();
34
35
        $this->assertEquals(<<<'T'
36
<div class="form-group"><label for="form_foo_bar">Foo bar</label><input type="text" id="form_foo_bar" name="form[foo_bar]" class="form-control" /></div>
37
T, $render);
38
    }
39
40
    public function testItSetLabel(): void
41
    {
42
        $render = (new InputBuilder('foo', [
43
            'Label' => 'My Label',
44
        ]))->render();
45
46
        $this->assertEquals(<<<'T'
47
<div class="form-group"><label for="form_foo">My Label</label><input type="text" id="form_foo" name="form[foo]" class="form-control" /></div>
48
T, $render);
49
    }
50
51
    public function testItSetLabelAttr(): void
52
    {
53
        $render = (new InputBuilder('foo', [
54
            'Label' => 'My Label',
55
            'label_attr' => [
56
                'class' => 'label-class',
57
            ],
58
        ]))->render();
59
60
        $this->assertEquals(<<<'T'
61
<div class="form-group"><label class="label-class" for="form_foo">My Label</label><input type="text" id="form_foo" name="form[foo]" class="form-control" /></div>
62
T, $render);
63
    }
64
65
    public function testItSetDefault(): void
66
    {
67
        $render = (new InputBuilder('foo', [
68
            'Default' => 'fuz',
69
        ]))->render();
70
71
        $this->assertEquals(<<<'T'
72
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" class="form-control" value="fuz" /></div>
73
T, $render);
74
    }
75
76
    public function testItSetType(): void
77
    {
78
        $render = (new InputBuilder('foo', [
79
            'Type' => 'email',
80
        ]))->render();
81
82
        $this->assertEquals(<<<'T'
83
<div class="form-group"><label for="form_foo">Foo</label><input type="email" id="form_foo" name="form[foo]" class="form-control" /></div>
84
T, $render);
85
    }
86
87
    public function testItSetRequired(): void
88
    {
89
        $render = (new InputBuilder('foo', [
90
            'Required' => true,
91
        ]))->render();
92
93
        $this->assertEquals(<<<'T'
94
<div class="form-group"><label for="form_foo" class="required">Foo</label><input type="text" id="form_foo" name="form[foo]" required="required" class="form-control" /></div>
95
T, $render);
96
    }
97
98
    /**
99
     * @dataProvider getRequiredOptions
100
     *
101
     * @param string|array $required
102
     * @return void
103
     */
104
    public function testItSetRequiredConstraint($required): void
105
    {
106
        $render = (new InputBuilder('foo', [
107
            'Constraints' => $required,
108
        ]))->render();
109
110
        $this->assertEquals(<<<'T'
111
<div class="form-group"><label for="form_foo" class="required">Foo</label><input type="text" id="form_foo" name="form[foo]" required="required" class="form-control" /></div>
112
T, $render);
113
    }
114
115
    public function testItSetTypeConstraint(): void
116
    {
117
        $render = (new InputBuilder('foo', [
118
            'Constraints' => json_encode([
119
                'type' => 'email',
120
            ]),
121
        ]))->render();
122
123
        $this->assertEquals(<<<'T'
124
<div class="form-group"><label for="form_foo">Foo</label><input type="email" id="form_foo" name="form[foo]" class="form-control" /></div>
125
T, $render);
126
    }
127
128
    public function testItSetTypeAttrConstraint(): void
129
    {
130
        $render = (new InputBuilder('foo', [
131
            'attr' => [
132
                'type' => 'email',
133
            ],
134
        ]))->render();
135
136
        $this->assertEquals(<<<'T'
137
<div class="form-group"><label for="form_foo">Foo</label><input type="email" id="form_foo" name="form[foo]" class="form-control" /></div>
138
T, $render);
139
    }
140
141
    public function testItSetDigitsConstraint(): void
142
    {
143
        $render = (new InputBuilder('foo', [
144
            'Constraints' => json_encode([
145
                'type' => 'digits',
146
            ]),
147
        ]))->render();
148
149
        $this->assertEquals(<<<'T'
150
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" data-parsley-type="digits" class="form-control" /></div>
151
T, $render);
152
    }
153
154
    public function testItSetAlphanumConstraint(): void
155
    {
156
        $render = (new InputBuilder('foo', [
157
            'Constraints' => json_encode([
158
                'Type' => 'Alphanum',
159
            ]),
160
        ]))->render();
161
162
        $this->assertEquals(<<<'T'
163
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" data-parsley-type="alphanum" class="form-control" /></div>
164
T, $render);
165
    }
166
167
    public function testItSetMinLengthConstraint(): void
168
    {
169
        $render = (new InputBuilder('foo', [
170
            'Constraints' => json_encode([
171
                'minlength' => 5,
172
            ]),
173
        ]))->render();
174
175
        $this->assertEquals(<<<'T'
176
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" minlength="5" class="form-control" /></div>
177
T, $render);
178
    }
179
180
    public function testItSetMaxLengthConstraint(): void
181
    {
182
        $render = (new InputBuilder('foo', [
183
            'Constraints' => json_encode([
184
                'maxlength' => 666,
185
            ]),
186
        ]))->render();
187
188
        $this->assertEquals(<<<'T'
189
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" maxlength="666" class="form-control" /></div>
190
T, $render);
191
    }
192
193
    public function testItSetLengthConstraint(): void
194
    {
195
        $render = (new InputBuilder('foo', [
196
            'Constraints' => json_encode([
197
                'length' => '[6,10]',
198
            ]),
199
        ]))->render();
200
201
        $this->assertEquals(<<<'T'
202
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" data-parsley-length="[6,10]" class="form-control" /></div>
203
T, $render);
204
    }
205
206
    public function testItSetMinConstraint(): void
207
    {
208
        $render = (new InputBuilder('foo', [
209
            'Constraints' => json_encode([
210
                'min' => 3,
211
            ]),
212
        ]))->render();
213
214
        $this->assertEquals(<<<'T'
215
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" min="3" class="form-control" /></div>
216
T, $render);
217
    }
218
219
    public function testItSetMaxConstraint(): void
220
    {
221
        $render = (new InputBuilder('foo', [
222
            'Constraints' => json_encode([
223
                'max' => 99,
224
            ]),
225
        ]))->render();
226
227
        $this->assertEquals(<<<'T'
228
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" max="99" class="form-control" /></div>
229
T, $render);
230
    }
231
232
    public function testItSetRangeConstraint(): void
233
    {
234
        $render = (new InputBuilder('foo', [
235
            'Constraints' => json_encode([
236
                'range' => '6,10',
237
            ]),
238
        ]))->render();
239
240
        $this->assertEquals(<<<'T'
241
<div class="form-group"><label for="form_foo">Foo</label>        <input type="range" id="form_foo" name="form[foo]" min="6" max="10" class="form-control" /></div>
242
T, $render);
243
    }
244
245
    public function testItSetPatternConstraint(): void
246
    {
247
        $render = (new InputBuilder('foo', [
248
            'Constraints' => json_encode([
249
                'pattern' => "\+d",
250
            ]),
251
        ]))->render();
252
253
        $this->assertEquals(<<<'T'
254
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" pattern="\+d" class="form-control" /></div>
255
T, $render);
256
    }
257
258
    public function testItSetMinCheckConstraint(): void
259
    {
260
        $render = (new InputBuilder('foo', [
261
            'Constraints' => json_encode([
262
                'mincheck' => '3',
263
            ]),
264
        ]))->render();
265
266
        $this->assertEquals(<<<'T'
267
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" data-parsley-mincheck="3" class="form-control" /></div>
268
T, $render);
269
    }
270
271
    public function testItSetMaxCheckConstraint(): void
272
    {
273
        $render = (new InputBuilder('foo', [
274
            'Constraints' => json_encode([
275
                'maxcheck' => 5,
276
            ]),
277
        ]))->render();
278
279
        $this->assertEquals(<<<'T'
280
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" data-parsley-maxcheck="5" class="form-control" /></div>
281
T, $render);
282
    }
283
284
    public function testItSetCheckConstraint(): void
285
    {
286
        $render = (new InputBuilder('foo', [
287
            'Constraints' => json_encode([
288
                'check' => '[1,3]',
289
            ]),
290
        ]))->render();
291
292
        $this->assertEquals(<<<'T'
293
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" data-parsley-check="[1,3]" class="form-control" /></div>
294
T, $render);
295
    }
296
297
    public function testItSetEqualToConstraint(): void
298
    {
299
        $render = (new InputBuilder('foo', [
300
            'Constraints' => json_encode([
301
                'equalto' => '#another',
302
            ]),
303
        ]))->render();
304
305
        $this->assertEquals(<<<'T'
306
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" data-parsley-equalto="#another" class="form-control" /></div>
307
T, $render);
308
    }
309
310
    public function testItSetDataParsleyConstraint(): void
311
    {
312
        $render = (new InputBuilder('foo', [
313
            'Constraints' => json_encode([
314
                'data-parsley-validator-foo' => '#bar',
315
            ]),
316
        ]))->render();
317
318
        $this->assertEquals(<<<'T'
319
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" data-parsley-validator-foo="#bar" class="form-control" /></div>
320
T, $render);
321
    }
322
323
    public function testItSetHelp(): void
324
    {
325
        $render = (new InputBuilder('foo', [
326
            'Help' => 'A help block',
327
        ]))->render();
328
329
        $this->assertEquals(<<<'T'
330
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" aria-describedby="form_foo_help" class="form-control" /><small id="form_foo_help" class="form-text text-muted">A help block</small></div>
331
T, $render);
332
    }
333
334
    public function testItSetHelpAttr(): void
335
    {
336
        $render = (new InputBuilder('foo', [
337
            'Help' => 'A help block',
338
            'help_attr' => [
339
                'class' => 'help-class',
340
            ],
341
        ]))->render();
342
343
        $this->assertEquals(<<<'T'
344
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" aria-describedby="form_foo_help" class="form-control" /><small id="form_foo_help" class="help-class form-text text-muted">A help block</small></div>
345
T, $render);
346
    }
347
348
    public function testItSetHelpHtml(): void
349
    {
350
        $render = (new InputBuilder('foo', [
351
            'Help' => '<a href="link">A help block</a>',
352
            'help_html' => true,
353
        ]))->render();
354
355
        $this->assertEquals(<<<'T'
356
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" aria-describedby="form_foo_help" class="form-control" /><small id="form_foo_help" class="form-text text-muted"><a href="link">A help block</a></small></div>
357
T, $render);
358
    }
359
360
    public function testItSetAttrExtra(): void
361
    {
362
        $render = (new InputBuilder('foo', [
363
            'attr' => [
364
                'class' => 'input-class',
365
            ],
366
        ]))->render();
367
368
        $this->assertEquals(<<<'T'
369
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" class="input-class form-control" /></div>
370
T, $render);
371
    }
372
373
    public function testItSetAttrExtraWithEmptyData(): void
374
    {
375
        $render = (new InputBuilder('foo', [
376
            'attr' => [
377
                'class' => 'input-class',
378
            ],
379
            'empty_data' => 'default',
380
        ]))->render();
381
382
        $this->assertEquals(<<<'T'
383
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" class="input-class form-control" placeholder="default" /></div>
384
T, $render);
385
    }
386
387
    public function testItSetEmptyDataWithAttrExtra(): void
388
    {
389
        $render = (new InputBuilder('foo', [
390
            'empty_data' => 'default',
391
            'attr' => [
392
                'class' => 'input-class',
393
            ],
394
        ]))->render();
395
396
        $this->assertEquals(<<<'T'
397
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" placeholder="default" class="input-class form-control" /></div>
398
T, $render);
399
    }
400
401
    public function testItSetDisabled(): void
402
    {
403
        $render = (new InputBuilder('foo', [
404
            'disabled' => true,
405
        ]))->render();
406
407
        $this->assertEquals(<<<'T'
408
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" disabled="disabled" class="form-control" /></div>
409
T, $render);
410
    }
411
412
    public function testItSetEmptyData(): void
413
    {
414
        $render = (new InputBuilder('foo', [
415
            'empty_data' => 'default',
416
        ]))->render();
417
418
        $this->assertEquals(<<<'T'
419
<div class="form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" placeholder="default" class="form-control" /></div>
420
T, $render);
421
    }
422
423
    public function testItSetRowAttr(): void
424
    {
425
        $this->markTestSkipped('Not works...');
426
427
        $render = (new InputBuilder('foo', [
428
            'row_attr' => [
429
                'class' => 'row-class',
430
            ],
431
        ]))->render();
432
433
        $this->assertEquals(<<<'T'
434
<div class="row-class form-group"><label for="form_foo">Foo</label><input type="text" id="form_foo" name="form[foo]" class="form-control" /></div>
435
T, $render);
436
    }
437
438
    public function getDefaultWithSpacesOptions(): array
439
    {
440
        return [
441
            ['foo bar'],
442
            ['foo  bar'],
443
            [' foo bar '],
444
            [' foo bar'],
445
            ['foo bar '],
446
            ['  foo  bar  '],
447
        ];
448
    }
449
450
    public function getRequiredOptions(): array
451
    {
452
        return [
453
            [\json_encode(['required'])],
454
            [\json_encode(['required' => true])],
455
            [\json_encode(['required' => 'true'])],
456
            [\json_encode(['required' => 'required'])],
457
            ['required'],
458
        ];
459
    }
460
}
461