1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- <?php
- namespace JMS\Serializer\Tests\Serializer\EventDispatcher\Subscriber;
- use JMS\Serializer\DeserializationContext;
- use JMS\Serializer\EventDispatcher\EventDispatcher;
- use JMS\Serializer\EventDispatcher\ObjectEvent;
- use JMS\Serializer\EventDispatcher\Subscriber\SymfonyValidatorSubscriber;
- use JMS\Serializer\SerializerBuilder;
- use Symfony\Component\Validator\ConstraintViolation;
- use Symfony\Component\Validator\ConstraintViolationList;
- class SymfonyValidatorSubscriberTest extends \PHPUnit_Framework_TestCase
- {
- private $validator;
- /** @var SymfonyValidatorSubscriber */
- private $subscriber;
- public function testValidate()
- {
- $obj = new \stdClass;
- $this->validator->expects($this->once())
- ->method('validate')
- ->with($obj, array('foo'))
- ->will($this->returnValue(new ConstraintViolationList()));
- $context = DeserializationContext::create()->setAttribute('validation_groups', array('foo'));
- $this->subscriber->onPostDeserialize(new ObjectEvent($context, $obj, array()));
- }
- /**
- * @expectedException JMS\Serializer\Exception\ValidationFailedException
- * @expectedExceptionMessage Validation failed with 1 error(s).
- */
- public function testValidateThrowsExceptionWhenListIsNotEmpty()
- {
- $obj = new \stdClass;
- $this->validator->expects($this->once())
- ->method('validate')
- ->with($obj, array('foo'))
- ->will($this->returnValue(new ConstraintViolationList(array(new ConstraintViolation('foo', 'foo', array(), 'a', 'b', 'c')))));
- $context = DeserializationContext::create()->setAttribute('validation_groups', array('foo'));
- $this->subscriber->onPostDeserialize(new ObjectEvent($context, $obj, array()));
- }
- public function testValidatorIsNotCalledWhenNoGroupsAreSet()
- {
- $this->validator->expects($this->never())
- ->method('validate');
- $this->subscriber->onPostDeserialize(new ObjectEvent(DeserializationContext::create(), new \stdClass, array()));
- }
- public function testValidationIsOnlyPerformedOnRootObject()
- {
- $this->validator->expects($this->once())
- ->method('validate')
- ->with($this->isInstanceOf('JMS\Serializer\Tests\Fixtures\AuthorList'), array('Foo'))
- ->will($this->returnValue(new ConstraintViolationList()));
- $subscriber = $this->subscriber;
- $list = SerializerBuilder::create()
- ->configureListeners(function (EventDispatcher $dispatcher) use ($subscriber) {
- $dispatcher->addSubscriber($subscriber);
- })
- ->build()
- ->deserialize(
- '{"authors":[{"full_name":"foo"},{"full_name":"bar"}]}',
- 'JMS\Serializer\Tests\Fixtures\AuthorList',
- 'json',
- DeserializationContext::create()->setAttribute('validation_groups', array('Foo'))
- );
- $this->assertCount(2, $list);
- }
- protected function setUp()
- {
- if (!interface_exists('Symfony\Component\Validator\ValidatorInterface')) {
- $this->markTestSkipped('Symfony\Component\Validator\ValidatorInterface is not available');
- }
- $this->validator = $this->getMockBuilder('Symfony\Component\Validator\ValidatorInterface')->getMock();
- $this->subscriber = new SymfonyValidatorSubscriber($this->validator);
- }
- }
|