AnyPrimitiveTraitTest.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. /**
  3. * File AnyPrimitiveTraitTest.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\AnyPrimitiveTrait;
  12. use Epfremme\Swagger\Tests\Mixin\SerializerContextTrait;
  13. /**
  14. * Class AnyPrimitiveTraitTest
  15. *
  16. * @package Epfremme\Swagger
  17. * @subpackage Tests\Entity\Schemas\Primitives
  18. */
  19. class AnyPrimitiveTraitTest extends \PHPUnit_Framework_TestCase
  20. {
  21. use SerializerContextTrait;
  22. /**
  23. * @var AnyPrimitiveTrait|\PHPUnit_Framework_MockObject_MockObject
  24. */
  25. protected $mockTrait;
  26. /**
  27. * Mock Classname
  28. * @var string
  29. */
  30. protected $mockClass;
  31. /**
  32. * {@inheritdoc}
  33. */
  34. protected function setUp()
  35. {
  36. $this->mockTrait = $this->getMockForTrait(AnyPrimitiveTrait::class);
  37. $this->mockClass = get_class($this->mockTrait);
  38. }
  39. /**
  40. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::getEnum
  41. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::setEnum
  42. */
  43. public function testEnum()
  44. {
  45. $enums = ['foo', 'bar', 'baz'];
  46. $this->assertClassHasAttribute('enum', $this->mockClass);
  47. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setEnum($enums));
  48. $this->assertAttributeInternalType('array', 'enum', $this->mockTrait);
  49. $this->assertAttributeEquals($enums, 'enum', $this->mockTrait);
  50. $this->assertEquals($enums, $this->mockTrait->getEnum());
  51. }
  52. /**
  53. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::getAllOf
  54. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::setAllOf
  55. */
  56. public function testAllOf()
  57. {
  58. $allOf = ['foo', 'bar', 'baz'];
  59. $this->assertClassHasAttribute('allOf', $this->mockClass);
  60. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setAllOf($allOf));
  61. $this->assertAttributeInternalType('array', 'allOf', $this->mockTrait);
  62. $this->assertAttributeEquals($allOf, 'allOf', $this->mockTrait);
  63. $this->assertEquals($allOf, $this->mockTrait->getAllOf());
  64. }
  65. /**
  66. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::getAnyOf
  67. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::setAnyOf
  68. */
  69. public function testAnyOf()
  70. {
  71. $anyOf = ['foo', 'bar', 'baz'];
  72. $this->assertClassHasAttribute('anyOf', $this->mockClass);
  73. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setAnyOf($anyOf));
  74. $this->assertAttributeInternalType('array', 'anyOf', $this->mockTrait);
  75. $this->assertAttributeEquals($anyOf, 'anyOf', $this->mockTrait);
  76. $this->assertEquals($anyOf, $this->mockTrait->getAnyOf());
  77. }
  78. /**
  79. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::getOneOf
  80. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::setOneOf
  81. */
  82. public function testOneOf()
  83. {
  84. $oneOf = ['foo', 'bar', 'baz'];
  85. $this->assertClassHasAttribute('oneOf', $this->mockClass);
  86. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setOneOf($oneOf));
  87. $this->assertAttributeInternalType('array', 'oneOf', $this->mockTrait);
  88. $this->assertAttributeEquals($oneOf, 'oneOf', $this->mockTrait);
  89. $this->assertEquals($oneOf, $this->mockTrait->getOneOf());
  90. }
  91. /**
  92. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::getNot
  93. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::setNot
  94. */
  95. public function testNot()
  96. {
  97. $not = ['foo', 'bar', 'baz'];
  98. $this->assertClassHasAttribute('not', $this->mockClass);
  99. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setNot($not));
  100. $this->assertAttributeInternalType('array', 'not', $this->mockTrait);
  101. $this->assertAttributeEquals($not, 'not', $this->mockTrait);
  102. $this->assertEquals($not, $this->mockTrait->getNot());
  103. }
  104. /**
  105. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::getDefinitions
  106. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait::setDefinitions
  107. */
  108. public function testDefinitions()
  109. {
  110. $definitions = new ArrayCollection([
  111. 'name' => new ObjectSchema(),
  112. ]);
  113. $this->assertClassHasAttribute('definitions', $this->mockClass);
  114. $this->assertInstanceOf($this->mockClass, $this->mockTrait->setDefinitions($definitions));
  115. $this->assertAttributeInstanceOf(ArrayCollection::class, 'definitions', $this->mockTrait);
  116. $this->assertAttributeEquals($definitions, 'definitions', $this->mockTrait);
  117. $this->assertEquals($definitions, $this->mockTrait->getDefinitions());
  118. $this->assertContainsOnlyInstancesOf(ObjectSchema::class, $this->mockTrait->getDefinitions());
  119. $this->assertCount(1, $this->mockTrait->getDefinitions());
  120. }
  121. /**
  122. * @covers Epfremme\Swagger\Entity\Mixin\Primitives\AnyPrimitiveTrait
  123. */
  124. public function testSerialization()
  125. {
  126. $data = json_encode([
  127. 'type' => AbstractSchema::OBJECT_TYPE,
  128. 'enum' => ['foo', 'bar'],
  129. 'allOf' => ['foo'],
  130. 'anyOf' => ['foo', 'bar', 'baz'],
  131. 'oneOf' => ['foo', 'bar', 'baz'],
  132. 'not' => ['qux'],
  133. 'definitions' => [
  134. 'def' => [
  135. 'type' => AbstractSchema::OBJECT_TYPE,
  136. 'format' => 'foo',
  137. 'title' => 'bar',
  138. 'description' => 'baz',
  139. 'example' => 'qux',
  140. 'externalDocs' => (object)[],
  141. ]
  142. ],
  143. ]);
  144. $primitive = $this->getSerializer()->deserialize($data, AbstractSchema::class, 'json');
  145. $this->assertInstanceOf(ObjectSchema::class, $primitive);
  146. $this->assertAttributeEquals(['foo', 'bar'], 'enum', $primitive);
  147. $this->assertAttributeEquals(['foo'], 'allOf', $primitive);
  148. $this->assertAttributeEquals(['foo', 'bar', 'baz'], 'anyOf', $primitive);
  149. $this->assertAttributeEquals(['foo', 'bar', 'baz'], 'oneOf', $primitive);
  150. $this->assertAttributeEquals(['qux'], 'not', $primitive);
  151. $this->assertAttributeInstanceOf(ArrayCollection::class, 'definitions', $primitive);
  152. $this->assertContainsOnlyInstancesOf(ObjectSchema::class, $primitive->getDefinitions());
  153. $this->assertInstanceOf(ObjectSchema::class, $primitive->getDefinitions()->get('def'));
  154. $json = $this->getSerializer()->serialize($primitive, 'json');
  155. $this->assertJson($json);
  156. $this->assertJsonStringEqualsJsonString($data, $json);
  157. }
  158. }