ソースを参照

making passwordable tests pass again and use new validator object

euromark 13 年 前
コミット
cd890a3abe

+ 12 - 10
Model/Behavior/PasswordableBehavior.php

@@ -1,5 +1,6 @@
 <?php
 App::uses('ModelBehavior', 'Model');
+App::uses('Router', 'Routing');
 App::uses('CakeResponse', 'Network');
 App::uses('Security', 'Utility');
 
@@ -133,7 +134,7 @@ class PasswordableBehavior extends ModelBehavior {
 			$auth = $this->settings[$Model->alias]['auth'].'Component';
 			$this->Auth = new $auth(new ComponentCollection());
 		} else {
-			throw new CakeException('No validation class found');
+			throw new CakeException('No Authentication class found (' . $this->settings[$Model->alias]['auth'] . ')');
 		}
 		# easiest authenticate method via form and (id + pwd)
 		$this->Auth->authenticate = array(
@@ -141,7 +142,7 @@ class PasswordableBehavior extends ModelBehavior {
 				'fields'=>array('username' => 'id', 'password'=>$this->settings[$Model->alias]['field'])
 			)
 		);
-		$request = new CakeRequest(null, false);
+		$request = Router::getRequest();
 		$request->data['User'] = array('id'=>$uid, 'password'=>$pwd);
 		$response = new CakeResponse();
 		return (bool)$this->Auth->identify($request, $response);
@@ -216,33 +217,34 @@ class PasswordableBehavior extends ModelBehavior {
 
 		# add the validation rules if not already attached
 		if (!isset($Model->validate[$formField])) {
-			$Model->validate[$formField] = $rules['formField'];
+			$Model->validator()->add($formField, $rules['formField']);
 		}
 		if (!isset($Model->validate[$formFieldRepeat])) {
-			$Model->validate[$formFieldRepeat] = $rules['formFieldRepeat'];
-			$Model->validate[$formFieldRepeat]['validateIdentical']['rule'][1] = $formField;
+			$ruleSet = $rules['formFieldRepeat'];
+			$ruleSet['validateIdentical']['rule'][1] = $formField;
+			$Model->validator()->add($formFieldRepeat, $ruleSet);
 		}
 
 		if ($this->settings[$Model->alias]['current'] && !isset($Model->validate[$formFieldCurrent])) {
-			$Model->validate[$formFieldCurrent] = $rules['formFieldCurrent'];
+			$Model->validator()->add($formFieldCurrent, $rules['formFieldCurrent']);
 
 			if (!$this->settings[$Model->alias]['allowSame']) {
-				$Model->validate[$formField]['validateNotSame'] = array(
+				$Model->validator()->add($formField, 'validateNotSame', array(
 					'rule' => array('validateNotSame', $formField, $formFieldCurrent),
 					'message' => 'valErrPwdSameAsBefore',
 					'allowEmpty' => $this->settings[$Model->alias]['allowEmpty'],
 					'last' => true,
-				);
+				));
 			}
 		} elseif (!isset($Model->validate[$formFieldCurrent])) {
 			# try to match the password against the hash in the DB
 			if (!$this->settings[$Model->alias]['allowSame']) {
-				$Model->validate[$formField]['validateNotSame'] = array(
+				$Model->validator()->add($formField, 'validateNotSame', array(
 					'rule' => array('validateNotSameHash', $formField),
 					'message' => 'valErrPwdSameAsBefore',
 					'allowEmpty' => $this->settings[$Model->alias]['allowEmpty'],
 					'last' => true,
-				);
+				));
 			}
 		}
 	}

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

@@ -13,7 +13,7 @@ class PasswordableBehaviorTest extends CakeTestCase {
 	public function setUp() {
 		parent::setUp();
 
-		Configure::write('Passwordable.auth', 'AuthTestComponent');
+		Configure::write('Passwordable.auth', 'AuthTest');
 
 		$this->User = ClassRegistry::init('User');
 		if (isset($this->User->validate['pwd'])) {
@@ -202,7 +202,6 @@ class PasswordableBehaviorTest extends CakeTestCase {
 			'passw_repeat' => 'new'
 		);
 		$this->User->set($data);
-		debug($this->User->data);
 		$is = $this->User->save();
 		$this->assertTrue(!empty($is));
 	}
@@ -235,7 +234,6 @@ class PasswordableBehaviorTest extends CakeTestCase {
 		);
 		$this->User->set($data);
 		$is = $this->User->save();
-		debug($this->User->validationErrors); ob_flush();
 		$this->assertFalse((bool)$is);
 
 		$this->User->create();
@@ -260,10 +258,6 @@ class PasswordableBehaviorTest extends CakeTestCase {
 		$this->assertTrue(!empty($res));
 		$uid = $this->User->id;
 
-		# cake bug => attached behavior validation rules cannot be triggered
-		//$this->tearDown();
-		//$this->setUp();
-
 		$this->User->Behaviors->load('Tools.Passwordable', array('current'=>true));
 		$this->User->create();
 		$data = array(
@@ -274,9 +268,7 @@ class PasswordableBehaviorTest extends CakeTestCase {
 		);
 		$this->User->set($data);
 		$this->assertTrue($this->User->Behaviors->attached('Passwordable'));
-		//debug($this->User->validate); ob_flush();
 		$is = $this->User->save();
-		debug($this->User->validationErrors); ob_flush();
 		$this->assertFalse($is);
 
 		$this->User->create();
@@ -287,7 +279,6 @@ class PasswordableBehaviorTest extends CakeTestCase {
 			'pwd_repeat' => '123456'
 		);
 		$this->User->set($data);
-		//debug($this->User->validationErrors); ob_flush();
 		$is = $this->User->save();
 		$this->assertFalse($is);
 
@@ -299,14 +290,12 @@ class PasswordableBehaviorTest extends CakeTestCase {
 			'pwd_repeat' => '123456'
 		);
 		$this->User->set($data);
-		//debug($this->User->validationErrors); ob_flush();
 		$is = $this->User->save();
 		$this->assertTrue(!empty($is));
 	}
 
 }
 
-
 /**
  * FAKER!
  * 2011-11-03 ms
@@ -315,7 +304,8 @@ class AuthTestComponent {
 
 	public function identify($request, $response) {
 		$user = $request->data['User'];
-		if ($user['id'] === '5' && $user['password'] === 'some') {
+
+		if ($user['id'] == '5' && $user['password'] === 'some') {
 			return true;
 		}
 		return false;