浏览代码

Add tests for ConfirmableBehavior issues.

Mark Scherer 11 年之前
父节点
当前提交
4abf601bdb
共有 2 个文件被更改,包括 51 次插入9 次删除
  1. 9 8
      src/Model/Behavior/ConfirmableBehavior.php
  2. 42 1
      tests/TestCase/Model/Behavior/ConfirmableBehaviorTest.php

+ 9 - 8
src/Model/Behavior/ConfirmableBehavior.php

@@ -8,6 +8,7 @@ use Cake\ORM\Query;
 use Cake\ORM\Table;
 use Cake\Event\Event;
 use ArrayObject;
+use Cake\Validation\Validator;
 
 /**
  * ConfirmableBehavior allows forms to easily require a checkbox toggled (confirmed).
@@ -36,14 +37,14 @@ class ConfirmableBehavior extends Behavior {
 		}
 	}
 
-	/**
-	 * ConfirmableBehavior::initialize()
-	 *
-	 * @param mixed $config
-	 * @return void
-	 */
-	public function initialize(array $config) {
-		$validator = $this->_table->validator($this->_config['validator']);
+	public function buildValidator(Event $event, Validator $validator, $name) {
+		$this->build($validator, $name);
+	}
+
+	public function build(Validator $validator, $name = 'default') {
+		if ($name !== $this->_config['validator']) {
+			return;
+		}
 
 		$field = $this->_config['field'];
 		$message = $this->_config['message'];

+ 42 - 1
tests/TestCase/Model/Behavior/ConfirmableBehaviorTest.php

@@ -34,7 +34,48 @@ class ConfirmableBehaviorTest extends TestCase {
 		);
 		$animal = $this->Animals->patchEntity($animal, $data);
 		$this->assertNotEmpty($animal->errors());
-		$this->assertSame(array('confirm' => array('notEmpty' => 'The provided value is invalid')), $animal->errors());
+		$this->assertSame(array('confirm' => array('notEmpty' => __d('tools', 'Please confirm the checkbox'))), $animal->errors());
+
+		$data = array(
+			'name' => 'FooBar',
+			'confirm' => '1'
+		);
+		$animal = $this->Animals->patchEntity($animal, $data);
+		$this->assertEmpty($animal->errors());
+	}
+
+	/**
+	 * ConfirmableBehaviorTest::testBasicValidation()
+	 *
+	 * @return void
+	 */
+	public function testValidationThatHasBeenModifiedBefore() {
+		$this->Animals = TableRegistry::get('SluggedArticles');
+		/*
+		$this->Animals->validator()->add('confirm', 'notEmpty', [
+				'rule' => function ($value, $context) {
+					return !empty($value);
+				},
+				'message' => __('Please select checkbox to continue.'),
+				'requirePresence' => true,
+				'allowEmpty' => false,
+				'last' => true,
+			]);
+		$this->Animals->validator()->remove('confirm');
+		*/
+
+		$this->Animals->addBehavior('Tools.Confirmable');
+
+		$animal = $this->Animals->newEntity();
+
+		$data = array(
+			'name' => 'FooBar',
+			'confirm' => '0'
+		);
+		$animal = $this->Animals->patchEntity($animal, $data);
+		$this->assertNotEmpty($animal->errors());
+
+		$this->assertSame(array('confirm' => array('notEmpty' => __d('tools', 'Please confirm the checkbox'))), $animal->errors());
 
 		$data = array(
 			'name' => 'FooBar',