ValidationRuleParserTest.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace Illuminate\Tests\Validation;
  3. use Illuminate\Support\Fluent;
  4. use Illuminate\Validation\Rule;
  5. use Illuminate\Validation\ValidationRuleParser;
  6. use PHPUnit\Framework\TestCase;
  7. class ValidationRuleParserTest extends TestCase
  8. {
  9. public function test_conditional_rules_are_properly_expanded_and_filtered()
  10. {
  11. $rules = ValidationRuleParser::filterConditionalRules([
  12. 'name' => Rule::when(true, ['required', 'min:2']),
  13. 'email' => Rule::when(false, ['required', 'min:2']),
  14. 'password' => Rule::when(true, 'required|min:2'),
  15. 'username' => ['required', Rule::when(true, ['min:2'])],
  16. 'address' => ['required', Rule::when(false, ['min:2'])],
  17. 'city' => ['required', Rule::when(function (Fluent $input) {
  18. return true;
  19. }, ['min:2'])],
  20. ]);
  21. $this->assertEquals([
  22. 'name' => ['required', 'min:2'],
  23. 'email' => [],
  24. 'password' => ['required', 'min:2'],
  25. 'username' => ['required', 'min:2'],
  26. 'address' => ['required'],
  27. 'city' => ['required', 'min:2'],
  28. ], $rules);
  29. }
  30. public function test_empty_rules_are_preserved()
  31. {
  32. $rules = ValidationRuleParser::filterConditionalRules([
  33. 'name' => [],
  34. 'email' => '',
  35. 'password' => Rule::when(true, 'required|min:2'),
  36. ]);
  37. $this->assertEquals([
  38. 'name' => [],
  39. 'email' => '',
  40. 'password' => ['required', 'min:2'],
  41. ], $rules);
  42. }
  43. public function test_conditional_rules_with_default()
  44. {
  45. $rules = ValidationRuleParser::filterConditionalRules([
  46. 'name' => Rule::when(true, ['required', 'min:2'], ['string', 'max:10']),
  47. 'email' => Rule::when(false, ['required', 'min:2'], ['string', 'max:10']),
  48. 'password' => Rule::when(false, 'required|min:2', 'string|max:10'),
  49. 'username' => ['required', Rule::when(true, ['min:2'], ['string', 'max:10'])],
  50. 'address' => ['required', Rule::when(false, ['min:2'], ['string', 'max:10'])],
  51. ]);
  52. $this->assertEquals([
  53. 'name' => ['required', 'min:2'],
  54. 'email' => ['string', 'max:10'],
  55. 'password' => ['string', 'max:10'],
  56. 'username' => ['required', 'min:2'],
  57. 'address' => ['required', 'string', 'max:10'],
  58. ], $rules);
  59. }
  60. public function test_empty_conditional_rules_are_preserved()
  61. {
  62. $rules = ValidationRuleParser::filterConditionalRules([
  63. 'name' => Rule::when(true, '', ['string', 'max:10']),
  64. 'email' => Rule::when(false, ['required', 'min:2'], []),
  65. 'password' => Rule::when(false, 'required|min:2', 'string|max:10'),
  66. ]);
  67. $this->assertEquals([
  68. 'name' => [],
  69. 'email' => [],
  70. 'password' => ['string', 'max:10'],
  71. ], $rules);
  72. }
  73. }