Browse Source

Refactor and add tests.

euromark 11 years ago
parent
commit
9b4e230272

+ 12 - 6
Locale/deu/LC_MESSAGES/tools.po

@@ -341,7 +341,7 @@ msgstr ""
 #: Model/Behavior/PasswordableBehavior.php:231
 #: Test/Case/Model/Behavior/PasswordableBehaviorTest.php:95
 msgid "valErrPwdNotMatch"
-msgstr "Die beiden Passwörter stimmen nicht überein"
+msgstr "Die beiden Passwörter stimmen nicht überein."
 
 #: Test/Case/Lib/SpellLibTest.php:13
 msgid "Module %s not installed"
@@ -425,7 +425,7 @@ msgstr ""
 
 #: Test/Case/Model/Behavior/PasswordableBehaviorTest.php:769;770
 msgid "valErrBetweenCharacters %s %s"
-msgstr "Zwischen %s und %s Zeichen"
+msgstr "Bitte zwischen %s und %s Zeichen eingeben."
 
 #: Test/Case/Model/Behavior/SluggedBehaviorTest.php:288
 msgid "and"
@@ -699,8 +699,14 @@ msgstr ""
 msgid "List %s"
 msgstr ""
 
-#~ msgid "valErrProvideCurrentPwd"
-#~ msgstr "Bitte das bisherige Passwort eingeben"
+msgid "valErrProvideCurrentPwd"
+msgstr "Bitte das bisherige Passwort eingeben."
 
-#~ msgid "valErrCurrentPwdIncorrect"
-#~ msgstr "Das bisherige Passwort ist nicht korrekt"
+msgid "valErrCurrentPwdIncorrect"
+msgstr "Das bisherige Passwort ist nicht korrekt."
+
+msgid "valErrPwdRepeat"
+msgstr "Bitte das Passwort erneut eingeben."
+
+msgid "valErrPwdSameAsBefore"
+msgstr "Bitte ein anderes Passwort benutzen als das bisherige."

+ 16 - 20
Model/Behavior/PasswordableBehavior.php

@@ -64,18 +64,17 @@ class PasswordableBehavior extends ModelBehavior {
 		'allowSame' => true, // Don't allow the old password on change
 		'minLength' => PWD_MIN_LENGTH,
 		'maxLength' => PWD_MAX_LENGTH,
-		'customValidationRule' => null,
-		'customValidationMessage' => null
+		'customValidation' => null // Custom validation rule(s) for the formField
 	);
 
 	function __construct() {
 		parent::__construct();
-		
+
 		$this->_validationRules = array(
 			'formField' => array(
 				'between' => array(
 					'rule' => array('between', PWD_MIN_LENGTH, PWD_MAX_LENGTH),
-					'message' => __('Your password has to be between %s and %s characters long', PWD_MIN_LENGTH, PWD_MAX_LENGTH),
+					'message' => __d('tools', 'valErrBetweenCharacters %s %s', PWD_MIN_LENGTH, PWD_MAX_LENGTH),
 					'allowEmpty' => null,
 					'last' => true,
 				)
@@ -83,13 +82,13 @@ class PasswordableBehavior extends ModelBehavior {
 			'formFieldRepeat' => array(
 				'validateNotEmpty' => array(
 					'rule' => array('notEmpty'),
-					'message' => __('Please repeat your password'),
+					'message' => __d('tools', 'valErrPwdRepeat'),
 					'allowEmpty' => true,
 					'last' => true,
 				),
 				'validateIdentical' => array(
 					'rule' => array('validateIdentical', 'formField'),
-					'message' => __('These passwords do not match'),
+					'message' => __d('tools', 'valErrPwdNotMatch'),
 					'allowEmpty' => null,
 					'last' => true,
 				),
@@ -97,13 +96,13 @@ class PasswordableBehavior extends ModelBehavior {
 			'formFieldCurrent' => array(
 				'notEmpty' => array(
 					'rule' => array('notEmpty'),
-					'message' => __('Please provide your current password'),
+					'message' => __d('tools', 'valErrProvideCurrentPwd'),
 					'allowEmpty' => null,
 					'last' => true,
 				),
 				'validateCurrentPwd' => array(
 					'rule' => 'validateCurrentPwd',
-					'message' => __('Your current password is not correct'),
+					'message' => __d('tools', 'valErrCurrentPwdIncorrect'),
 					'allowEmpty' => null,
 					'last' => true,
 				)
@@ -142,9 +141,9 @@ class PasswordableBehavior extends ModelBehavior {
 			foreach ($fieldRules as $key => $rule) {
 				$rule['allowEmpty'] = !$this->settings[$Model->alias]['require'];
 
-				if ($key === 'between') {				
+				if ($key === 'between') {
 					$rule['rule'] = array('between', $this->settings[$Model->alias]['minLength'], $this->settings[$Model->alias]['maxLength']);
-					$rule['message'] = __('Your password has to be between %s and %s characters', $this->settings[$Model->alias]['minLength'], $this->settings[$Model->alias]['maxLength']);
+					$rule['message'] = __d('tools', 'valErrBetweenCharacters %s %s', $this->settings[$Model->alias]['minLength'], $this->settings[$Model->alias]['maxLength']);
 				}
 
 				$fieldRules[$key] = $rule;
@@ -168,7 +167,7 @@ class PasswordableBehavior extends ModelBehavior {
 			if (!$this->settings[$Model->alias]['allowSame']) {
 				$Model->validator()->add($formField, 'validateNotSame', array(
 					'rule' => array('validateNotSame', $formField, $formFieldCurrent),
-					'message' => __('Please use a different password than your previous one'),
+					'message' => __d('tools', 'valErrPwdSameAsBefore'),
 					'allowEmpty' => !$this->settings[$Model->alias]['require'],
 					'last' => true,
 				));
@@ -178,20 +177,17 @@ class PasswordableBehavior extends ModelBehavior {
 			if (!$this->settings[$Model->alias]['allowSame']) {
 				$Model->validator()->add($formField, 'validateNotSame', array(
 					'rule' => array('validateNotSameHash', $formField),
-					'message' => __('Please use a different password than your previous one'),
+					'message' => __d('tools', 'valErrPwdSameAsBefore'),
 					'allowEmpty' => !$this->settings[$Model->alias]['require'],
 					'last' => true,
 				));
 			}
 		}
-		
-		// Add custom rule if configured
-		if ($this->settings[$Model->alias]['customValidationRule']) {
-			$Model->validator()->add($formField, 'validateCustom', array(
-				'rule' => array('custom', $this->settings[$Model->alias]['customValidationRule']),
-				'message' => $this->settings[$Model->alias]['customValidationMessage'],
-				'last' => true,
-			));			
+
+		// Add custom rule(s) if configured
+		if ($this->settings[$Model->alias]['customValidation']) {
+			$Model->validator()->add($formField, $this->settings[$Model->alias]['customValidation']);
+			//debug($Model->validator()[$formField]);die();
 		}
 	}
 

+ 2 - 1
README.md

@@ -167,4 +167,5 @@ For details on how to contribute please read the [CONTRIBUTING page](CONTRIBUTIN
 * 2014-01 Changed Garbige to Garbage in method names.
 * 2014-02 Qlogin now uses Token model instead of deprecated CodeKey per default.
 * 2014-07 Packagist package name has been renamed to "cakephp-tools".
-* 2014-11 All translations now use the `tools` domain; development messages are not translated anymore
+* 2014-11 All translations now use the `tools` domain; development messages are not translated anymore
+* 2014-12 Some model validations have also been transformed from generic `validation` into `tools` domain.

+ 60 - 3
Test/Case/Model/Behavior/PasswordableBehaviorTest.php

@@ -21,6 +21,8 @@ class PasswordableBehaviorTest extends CakeTestCase {
 	public function setUp() {
 		parent::setUp();
 
+		Configure::write('Config.language', 'deu');
+
 		Configure::delete('Passwordable');
 		Configure::write('Passwordable.auth', 'AuthTest');
 
@@ -206,6 +208,62 @@ class PasswordableBehaviorTest extends CakeTestCase {
 	}
 
 	/**
+	 * PasswordableBehaviorTest::testValidateCustomRule()
+	 *
+	 * @return void
+	 */
+	public function testValidateCustomRule() {
+		$rules = array('validateCustom' => array(
+				'rule' => array('custom', '#^[a-z0-9]+$#'), // Just a test example, never use this regexp!
+				'message' => 'Foo Bar',
+				'last' => true,
+			),
+			'validateCustomExt' => array(
+				'rule' => array('custom', '#^[a-z]+$#'), // Just a test example, never use this regexp!
+				'message' => 'Foo Bar Ext',
+				'last' => true,
+			)
+		);
+		$this->User->Behaviors->load('Tools.Passwordable', array(
+			'customValidation' => $rules));
+
+		$this->User->create();
+		$data = array(
+			'pwd' => '%123456',
+			'pwd_repeat' => '%123456'
+		);
+		$this->User->set($data);
+		$is = $this->User->save();
+		$this->assertFalse($is);
+
+		$result = $this->User->validationErrors;
+		$expected = array('pwd' => array('Foo Bar'));
+		$this->assertSame($expected, $result);
+
+		$this->User->create();
+		$data = array(
+			'pwd' => 'abc123',
+			'pwd_repeat' => 'abc123'
+		);
+		$this->User->set($data);
+		$is = $this->User->save();
+		$this->assertFalse($is);
+
+		$result = $this->User->validationErrors;
+		$expected = array('pwd' => array('Foo Bar Ext'));
+		$this->assertSame($expected, $result);
+
+		$this->User->create();
+		$data = array(
+			'pwd' => 'abcdef',
+			'pwd_repeat' => 'abcdef'
+		);
+		$this->User->set($data);
+		$is = $this->User->save();
+		$this->assertTrue((bool)$is);
+	}
+
+	/**
 	 * Test aliases for field names
 	 */
 	public function testDifferentFieldNames() {
@@ -393,7 +451,7 @@ class PasswordableBehaviorTest extends CakeTestCase {
 		$is = $this->User->save(null, $options);
 		$this->assertTrue(!empty($is));
 
-		$user = $this->User->get($uid);
+		$user = $this->User->findById($uid);
 		// The password is updated, the name not
 		$this->assertSame($is['ToolsUser']['password'], $user['ToolsUser']['password']);
 		$this->assertSame('xyz', $user['ToolsUser']['name']);
@@ -766,8 +824,7 @@ class PasswordableBehaviorTest extends CakeTestCase {
 		$result = $this->User->save();
 		$this->assertFalse($result);
 		$expected = array(
-			'pwd' => array(__d('tools', 'valErrBetweenCharacters %s %s', 3, 6)),
-			'pwd_repeat' => array(__d('tools', 'valErrBetweenCharacters %s %s', 3, 6))
+			'pwd' => array(__d('tools', 'valErrBetweenCharacters %s %s', 3, 6))
 		);
 		$this->assertEquals($expected, $this->User->validationErrors);
 	}