|
|
@@ -29,7 +29,7 @@ class RulesCheckerIntegrationTest extends TestCase
|
|
|
*
|
|
|
* @var array
|
|
|
*/
|
|
|
- public $fixtures = ['core.articles', 'core.articles_tags', 'core.authors', 'core.tags'];
|
|
|
+ public $fixtures = ['core.articles', 'core.articles_tags', 'core.authors', 'core.tags', 'core.special_tags'];
|
|
|
|
|
|
/**
|
|
|
* Tear down
|
|
|
@@ -370,6 +370,63 @@ class RulesCheckerIntegrationTest extends TestCase
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * Tests isUnique with allowMultipleNulls
|
|
|
+ *
|
|
|
+ * @group save
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function testIsUniqueAllowMultipleNulls()
|
|
|
+ {
|
|
|
+ $entity = new Entity([
|
|
|
+ 'article_id' => 11,
|
|
|
+ 'tag_id' => 11,
|
|
|
+ 'author_id' => null
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $table = TableRegistry::get('SpecialTags');
|
|
|
+ $rules = $table->rulesChecker();
|
|
|
+ $rules->add($rules->isUnique(['author_id']), ['allowMultipleNulls' => false]);
|
|
|
+
|
|
|
+ $this->assertFalse($table->save($entity));
|
|
|
+ $this->assertEquals(['_isUnique' => 'This value is already in use'], $entity->errors('author_id'));
|
|
|
+
|
|
|
+ $entity->author_id = 11;
|
|
|
+ $this->assertSame($entity, $table->save($entity));
|
|
|
+
|
|
|
+ $entity = $table->get(1);
|
|
|
+ $entity->dirty('author_id', true);
|
|
|
+ $this->assertSame($entity, $table->save($entity));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Tests isUnique with multiple fields and allowMultipleNulls
|
|
|
+ *
|
|
|
+ * @group save
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function testIsUniqueMultipleFieldsAllowMultipleNulls()
|
|
|
+ {
|
|
|
+ $entity = new Entity([
|
|
|
+ 'article_id' => 10,
|
|
|
+ 'tag_id' => 12,
|
|
|
+ 'author_id' => null
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $table = TableRegistry::get('SpecialTags');
|
|
|
+ $rules = $table->rulesChecker();
|
|
|
+ $rules->add($rules->isUnique(['author_id', 'article_id'], 'Nope'), ['allowMultipleNulls' => false]);
|
|
|
+
|
|
|
+ $this->assertFalse($table->save($entity));
|
|
|
+ $this->assertEquals(['author_id' => ['_isUnique' => 'Nope']], $entity->errors());
|
|
|
+
|
|
|
+ $entity->clean();
|
|
|
+ $entity->article_id = 10;
|
|
|
+ $entity->tag_id = 12;
|
|
|
+ $entity->author_id = 12;
|
|
|
+ $this->assertSame($entity, $table->save($entity));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* Tests the existsIn domain rule
|
|
|
*
|
|
|
* @group save
|