Passed
Pull Request — master (#770)
by Jess
04:46
created

testValidationOfConditionalRequiredFields()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 42
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 24
nc 1
nop 0
dl 0
loc 42
rs 8.8571
c 0
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 testValidationOfConditionalRequiredFields()
33
    {
34
        $page = $this->objFromFixture(UserDefinedForm::class, 'required-custom-rules-form');
35
        $validator = $this->getValidatorFromPage($page);
36
        $this->assertNotNull($validator);
37
38
        $this->assertFalse(
39
            $validator->php([]),
40
            'Fails when non-conditional required field is empty'
41
        );
42
43
        $this->assertTrue(
44
            $validator->php(
45
                [
46
                    'required-text-field-2'     => 'some text',
47
                    'radio-option-2'            => 'N',
48
                    'conditional-required-text' => ''
49
                ]
50
            ),
51
            'Passes when non-conditional required field has a value'
52
        );
53
54
        $this->assertFalse(
55
            $validator->php(
56
                [
57
                    'required-text-field-2'     => 'some text',
58
                    'radio-option-2'            => 'Y',
59
                    'conditional-required-text' => ''
60
                ]
61
            ),
62
            'Fails when conditional required is displayed but not completed'
63
        );
64
65
        $this->assertTrue(
66
            $validator->php(
67
                [
68
                    'required-text-field-2'     => 'some text',
69
                    'radio-option-2'            => 'Y',
70
                    'conditional-required-text' => 'some more text'
71
                ]
72
            ),
73
            'Passes when conditional required field has a value'
74
        );
75
    }
76
77
    public function testValidationOfNestedConditionalRequiredFields()
78
    {
79
        $page = $this->objFromFixture(UserDefinedForm::class, 'required-nested-custom-rules-form');
80
        $this->assertEquals(4, $page->Fields()->count());
81
        $validator = $this->getValidatorFromPage($page);
82
        $this->assertNotNull($validator);
83
84
        $this->assertFalse(
85
            $validator->php([]),
86
            'Fails when non-conditional required field is empty'
87
        );
88
89
        $this->assertTrue(
90
            $validator->php(
91
                [
92
                    'required-text-field-3'       => 'some text',
93
                    'radio-option-2'              => 'N',
94
                    'conditional-required-text-2' => '',
95
                    'conditional-required-text-3' => ''
96
                ]
97
            ),
98
            'Passes when non-conditional required field has a value'
99
        );
100
101
        $this->assertFalse(
102
            $validator->php(
103
                [
104
                    'required-text-field-3'       => 'some text',
105
                    'radio-option-2'              => 'Y',
106
                    'conditional-required-text-2' => '',
107
                    'conditional-required-text-3' => ''
108
                ]
109
            ),
110
            'Fails when conditional required is displayed but not completed'
111
        );
112
113
        $this->assertTrue(
114
            $validator->php(
115
                [
116
                    'required-text-field-3'       => 'some text',
117
                    'radio-option-3'              => 'Y',
118
                    'conditional-required-text-2' => 'this text',
119
                    'conditional-required-text-3' => ''
120
                ]
121
            ),
122
            'Passes when non-conditional required field has a value'
123
        );
124
125
        $this->assertFalse(
126
            $validator->php(
127
                [
128
                    'required-text-field-3'       => 'some text',
129
                    'radio-option-3'              => 'Y',
130
                    'conditional-required-text-2' => 'Show more',
131
                    'conditional-required-text-3' => ''
132
                ]
133
            ),
134
            'Fails when nested conditional required is displayed but not completed'
135
        );
136
137
        $this->assertTrue(
138
            $validator->php(
139
                [
140
                    'required-text-field-3'       => 'some text',
141
                    'radio-option-3'              => 'Y',
142
                    'conditional-required-text-2' => 'Show more',
143
                    'conditional-required-text-3' => 'more text'
144
                ]
145
            ),
146
            'Passes when nested conditional required field has a value'
147
        );
148
    }
149
}
150