public function testMemberValidatorWithExtensions() { // clear custom requirements for this test Config::inst()->update('SilverStripe\\Security\\Member_Validator', 'customRequired', null); // create a blank form $form = new MemberTest_ValidatorForm(); // Test extensions Member_Validator::add_extension('MemberTest_MemberValidator_SurnameMustMatchFirstNameExtension'); $validator = new Member_Validator(); $validator->setForm($form); // This test should fail, since the extension enforces FirstName == Surname $fail = $validator->php(array('FirstName' => 'Test', 'Surname' => 'User', 'Email' => '*****@*****.**')); $pass = $validator->php(array('FirstName' => 'Test', 'Surname' => 'Test', 'Email' => '*****@*****.**')); $this->assertFalse($fail, 'Member_Validator must fail because of added extension.'); $this->assertTrue($pass, 'Member_Validator must succeed, since it meets all requirements.'); // Add another extension that always fails. This ensures that all extensions are considered in the validation Member_Validator::add_extension('MemberTest_MemberValidator_AlwaysFailsExtension'); $validator = new Member_Validator(); $validator->setForm($form); // Even though the data is valid, This test should still fail, since one extension always returns false $fail = $validator->php(array('FirstName' => 'Test', 'Surname' => 'Test', 'Email' => '*****@*****.**')); $this->assertFalse($fail, 'Member_Validator must fail because of added extensions.'); // Remove added extensions Member_Validator::remove_extension('MemberTest_MemberValidator_AlwaysFailsExtension'); Member_Validator::remove_extension('MemberTest_MemberValidator_SurnameMustMatchFirstNameExtension'); }