public function testMemberValidator() { // clear custom requirements for this test Config::inst()->update('SilverStripe\\Security\\Member_Validator', 'customRequired', null); $memberA = $this->objFromFixture('SilverStripe\\Security\\Member', 'admin'); $memberB = $this->objFromFixture('SilverStripe\\Security\\Member', 'test'); // create a blank form $form = new MemberTest_ValidatorForm(); $validator = new Member_Validator(); $validator->setForm($form); // Simulate creation of a new member via form, but use an existing member identifier $fail = $validator->php(array('FirstName' => 'Test', 'Email' => $memberA->Email)); $this->assertFalse($fail, 'Member_Validator must fail when trying to create new Member with existing Email.'); // populate the form with values from another member $form->loadDataFrom($memberB); // Assign the validator to an existing member // (this is basically the same as passing the member ID with the form data) $validator->setForMember($memberB); // Simulate update of a member via form and use an existing member Email $fail = $validator->php(array('FirstName' => 'Test', 'Email' => $memberA->Email)); // Simulate update to a new Email address $pass1 = $validator->php(array('FirstName' => 'Test', 'Email' => '*****@*****.**')); // Pass in the same Email address that the member already has. Ensure that case is valid $pass2 = $validator->php(array('FirstName' => 'Test', 'Surname' => 'User', 'Email' => $memberB->Email)); $this->assertFalse($fail, 'Member_Validator must fail when trying to update existing member with existing Email.'); $this->assertTrue($pass1, 'Member_Validator must pass when Email is updated to a value that\'s not in use.'); $this->assertTrue($pass2, 'Member_Validator must pass when Member updates his own Email to the already existing value.'); }