|
12 | 12 | namespace HyperfTest\Validation\Cases; |
13 | 13 |
|
14 | 14 | use Hyperf\Contract\TranslatorInterface; |
| 15 | +use Hyperf\Contract\ValidatorInterface; |
| 16 | +use Hyperf\HttpMessage\Base\Response; |
15 | 17 | use Hyperf\Utils\ApplicationContext; |
16 | 18 | use Hyperf\Utils\MessageBag; |
17 | 19 | use Hyperf\Validation\Contract\ValidatorFactoryInterface; |
18 | 20 | use Hyperf\Validation\ValidationException; |
| 21 | +use Hyperf\Validation\ValidationExceptionHandler; |
19 | 22 | use Hyperf\Validation\ValidatorFactory; |
20 | 23 | use Mockery; |
21 | 24 | use PHPUnit\Framework\TestCase; |
@@ -49,6 +52,30 @@ public function testWithMessages() |
49 | 52 | ], $errors->getMessages()); |
50 | 53 | } |
51 | 54 |
|
| 55 | + public function testValidationExceptionHandler() |
| 56 | + { |
| 57 | + $handler = new ValidationExceptionHandler(); |
| 58 | + $validator = Mockery::mock(ValidatorInterface::class); |
| 59 | + $validator->shouldReceive('errors')->andReturnUsing(function () { |
| 60 | + $message = Mockery::mock(MessageBag::class); |
| 61 | + $message->shouldReceive('first')->andReturn('id is required'); |
| 62 | + return $message; |
| 63 | + }); |
| 64 | + $exception = new ValidationException($validator); |
| 65 | + $response = new Response(); |
| 66 | + $response = $handler->handle($exception, $response); |
| 67 | + $this->assertSame(422, $response->getStatusCode()); |
| 68 | + $this->assertSame('id is required', $response->getBody()->getContents()); |
| 69 | + $this->assertSame('text/plain; charset=utf-8', $response->getHeaderLine('content-type')); |
| 70 | + |
| 71 | + $response = (new Response())->withAddedHeader('Content-Type', 'application/json; charset=utf-8'); |
| 72 | + $exception = new ValidationException($validator); |
| 73 | + $response = $handler->handle($exception, $response); |
| 74 | + $this->assertSame(422, $response->getStatusCode()); |
| 75 | + $this->assertSame('id is required', $response->getBody()->getContents()); |
| 76 | + $this->assertSame('application/json; charset=utf-8', $response->getHeaderLine('content-type')); |
| 77 | + } |
| 78 | + |
52 | 79 | protected function getContainer() |
53 | 80 | { |
54 | 81 | $container = Mockery::mock(ContainerInterface::class); |
|
0 commit comments