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

UserFormsRequiredFieldsTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 93
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 93
rs 10
c 0
b 0
f 0
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
B testValidationOfConditionalRequiredFields() 0 27 1
A getValidatorFromPage() 0 5 1
B testValidationOfNestedConditionalRequiredFields() 0 44 1
A testUsesUserFormsRequiredFieldsValidator() 0 7 1
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($validator->php([]),
39
            'Fails when non-conditional required field is empty');
40
41
        $this->assertTrue($validator->php([
42
            'required-text-field-2'     => 'some text',
43
            'radio-option-2'            => 'N',
44
            'conditional-required-text' => ''
45
        ]),
46
            'Passes when non-conditional required field has a value');
47
48
        $this->assertFalse($validator->php([
49
            'required-text-field-2'     => 'some text',
50
            'radio-option-2'            => 'Y',
51
            'conditional-required-text' => ''
52
        ]), 'Fails when conditional required is displayed but not completed');
53
54
        $this->assertTrue($validator->php([
55
            'required-text-field-2'     => 'some text',
56
            'radio-option-2'            => 'Y',
57
            'conditional-required-text' => 'some more text'
58
        ]), 'Passes when conditional required field has a value');
59
    }
60
61
    public function testValidationOfNestedConditionalRequiredFields()
62
    {
63
        $page = $this->objFromFixture(UserDefinedForm::class, 'required-nested-custom-rules-form');
64
        $this->assertEquals(4, $page->Fields()->count());
65
        $validator = $this->getValidatorFromPage($page);
66
        $this->assertNotNull($validator);
67
68
        $this->assertFalse($validator->php([]),
69
            'Fails when non-conditional required field is empty');
70
71
        $this->assertTrue($validator->php([
72
            'required-text-field-3'       => 'some text',
73
            'radio-option-2'              => 'N',
74
            'conditional-required-text-2' => '',
75
            'conditional-required-text-3' => ''
76
        ]), 'Passes when non-conditional required field has a value');
77
78
        $this->assertFalse($validator->php([
79
            'required-text-field-3'       => 'some text',
80
            'radio-option-2'              => 'Y',
81
            'conditional-required-text-2' => '',
82
            'conditional-required-text-3' => ''
83
        ]), 'Fails when conditional required is displayed but not completed');
84
85
        $this->assertTrue($validator->php([
86
            'required-text-field-3'       => 'some text',
87
            'radio-option-3'              => 'Y',
88
            'conditional-required-text-2' => 'this text',
89
            'conditional-required-text-3' => ''
90
        ]), 'Passes when non-conditional required field has a value');
91
92
        $this->assertFalse($validator->php([
93
            'required-text-field-3'       => 'some text',
94
            'radio-option-3'              => 'Y',
95
            'conditional-required-text-2' => 'Show more',
96
            'conditional-required-text-3' => ''
97
        ]), 'Fails when nested conditional required is displayed but not completed');
98
99
        $this->assertTrue($validator->php([
100
            'required-text-field-3'       => 'some text',
101
            'radio-option-3'              => 'Y',
102
            'conditional-required-text-2' => 'Show more',
103
            'conditional-required-text-3' => 'more text'
104
        ]), 'Passes when nested conditional required field has a value');
105
    }
106
}
107