GroupsExclusionStrategyTest.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace JMS\Serializer\Tests\Exclusion;
  3. use JMS\Serializer\Exclusion\GroupsExclusionStrategy;
  4. use JMS\Serializer\Metadata\StaticPropertyMetadata;
  5. use JMS\Serializer\SerializationContext;
  6. class GroupsExclusionStrategyTest extends \PHPUnit_Framework_TestCase
  7. {
  8. /**
  9. * @dataProvider getExclusionRules
  10. * @param array $propertyGroups
  11. * @param array $groups
  12. * @param $exclude
  13. */
  14. public function testUninitializedContextIsWorking(array $propertyGroups, array $groups, $exclude)
  15. {
  16. $metadata = new StaticPropertyMetadata('stdClass', 'prop', 'propVal');
  17. $metadata->groups = $propertyGroups;
  18. $strat = new GroupsExclusionStrategy($groups);
  19. $this->assertEquals($strat->shouldSkipProperty($metadata, SerializationContext::create()), $exclude);
  20. }
  21. public function getExclusionRules()
  22. {
  23. return [
  24. [['foo'], ['foo'], false],
  25. [['foo'], [], true],
  26. [[], ['foo'], true],
  27. [['foo'], ['bar'], true],
  28. [['bar'], ['foo'], true],
  29. [['foo', GroupsExclusionStrategy::DEFAULT_GROUP], [], false],
  30. [['foo', 'bar'], [], true],
  31. [['foo', 'bar'], [GroupsExclusionStrategy::DEFAULT_GROUP], true],
  32. [['foo', 'bar'], ['foo'], false],
  33. [['foo', GroupsExclusionStrategy::DEFAULT_GROUP], ['test'], true],
  34. [['foo', GroupsExclusionStrategy::DEFAULT_GROUP, 'test'], ['test'], false],
  35. [['foo'], [GroupsExclusionStrategy::DEFAULT_GROUP], true],
  36. [[GroupsExclusionStrategy::DEFAULT_GROUP], [], false],
  37. [[], [GroupsExclusionStrategy::DEFAULT_GROUP], false],
  38. [[GroupsExclusionStrategy::DEFAULT_GROUP], [GroupsExclusionStrategy::DEFAULT_GROUP], false],
  39. [[GroupsExclusionStrategy::DEFAULT_GROUP, 'foo'], [GroupsExclusionStrategy::DEFAULT_GROUP], false],
  40. [[GroupsExclusionStrategy::DEFAULT_GROUP], [GroupsExclusionStrategy::DEFAULT_GROUP, 'foo'], false],
  41. [['foo'], [GroupsExclusionStrategy::DEFAULT_GROUP, 'foo'], false],
  42. ];
  43. }
  44. /**
  45. * @dataProvider getGroupsFor
  46. * @param $groups
  47. * @param $propsVisited
  48. * @param $resultingGroups
  49. */
  50. public function testGroupsFor($groups, $propsVisited, $resultingGroups)
  51. {
  52. $exclusion = new GroupsExclusionStrategy($groups);
  53. $context = SerializationContext::create();
  54. foreach ($propsVisited as $prop) {
  55. $metadata = new StaticPropertyMetadata('stdClass', $prop, 'propVal');
  56. $context->pushPropertyMetadata($metadata);
  57. }
  58. $groupsFor = $exclusion->getGroupsFor($context);
  59. $this->assertEquals($groupsFor, $resultingGroups);
  60. }
  61. public function getGroupsFor()
  62. {
  63. return [
  64. [['foo'], ['prop'], ['foo']],
  65. [[], ['prop'], ['Default']],
  66. [['foo', 'prop' => ['bar']], ['prop'], ['bar']],
  67. [['foo', 'prop' => ['bar']], ['prop2'], ['foo', 'prop' => ['bar']]],
  68. [['foo', 'prop' => ['bar']], ['prop', 'prop2'], ['Default']],
  69. [['foo', 'prop' => ['xx', 'prop2' => ['def'], 'prop3' => ['def']]], ['prop', 'prop2', 'propB'], ['Default']],
  70. [['foo', 'prop' => ['xx', 'prop2' => ['def', 'prop3' => ['def']]]], ['prop', 'prop2'], ['def', 'prop3' => ['def']]],
  71. [['foo', 'prop' => ['prop2' => ['prop3' => ['def']]]], ['prop', 'prop2'], ['Default', 'prop3' => ['def']]],
  72. ];
  73. }
  74. }