Passed
Push — master ( a1fd67...e2e77c )
by Garion
04:50 queued 10s
created

testUsesUserFormsRequiredFieldsValidator()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 5
nc 1
nop 0
dl 0
loc 7
rs 10
c 1
b 0
f 0
1
<?php
2
3
namespace SilverStripe\UserForms\Tests\Form;
4
5
use SilverStripe\CMS\Controllers\ModelAsController;
6
use SilverStripe\Dev\Debug;
7
use SilverStripe\Dev\SapphireTest;
8
use SilverStripe\UserForms\Form\UserFormsRequiredFields;
9
use SilverStripe\UserForms\Model\UserDefinedForm;
10
use SilverStripe\UserForms\Form\UserForm;
11
12
class UserFormsRequiredFieldsTest extends SapphireTest
13
{
14
    protected static $fixture_file = '../UserFormsTest.yml';
15
16
    private function getValidatorFromPage($page)
17
    {
18
        $controller = ModelAsController::controller_for($page);
19
        $form = new UserForm($controller);
20
        return $form->getValidator();
21
    }
22
23
    public function testUsesUserFormsRequiredFieldsValidator()
24
    {
25
        $page = $this->objFromFixture(UserDefinedForm::class, 'required-custom-rules-form');
26
        $this->assertEquals(3, $page->Fields()->count());
27
        $validator = $this->getValidatorFromPage($page);
28
        $this->assertNotNull($validator);
29
        $this->assertInstanceOf(UserFormsRequiredFields::class, $validator, 'Uses UserFormsRequiredFields validator');
30
    }
31
32
    public function dataProviderValidationOfConditionalRequiredFields()
33
    {
34
        return [
35
            'Passes when non-conditional required field has a value' => [
36
                [
37
                    'required-text-field-2'     => 'some text',
38
                    'radio-option-2'            => 'N',
39
                    'conditional-required-text' => ''
40
                ],
41
                true
42
            ],
43
            'Fails when conditional required is displayed but not completed' => [
44
                [
45
                    'required-text-field-2'     => 'some text',
46
                    'radio-option-2'            => 'Y',
47
                    'conditional-required-text' => ''
48
                ],
49
                false
50
            ],
51
            'Passes when conditional required field has a value' => [
52
                [
53
                    'required-text-field-2'     => 'some text',
54
                    'radio-option-2'            => 'Y',
55
                    'conditional-required-text' => 'some more text'
56
                ],
57
                true
58
            ]
59
        ];
60
    }
61
62
    /**
63
     * @param $data
64
     * @param $expected
65
     * @dataProvider dataProviderValidationOfConditionalRequiredFields
66
     */
67
    public function testValidationOfConditionalRequiredFields($data, $expected)
68
    {
69
        $page = $this->objFromFixture(UserDefinedForm::class, 'required-custom-rules-form');
70
        $validator = $this->getValidatorFromPage($page);
71
        $this->assertNotNull($validator);
72
73
        $this->assertFalse(
74
            $validator->php([]),
75
            'Fails when non-conditional required field is empty'
76
        );
77
78
        $this->assertEquals($expected, $validator->php($data));
79
    }
80
81
    public function dataProviderValidationOfNestedConditionalRequiredFields()
82
    {
83
        return [
84
            'Fails when non-conditional required field is empty' => [[], false],
85
            'Passes when non-conditional required field has a value' => [
86
                [
87
                    'required-text-field-3'       => 'some text',
88
                    'radio-option-3'              => 'N',
89
                    'conditional-required-text-2' => '',
90
                    'conditional-required-text-3' => ''
91
                ],
92
                true
93
            ],
94
            'Fails when conditional required is displayed but not completed' => [
95
                [
96
                    'required-text-field-3'       => 'some text',
97
                    'radio-option-3'              => 'Y',
98
                    'conditional-required-text-2' => '',
99
                    'conditional-required-text-3' => ''
100
                ],
101
                false
102
            ],
103
            'Passes when non-conditional required field has a value' => [
104
                [
105
                    'required-text-field-3'       => 'some text',
106
                    'radio-option-3'              => 'Y',
107
                    'conditional-required-text-2' => 'this text',
108
                    'conditional-required-text-3' => ''
109
                ],
110
                true
111
            ],
112
            'Fails when nested conditional required is displayed but not completed' => [
113
                [
114
                    'required-text-field-3'       => 'some text',
115
                    'radio-option-3'              => 'Y',
116
                    'conditional-required-text-2' => 'Show more',
117
                    'conditional-required-text-3' => ''
118
                ],
119
                false
120
            ],
121
            'Passes when nested conditional required field has a value' => [
122
                [
123
                    'required-text-field-3'       => 'some text',
124
                    'radio-option-3'              => 'Y',
125
                    'conditional-required-text-2' => 'Show more',
126
                    'conditional-required-text-3' => 'more text'
127
                ],
128
                true
129
            ]
130
        ];
131
    }
132
133
    /**
134
     * @param string $data
135
     * @param array $expected
136
     * @dataProvider dataProviderValidationOfNestedConditionalRequiredFields
137
     */
138
    public function testValidationOfNestedConditionalRequiredFields($data, $expected)
139
    {
140
        $page = $this->objFromFixture(UserDefinedForm::class, 'required-nested-custom-rules-form');
141
        $this->assertEquals(4, $page->Fields()->count());
142
        $validator = $this->getValidatorFromPage($page);
143
        $this->assertNotNull($validator);
144
145
        $this->assertEquals($expected, $validator->php($data));
0 ignored issues
show
Bug introduced by
$data of type string is incompatible with the type array expected by parameter $data of SilverStripe\Forms\Validator::php(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

145
        $this->assertEquals($expected, $validator->php(/** @scrutinizer ignore-type */ $data));
Loading history...
146
    }
147
}
148