Passed
Pull Request — master (#770)
by Jess
03:27
created

getValidatorFromPage()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

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