ValidationFactoryTest.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace Illuminate\Tests\Validation;
  3. use Illuminate\Contracts\Translation\Translator as TranslatorInterface;
  4. use Illuminate\Validation\Factory;
  5. use Illuminate\Validation\PresenceVerifierInterface;
  6. use Illuminate\Validation\Validator;
  7. use Mockery as m;
  8. use PHPUnit\Framework\TestCase;
  9. class ValidationFactoryTest extends TestCase
  10. {
  11. protected function tearDown(): void
  12. {
  13. m::close();
  14. }
  15. public function testMakeMethodCreatesValidValidator()
  16. {
  17. $translator = m::mock(TranslatorInterface::class);
  18. $factory = new Factory($translator);
  19. $validator = $factory->make(['foo' => 'bar'], ['baz' => 'boom']);
  20. $this->assertEquals($translator, $validator->getTranslator());
  21. $this->assertEquals(['foo' => 'bar'], $validator->getData());
  22. $this->assertEquals(['baz' => ['boom']], $validator->getRules());
  23. $presence = m::mock(PresenceVerifierInterface::class);
  24. $noop1 = function () {
  25. //
  26. };
  27. $noop2 = function () {
  28. //
  29. };
  30. $noop3 = function () {
  31. //
  32. };
  33. $factory->extend('foo', $noop1);
  34. $factory->extendImplicit('implicit', $noop2);
  35. $factory->extendDependent('dependent', $noop3);
  36. $factory->replacer('replacer', $noop3);
  37. $factory->setPresenceVerifier($presence);
  38. $validator = $factory->make([], []);
  39. $this->assertEquals(['foo' => $noop1, 'implicit' => $noop2, 'dependent' => $noop3], $validator->extensions);
  40. $this->assertEquals(['replacer' => $noop3], $validator->replacers);
  41. $this->assertEquals($presence, $validator->getPresenceVerifier());
  42. $presence = m::mock(PresenceVerifierInterface::class);
  43. $factory->extend('foo', $noop1, 'foo!');
  44. $factory->extendImplicit('implicit', $noop2, 'implicit!');
  45. $factory->extendImplicit('dependent', $noop3, 'dependent!');
  46. $factory->setPresenceVerifier($presence);
  47. $validator = $factory->make([], []);
  48. $this->assertEquals(['foo' => $noop1, 'implicit' => $noop2, 'dependent' => $noop3], $validator->extensions);
  49. $this->assertEquals(['foo' => 'foo!', 'implicit' => 'implicit!', 'dependent' => 'dependent!'], $validator->fallbackMessages);
  50. $this->assertEquals($presence, $validator->getPresenceVerifier());
  51. }
  52. public function testValidateCallsValidateOnTheValidator()
  53. {
  54. $validator = m::mock(Validator::class);
  55. $translator = m::mock(TranslatorInterface::class);
  56. $factory = m::mock(Factory::class.'[make]', [$translator]);
  57. $factory->shouldReceive('make')->once()
  58. ->with(['foo' => 'bar', 'baz' => 'boom'], ['foo' => 'required'], [], [])
  59. ->andReturn($validator);
  60. $validator->shouldReceive('validate')->once()->andReturn(['foo' => 'bar']);
  61. $validated = $factory->validate(
  62. ['foo' => 'bar', 'baz' => 'boom'],
  63. ['foo' => 'required']
  64. );
  65. $this->assertEquals(['foo' => 'bar'], $validated);
  66. }
  67. public function testCustomResolverIsCalled()
  68. {
  69. unset($_SERVER['__validator.factory']);
  70. $translator = m::mock(TranslatorInterface::class);
  71. $factory = new Factory($translator);
  72. $factory->resolver(function ($translator, $data, $rules) {
  73. $_SERVER['__validator.factory'] = true;
  74. return new Validator($translator, $data, $rules);
  75. });
  76. $validator = $factory->make(['foo' => 'bar'], ['baz' => 'boom']);
  77. $this->assertTrue($_SERVER['__validator.factory']);
  78. $this->assertEquals($translator, $validator->getTranslator());
  79. $this->assertEquals(['foo' => 'bar'], $validator->getData());
  80. $this->assertEquals(['baz' => ['boom']], $validator->getRules());
  81. unset($_SERVER['__validator.factory']);
  82. }
  83. public function testValidateMethodCanBeCalledPublicly()
  84. {
  85. $translator = m::mock(TranslatorInterface::class);
  86. $factory = new Factory($translator);
  87. $factory->extend('foo', function ($attribute, $value, $parameters, $validator) {
  88. return $validator->validateArray($attribute, $value);
  89. });
  90. $validator = $factory->make(['bar' => ['baz']], ['bar' => 'foo']);
  91. $this->assertTrue($validator->passes());
  92. }
  93. }