ExpressionLanguageExclusionStrategyTest.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace JMS\Serializer\Tests\Exclusion;
  3. use JMS\Serializer\Exclusion\ExpressionLanguageExclusionStrategy;
  4. use JMS\Serializer\Expression\ExpressionEvaluator;
  5. use JMS\Serializer\Metadata\StaticPropertyMetadata;
  6. use JMS\Serializer\SerializationContext;
  7. /**
  8. * @author Asmir Mustafic <goetas@gmail.com>
  9. */
  10. class ExpressionLanguageExclusionStrategyTest extends \PHPUnit_Framework_TestCase
  11. {
  12. private $visitedObject;
  13. private $context;
  14. private $expressionEvaluator;
  15. private $exclusionStrategy;
  16. public function setUp()
  17. {
  18. $this->visitedObject = new \stdClass();
  19. $this->context = $this->getMockBuilder(SerializationContext::class)->getMock();
  20. $this->context->method('getObject')->willReturn($this->visitedObject);
  21. $this->expressionEvaluator = $this->getMockBuilder(ExpressionEvaluator::class)
  22. ->disableOriginalConstructor()
  23. ->getMock();
  24. $this->exclusionStrategy = new ExpressionLanguageExclusionStrategy($this->expressionEvaluator);
  25. }
  26. public function testExpressionLanguageExclusionWorks()
  27. {
  28. $metadata = new StaticPropertyMetadata('stdClass', 'prop', 'propVal');
  29. $metadata->excludeIf = 'foo';
  30. $this->expressionEvaluator->expects($this->once())
  31. ->method('evaluate')
  32. ->with('foo', array(
  33. 'context' => $this->context,
  34. 'property_metadata' => $metadata,
  35. 'object' => $this->visitedObject,
  36. ))
  37. ->willReturn(true);
  38. $this->assertSame(true, $this->exclusionStrategy->shouldSkipProperty($metadata, $this->context));
  39. }
  40. public function testExpressionLanguageSkipsWhenNoExpression()
  41. {
  42. $metadata = new StaticPropertyMetadata('stdClass', 'prop', 'propVal');
  43. $this->expressionEvaluator->expects($this->never())->method('evaluate');
  44. $this->assertSame(false, $this->exclusionStrategy->shouldSkipProperty($metadata, $this->context));
  45. }
  46. }