Completed
Push — master ( 4ad6bd...3873e4 )
by Ingo
11:53
created

ConfirmedPasswordFieldTest::testFormValidation()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 14
nc 1
nop 0
dl 0
loc 23
rs 9.0856
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\Forms\Tests;
4
5
use SilverStripe\Control\Controller;
6
use SilverStripe\Dev\SapphireTest;
7
use SilverStripe\Forms\ConfirmedPasswordField;
8
use SilverStripe\Forms\FieldList;
9
use SilverStripe\Forms\Form;
10
use SilverStripe\Forms\RequiredFields;
11
use SilverStripe\Security\Member;
12
13
class ConfirmedPasswordFieldTest extends SapphireTest
14
{
15
16
    public function testSetValue()
17
    {
18
        $field = new ConfirmedPasswordField('Test', 'Testing', 'valueA');
19
        $this->assertEquals('valueA', $field->Value());
20
        $this->assertEquals('valueA', $field->children->fieldByName($field->getName() . '[_Password]')->Value());
21
        $this->assertEquals('valueA', $field->children->fieldByName($field->getName() . '[_ConfirmPassword]')->Value());
22
        $field->setValue('valueB');
23
        $this->assertEquals('valueB', $field->Value());
24
        $this->assertEquals('valueB', $field->children->fieldByName($field->getName() . '[_Password]')->Value());
25
        $this->assertEquals('valueB', $field->children->fieldByName($field->getName() . '[_ConfirmPassword]')->Value());
26
    }
27
28
    public function testHashHidden()
29
    {
30
        $field = new ConfirmedPasswordField('Password', 'Password', 'valueA');
31
        $field->setCanBeEmpty(true);
32
33
        $this->assertEquals('valueA', $field->Value());
34
        $this->assertEquals('valueA', $field->children->fieldByName($field->getName() . '[_Password]')->Value());
35
        $this->assertEquals('valueA', $field->children->fieldByName($field->getName() . '[_ConfirmPassword]')->Value());
36
37
        $member = new Member();
38
        $member->Password = "valueB";
39
        $member->write();
40
41
        /** @skipUpgrade */
42
        $form = new Form(Controller::curr(), 'Form', new FieldList($field), new FieldList());
43
        $form->loadDataFrom($member);
44
45
        $this->assertEquals('', $field->Value());
46
        $this->assertEquals('', $field->children->fieldByName($field->getName() . '[_Password]')->Value());
47
        $this->assertEquals('', $field->children->fieldByName($field->getName() . '[_ConfirmPassword]')->Value());
48
    }
49
50
    public function testSetShowOnClick()
51
    {
52
        //hide by default and display show/hide toggle button
53
        $field = new ConfirmedPasswordField('Test', 'Testing', 'valueA', null, true);
54
        $fieldHTML = $field->Field();
55
        $this->assertContains(
56
            "showOnClickContainer",
57
            $fieldHTML,
58
            "Test class for hiding/showing the form contents is set"
59
        );
60
        $this->assertContains(
61
            "showOnClick",
62
            $fieldHTML,
63
            "Test class for hiding/showing the form contents is set"
64
        );
65
66
        //show all by default
67
        $field = new ConfirmedPasswordField('Test', 'Testing', 'valueA', null, false);
68
        $fieldHTML = $field->Field();
69
        $this->assertNotContains(
70
            "showOnClickContainer",
71
            $fieldHTML,
72
            "Test class for hiding/showing the form contents is set"
73
        );
74
        $this->assertNotContains(
75
            "showOnClick",
76
            $fieldHTML,
77
            "Test class for hiding/showing the form contents is set"
78
        );
79
    }
80
81
    public function testValidation()
82
    {
83
        $field = new ConfirmedPasswordField(
84
            'Test',
85
            'Testing',
86
            array(
87
            "_Password" => "abc123",
88
            "_ConfirmPassword" => "abc123"
89
            )
90
        );
91
        $validator = new RequiredFields();
92
        /** @skipUpgrade */
93
        new Form(Controller::curr(), 'Form', new FieldList($field), new FieldList(), $validator);
94
        $this->assertTrue(
95
            $field->validate($validator),
96
            "Validates when both passwords are the same"
97
        );
98
        $field->setName("TestNew"); //try changing name of field
99
        $this->assertTrue(
100
            $field->validate($validator),
101
            "Validates when field name is changed"
102
        );
103
        //non-matching password should make the field invalid
104
        $field->setValue(
105
            array(
106
            "_Password" => "abc123",
107
            "_ConfirmPassword" => "123abc"
108
            )
109
        );
110
        $this->assertFalse(
111
            $field->validate($validator),
112
            "Does not validate when passwords differ"
113
        );
114
    }
115
116
    public function testFormValidation()
117
    {
118
        /** @skipUpgrade */
119
        $form = new Form(
120
            Controller::curr(),
121
            'Form',
122
            new FieldList($field = new ConfirmedPasswordField('Password')),
123
            new FieldList()
124
        );
125
126
        $form->loadDataFrom(
127
            array(
128
            'Password' => array(
129
                '_Password' => '123',
130
                '_ConfirmPassword' => '999',
131
            )
132
            )
133
        );
134
135
        $this->assertEquals('123', $field->children->first()->Value());
136
        $this->assertEquals('999', $field->children->last()->Value());
137
        $this->assertNotEquals($field->children->first()->Value(), $field->children->last()->Value());
138
    }
139
}
140