mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
More validation tests for ConfirmedPasswordField
This commit is contained in:
parent
c418ee2915
commit
8929b8204f
@ -573,7 +573,7 @@ class ConfirmedPasswordField extends FormField
|
|||||||
public function performReadonlyTransformation()
|
public function performReadonlyTransformation()
|
||||||
{
|
{
|
||||||
/** @var ReadonlyField $field */
|
/** @var ReadonlyField $field */
|
||||||
$field = $this->castedCopy('SilverStripe\\Forms\\ReadonlyField')
|
$field = $this->castedCopy(ReadonlyField::class)
|
||||||
->setTitle($this->title ? $this->title : _t('SilverStripe\\Security\\Member.PASSWORD', 'Password'))
|
->setTitle($this->title ? $this->title : _t('SilverStripe\\Security\\Member.PASSWORD', 'Password'))
|
||||||
->setValue('*****');
|
->setValue('*****');
|
||||||
|
|
||||||
|
@ -7,12 +7,12 @@ use SilverStripe\Dev\SapphireTest;
|
|||||||
use SilverStripe\Forms\ConfirmedPasswordField;
|
use SilverStripe\Forms\ConfirmedPasswordField;
|
||||||
use SilverStripe\Forms\FieldList;
|
use SilverStripe\Forms\FieldList;
|
||||||
use SilverStripe\Forms\Form;
|
use SilverStripe\Forms\Form;
|
||||||
|
use SilverStripe\Forms\ReadonlyField;
|
||||||
use SilverStripe\Forms\RequiredFields;
|
use SilverStripe\Forms\RequiredFields;
|
||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
|
|
||||||
class ConfirmedPasswordFieldTest extends SapphireTest
|
class ConfirmedPasswordFieldTest extends SapphireTest
|
||||||
{
|
{
|
||||||
|
|
||||||
public function testSetValue()
|
public function testSetValue()
|
||||||
{
|
{
|
||||||
$field = new ConfirmedPasswordField('Test', 'Testing', 'valueA');
|
$field = new ConfirmedPasswordField('Test', 'Testing', 'valueA');
|
||||||
@ -25,6 +25,9 @@ class ConfirmedPasswordFieldTest extends SapphireTest
|
|||||||
$this->assertEquals('valueB', $field->children->fieldByName($field->getName() . '[_ConfirmPassword]')->Value());
|
$this->assertEquals('valueB', $field->children->fieldByName($field->getName() . '[_ConfirmPassword]')->Value());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @useDatabase true
|
||||||
|
*/
|
||||||
public function testHashHidden()
|
public function testHashHidden()
|
||||||
{
|
{
|
||||||
$field = new ConfirmedPasswordField('Password', 'Password', 'valueA');
|
$field = new ConfirmedPasswordField('Password', 'Password', 'valueA');
|
||||||
@ -202,6 +205,73 @@ class ConfirmedPasswordFieldTest extends SapphireTest
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testCurrentPasswordValidation()
|
||||||
|
{
|
||||||
|
$field = new ConfirmedPasswordField('Test', 'Testing', [
|
||||||
|
'_Password' => 'abc',
|
||||||
|
'_ConfirmPassword' => 'abc',
|
||||||
|
]);
|
||||||
|
$field->setRequireExistingPassword(true);
|
||||||
|
|
||||||
|
$validator = new RequiredFields();
|
||||||
|
$result = $field->validate($validator);
|
||||||
|
|
||||||
|
$this->assertFalse($result, 'Validate method should return its result');
|
||||||
|
$this->assertFalse($validator->getResult()->isValid());
|
||||||
|
$this->assertContains(
|
||||||
|
'You must enter your current password',
|
||||||
|
$validator->getResult()->serialize()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMustBeLoggedInToChangePassword()
|
||||||
|
{
|
||||||
|
$field = new ConfirmedPasswordField('Test', 'Testing');
|
||||||
|
$field->setRequireExistingPassword(true);
|
||||||
|
$field->setValue([
|
||||||
|
'_CurrentPassword' => 'foo',
|
||||||
|
'_Password' => 'abc',
|
||||||
|
'_ConfirmPassword' => 'abc',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$validator = new RequiredFields();
|
||||||
|
$this->logOut();
|
||||||
|
$result = $field->validate($validator);
|
||||||
|
|
||||||
|
$this->assertFalse($result, 'Validate method should return its result');
|
||||||
|
$this->assertFalse($validator->getResult()->isValid());
|
||||||
|
$this->assertContains(
|
||||||
|
'You must be logged in to change your password',
|
||||||
|
$validator->getResult()->serialize()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @useDatabase true
|
||||||
|
*/
|
||||||
|
public function testValidateCorrectPassword()
|
||||||
|
{
|
||||||
|
$this->logInWithPermission('ADMIN');
|
||||||
|
|
||||||
|
$field = new ConfirmedPasswordField('Test', 'Testing');
|
||||||
|
$field->setRequireExistingPassword(true);
|
||||||
|
$field->setValue([
|
||||||
|
'_CurrentPassword' => 'foo-not-going-to-be-the-correct-password',
|
||||||
|
'_Password' => 'abc',
|
||||||
|
'_ConfirmPassword' => 'abc',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$validator = new RequiredFields();
|
||||||
|
$result = $field->validate($validator);
|
||||||
|
|
||||||
|
$this->assertFalse($result, 'Validate method should return its result');
|
||||||
|
$this->assertFalse($validator->getResult()->isValid());
|
||||||
|
$this->assertContains(
|
||||||
|
'The current password you have entered is not correct',
|
||||||
|
$validator->getResult()->serialize()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public function testTitle()
|
public function testTitle()
|
||||||
{
|
{
|
||||||
$this->assertNull(ConfirmedPasswordField::create('Test')->Title(), 'Should not have it\'s own title');
|
$this->assertNull(ConfirmedPasswordField::create('Test')->Title(), 'Should not have it\'s own title');
|
||||||
@ -218,8 +288,7 @@ class ConfirmedPasswordFieldTest extends SapphireTest
|
|||||||
|
|
||||||
public function testSetRightTitlePropagatesToChildren()
|
public function testSetRightTitlePropagatesToChildren()
|
||||||
{
|
{
|
||||||
/** @var ConfirmedPasswordField $field */
|
$field = new ConfirmedPasswordField('Test');
|
||||||
$field = ConfirmedPasswordField::create('Test');
|
|
||||||
|
|
||||||
$this->assertCount(2, $field->getChildren());
|
$this->assertCount(2, $field->getChildren());
|
||||||
foreach ($field->getChildren() as $child) {
|
foreach ($field->getChildren() as $child) {
|
||||||
@ -234,8 +303,7 @@ class ConfirmedPasswordFieldTest extends SapphireTest
|
|||||||
|
|
||||||
public function testSetChildrenTitles()
|
public function testSetChildrenTitles()
|
||||||
{
|
{
|
||||||
/** @var ConfirmedPasswordField $field */
|
$field = new ConfirmedPasswordField('Test');
|
||||||
$field = ConfirmedPasswordField::create('Test');
|
|
||||||
$field->setRequireExistingPassword(true);
|
$field->setRequireExistingPassword(true);
|
||||||
$field->setChildrenTitles([
|
$field->setChildrenTitles([
|
||||||
'Current Password',
|
'Current Password',
|
||||||
@ -247,4 +315,38 @@ class ConfirmedPasswordFieldTest extends SapphireTest
|
|||||||
$this->assertSame('Password', $field->getChildren()->shift()->Title());
|
$this->assertSame('Password', $field->getChildren()->shift()->Title());
|
||||||
$this->assertSame('Confirm Password', $field->getChildren()->shift()->Title());
|
$this->assertSame('Confirm Password', $field->getChildren()->shift()->Title());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testPerformReadonlyTransformation()
|
||||||
|
{
|
||||||
|
$field = new ConfirmedPasswordField('Test', 'Change it');
|
||||||
|
$result = $field->performReadonlyTransformation();
|
||||||
|
|
||||||
|
$this->assertInstanceOf(ReadonlyField::class, $result);
|
||||||
|
$this->assertSame('Change it', $result->Title());
|
||||||
|
$this->assertContains('***', $result->Value());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPerformDisabledTransformation()
|
||||||
|
{
|
||||||
|
$field = new ConfirmedPasswordField('Test', 'Change it');
|
||||||
|
$result = $field->performDisabledTransformation();
|
||||||
|
|
||||||
|
$this->assertInstanceOf(ReadonlyField::class, $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSetRequireExistingPasswordOnlyRunsOnce()
|
||||||
|
{
|
||||||
|
$field = new ConfirmedPasswordField('Test', 'Change it');
|
||||||
|
|
||||||
|
$this->assertCount(2, $field->getChildren());
|
||||||
|
|
||||||
|
$field->setRequireExistingPassword(true);
|
||||||
|
$this->assertCount(3, $field->getChildren(), 'Current password field was not pushed');
|
||||||
|
|
||||||
|
$field->setRequireExistingPassword(true);
|
||||||
|
$this->assertCount(3, $field->getChildren(), 'Current password field should not be pushed again');
|
||||||
|
|
||||||
|
$field->setRequireExistingPassword(false);
|
||||||
|
$this->assertCount(2, $field->getChildren(), 'Current password field should not be removed');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user