RulesCheckerTest.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <?php
  2. /**
  3. * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
  4. * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
  5. *
  6. * Licensed under The MIT License
  7. * For full copyright and license information, please see the LICENSE.txt
  8. * Redistributions of files must retain the above copyright notice.
  9. *
  10. * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
  11. * @link https://cakephp.org CakePHP(tm) Project
  12. * @since 3.0.7
  13. * @license https://opensource.org/licenses/mit-license.php MIT License
  14. */
  15. namespace Cake\Test\TestCase\Datasource;
  16. use Cake\Datasource\RulesChecker;
  17. use Cake\ORM\Entity;
  18. use Cake\TestSuite\TestCase;
  19. /**
  20. * Tests the integration between the ORM and the domain checker
  21. */
  22. class RulesCheckerTest extends TestCase
  23. {
  24. /**
  25. * Test adding rule for update mode
  26. *
  27. * @return void
  28. */
  29. public function testAddingRuleDeleteMode()
  30. {
  31. $entity = new Entity([
  32. 'name' => 'larry',
  33. ]);
  34. $rules = new RulesChecker();
  35. $rules->addDelete(
  36. function () {
  37. return false;
  38. },
  39. 'ruleName',
  40. ['errorField' => 'name']
  41. );
  42. $this->assertTrue($rules->check($entity, RulesChecker::CREATE));
  43. $this->assertEmpty($entity->getErrors());
  44. $this->assertTrue($rules->check($entity, RulesChecker::UPDATE));
  45. $this->assertEmpty($entity->getErrors());
  46. $this->assertFalse($rules->check($entity, RulesChecker::DELETE));
  47. $this->assertEquals(['ruleName' => 'invalid'], $entity->getError('name'));
  48. }
  49. /**
  50. * Test adding rule for update mode
  51. *
  52. * @return void
  53. */
  54. public function testAddingRuleUpdateMode()
  55. {
  56. $entity = new Entity([
  57. 'name' => 'larry',
  58. ]);
  59. $rules = new RulesChecker();
  60. $rules->addUpdate(
  61. function () {
  62. return false;
  63. },
  64. 'ruleName',
  65. ['errorField' => 'name']
  66. );
  67. $this->assertTrue($rules->check($entity, RulesChecker::CREATE));
  68. $this->assertEmpty($entity->getErrors());
  69. $this->assertTrue($rules->check($entity, RulesChecker::DELETE));
  70. $this->assertEmpty($entity->getErrors());
  71. $this->assertFalse($rules->check($entity, RulesChecker::UPDATE));
  72. $this->assertEquals(['ruleName' => 'invalid'], $entity->getError('name'));
  73. }
  74. /**
  75. * Test adding rule for create mode
  76. *
  77. * @return void
  78. */
  79. public function testAddingRuleCreateMode()
  80. {
  81. $entity = new Entity([
  82. 'name' => 'larry',
  83. ]);
  84. $rules = new RulesChecker();
  85. $rules->addCreate(
  86. function () {
  87. return false;
  88. },
  89. 'ruleName',
  90. ['errorField' => 'name']
  91. );
  92. $this->assertTrue($rules->check($entity, RulesChecker::UPDATE));
  93. $this->assertEmpty($entity->getErrors());
  94. $this->assertTrue($rules->check($entity, RulesChecker::DELETE));
  95. $this->assertEmpty($entity->getErrors());
  96. $this->assertFalse($rules->check($entity, RulesChecker::CREATE));
  97. $this->assertEquals(['ruleName' => 'invalid'], $entity->getError('name'));
  98. }
  99. /**
  100. * Test adding rule with name
  101. *
  102. * @return void
  103. */
  104. public function testAddingRuleWithName()
  105. {
  106. $entity = new Entity([
  107. 'name' => 'larry',
  108. ]);
  109. $rules = new RulesChecker();
  110. $rules->add(
  111. function () {
  112. return false;
  113. },
  114. 'ruleName',
  115. ['errorField' => 'name']
  116. );
  117. $this->assertFalse($rules->check($entity, RulesChecker::CREATE));
  118. $this->assertEquals(['ruleName' => 'invalid'], $entity->getError('name'));
  119. }
  120. /**
  121. * Test that returned error messages work.
  122. *
  123. * @return void
  124. */
  125. public function testAddWithErrorMessage()
  126. {
  127. $entity = new Entity([
  128. 'name' => 'larry',
  129. ]);
  130. $rules = new RulesChecker();
  131. $rules->add(
  132. function () {
  133. return 'worst thing ever';
  134. },
  135. ['errorField' => 'name']
  136. );
  137. $this->assertFalse($rules->check($entity, RulesChecker::CREATE));
  138. $this->assertEquals(['worst thing ever'], $entity->getError('name'));
  139. }
  140. /**
  141. * Test that returned error messages work.
  142. *
  143. * @return void
  144. */
  145. public function testAddWithMessageOption()
  146. {
  147. $entity = new Entity([
  148. 'name' => 'larry',
  149. ]);
  150. $rules = new RulesChecker();
  151. $rules->add(
  152. function () {
  153. return false;
  154. },
  155. ['message' => 'this is bad', 'errorField' => 'name']
  156. );
  157. $this->assertFalse($rules->check($entity, RulesChecker::CREATE));
  158. $this->assertEquals(['this is bad'], $entity->getError('name'));
  159. }
  160. /**
  161. * Test that returned error messages work.
  162. *
  163. * @return void
  164. */
  165. public function testAddWithoutFields()
  166. {
  167. $entity = new Entity([
  168. 'name' => 'larry',
  169. ]);
  170. $rules = new RulesChecker();
  171. $rules->add(function () {
  172. return false;
  173. });
  174. $this->assertFalse($rules->check($entity, RulesChecker::CREATE));
  175. $this->assertEmpty($entity->getErrors());
  176. }
  177. }