ObjectPrimitiveTraitTest.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <?php
  2. /**
  3. * File ObjectPrimitiveTraitTest.php
  4. *
  5. * @author Edward Pfremmer <epfremme@nerdery.com>
  6. */
  7. namespace Epfremme\Swagger\Tests\Entity\Mixin;
  8. use Doctrine\Common\Collections\ArrayCollection;
  9. use Epfremme\Swagger\Entity\Schemas\AbstractSchema;
  10. use Epfremme\Swagger\Entity\Schemas\ObjectSchema;
  11. use Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait;
  12. use Epfremme\Swagger\Entity\Schemas\RefSchema;
  13. use Epfremme\Swagger\Entity\Schemas\SchemaInterface;
  14. use Epfremme\Swagger\Tests\Mixin\SerializerContextTrait;
  15. /**
  16. * Class ObjectPrimitiveTraitTest
  17. *
  18. * @package Epfremme\Swagger
  19. * @subpackage Tests\Entity\Schemas\Primitives
  20. */
  21. class ObjectPrimitiveTraitTest extends \PHPUnit_Framework_TestCase
  22. {
  23. use SerializerContextTrait;
  24. /**
  25. * @var ObjectPrimitiveTrait|\PHPUnit_Framework_MockObject_MockObject
  26. */
  27. protected $mockTrait;
  28. /**
  29. * Mock Classname
  30. * @var string
  31. */
  32. protected $mockClass;
  33. /**
  34. * {@inheritdoc}
  35. */
  36. protected function setUp()
  37. {
  38. $this->mockTrait = $this->getMockForTrait(ObjectPrimitiveTrait::class);
  39. $this->mockClass = get_class($this->mockTrait);
  40. }
  41. /**
  42. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::getMaxProperties
  43. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::setMaxProperties
  44. */
  45. public function testMaxProperties()
  46. {
  47. $this->assertClassHasAttribute('maxProperties', $this->mockClass);
  48. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setMaxProperties(5));
  49. $this->assertAttributeInternalType('integer', 'maxProperties', $this->mockTrait);
  50. $this->assertAttributeEquals(5, 'maxProperties', $this->mockTrait);
  51. $this->assertEquals(5, $this->mockTrait->getMaxProperties());
  52. }
  53. /**
  54. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::getMinProperties
  55. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::setMinProperties
  56. */
  57. public function testMinProperties()
  58. {
  59. $this->assertClassHasAttribute('minProperties', $this->mockClass);
  60. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setMinProperties(1));
  61. $this->assertAttributeInternalType('integer', 'minProperties', $this->mockTrait);
  62. $this->assertAttributeEquals(1, 'minProperties', $this->mockTrait);
  63. $this->assertEquals(1, $this->mockTrait->getMinProperties());
  64. }
  65. /**
  66. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::getRequired
  67. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::setRequired
  68. */
  69. public function testRequired()
  70. {
  71. $required = ['foo', 'bar', 'baz'];
  72. $this->assertClassHasAttribute('required', $this->mockClass);
  73. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setRequired($required));
  74. $this->assertAttributeInternalType('array', 'required', $this->mockTrait);
  75. $this->assertAttributeEquals($required, 'required', $this->mockTrait);
  76. $this->assertEquals($required, $this->mockTrait->getRequired());
  77. }
  78. /**
  79. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::getProperties
  80. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::setProperties
  81. */
  82. public function testProperties()
  83. {
  84. $properties = $definitions = new ArrayCollection([
  85. 'name' => new ObjectSchema(),
  86. ]);;
  87. $this->assertClassHasAttribute('properties', $this->mockClass);
  88. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setProperties($properties));
  89. $this->assertAttributeInstanceOf(ArrayCollection::class, 'properties', $this->mockTrait);
  90. $this->assertAttributeEquals($properties, 'properties', $this->mockTrait);
  91. $this->assertEquals($properties, $this->mockTrait->getProperties());
  92. $this->assertContainsOnlyInstancesOf(ObjectSchema::class, $this->mockTrait->getProperties());
  93. $this->assertCount(1, $this->mockTrait->getProperties());
  94. }
  95. /**
  96. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::isAdditionalProperties
  97. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::setAdditionalProperties
  98. */
  99. public function testAdditionalProperties()
  100. {
  101. $this->assertClassHasAttribute('additionalProperties', $this->mockClass);
  102. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setAdditionalProperties(true));
  103. $this->assertAttributeInternalType('boolean', 'additionalProperties', $this->mockTrait);
  104. $this->assertAttributeEquals(true, 'additionalProperties', $this->mockTrait);
  105. $this->assertTrue($this->mockTrait->isAdditionalProperties());
  106. }
  107. /**
  108. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::getPatternProperties
  109. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::setPatternProperties
  110. */
  111. public function testPatternProperties()
  112. {
  113. $this->assertClassHasAttribute('patternProperties', $this->mockClass);
  114. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setPatternProperties('foo'));
  115. $this->assertAttributeInternalType('string', 'patternProperties', $this->mockTrait);
  116. $this->assertAttributeEquals('foo', 'patternProperties', $this->mockTrait);
  117. $this->assertEquals('foo', $this->mockTrait->getPatternProperties());
  118. }
  119. /**
  120. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::getDependencies
  121. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait::setDependencies
  122. */
  123. public function testDependencies()
  124. {
  125. $dependencies = ['foo', 'bar', 'baz'];
  126. $this->assertClassHasAttribute('dependencies', $this->mockClass);
  127. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setDependencies($dependencies));
  128. $this->assertAttributeInternalType('array', 'dependencies', $this->mockTrait);
  129. $this->assertAttributeEquals($dependencies, 'dependencies', $this->mockTrait);
  130. $this->assertEquals($dependencies, $this->mockTrait->getDependencies());
  131. }
  132. /**
  133. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\ObjectPrimitiveTrait
  134. */
  135. public function testSerialization()
  136. {
  137. $data = json_encode([
  138. 'type' => AbstractSchema::OBJECT_TYPE,
  139. 'maxProperties' => 10,
  140. 'minProperties' => 1,
  141. 'required' => ['foo', 'bar'],
  142. 'properties' => [
  143. 'foo' => [
  144. 'type' => AbstractSchema::STRING_TYPE
  145. ],
  146. 'bar' => [
  147. '$ref' => RefSchema::REF_TYPE
  148. ],
  149. 'baz' => [
  150. 'type' => AbstractSchema::NUMBER_TYPE
  151. ],
  152. ],
  153. 'additionalProperties' => true,
  154. 'patternProperties' => 'foo',
  155. 'dependencies' => ['foo', 'bar', 'baz'],
  156. ]);
  157. $primitive = $this->getSerializer()->deserialize($data, AbstractSchema::class, 'json');
  158. $this->assertInstanceOf(ObjectSchema::class, $primitive);
  159. $this->assertAttributeEquals(10, 'maxProperties', $primitive);
  160. $this->assertAttributeEquals(1, 'minProperties', $primitive);
  161. $this->assertAttributeEquals(['foo', 'bar'], 'required', $primitive);
  162. $this->assertAttributeInstanceOf(ArrayCollection::class, 'properties', $primitive);
  163. $this->assertContainsOnlyInstancesOf(SchemaInterface::class, $primitive->getProperties());
  164. $this->assertAttributeEquals(true, 'additionalProperties', $primitive);
  165. $this->assertAttributeEquals('foo', 'patternProperties', $primitive);
  166. $this->assertAttributeEquals(['foo', 'bar', 'baz'], 'dependencies', $primitive);
  167. $json = $this->getSerializer()->serialize($primitive, 'json');
  168. $this->assertJson($json);
  169. $this->assertJsonStringEqualsJsonString($data, $json);
  170. }
  171. }