Passed
Pull Request — 4.3 (#8604)
by Robbie
08:48
created

ConfirmedPasswordFieldTest::setUp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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