GetFromInlineValidatorTest.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <?php
  2. namespace Knuckles\Scribe\Tests\Strategies;
  3. use Knuckles\Camel\Extraction\ExtractedEndpointData;
  4. use Knuckles\Scribe\Extracting\Strategies\BodyParameters;
  5. use Knuckles\Scribe\Extracting\Strategies\QueryParameters;
  6. use Knuckles\Scribe\Tests\BaseLaravelTest;
  7. use Knuckles\Scribe\Tests\Fixtures\TestController;
  8. use Knuckles\Scribe\Tools\DocumentationConfig;
  9. use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
  10. class GetFromInlineValidatorTest extends BaseLaravelTest
  11. {
  12. use ArraySubsetAsserts;
  13. private static $expected = [
  14. 'user_id' => [
  15. 'type' => 'integer',
  16. 'required' => true,
  17. 'description' => 'The id of the user.',
  18. 'example' => 9,
  19. ],
  20. 'room_id' => [
  21. 'type' => 'string',
  22. 'required' => false,
  23. 'description' => 'The id of the room. Must be one of <code>3</code>, <code>5</code>, or <code>6</code>.',
  24. ],
  25. 'forever' => [
  26. 'type' => 'boolean',
  27. 'required' => false,
  28. 'description' => 'Whether to ban the user forever.',
  29. 'example' => false,
  30. ],
  31. 'another_one' => [
  32. 'type' => 'number',
  33. 'required' => false,
  34. 'description' => 'Just need something here.',
  35. ],
  36. 'even_more_param' => [
  37. 'type' => 'string[]',
  38. 'required' => false,
  39. 'description' => '',
  40. ],
  41. 'book' => [
  42. 'type' => 'object',
  43. 'description' => '',
  44. 'required' => false,
  45. 'example' => [],
  46. ],
  47. 'book.name' => [
  48. 'type' => 'string',
  49. 'description' => '',
  50. 'required' => false,
  51. ],
  52. 'book.author_id' => [
  53. 'type' => 'integer',
  54. 'description' => '',
  55. 'required' => false,
  56. ],
  57. 'book.pages_count' => [
  58. 'type' => 'integer',
  59. 'description' => '',
  60. 'required' => false,
  61. ],
  62. 'ids' => [
  63. 'type' => 'integer[]',
  64. 'description' => '',
  65. 'required' => false,
  66. ],
  67. 'users' => [
  68. 'type' => 'object[]',
  69. 'description' => '',
  70. 'required' => false,
  71. 'example' => [[]],
  72. ],
  73. 'users[].first_name' => [
  74. 'type' => 'string',
  75. 'description' => 'The first name of the user.',
  76. 'required' => false,
  77. 'example' => 'John',
  78. ],
  79. 'users[].last_name' => [
  80. 'type' => 'string',
  81. 'description' => 'The last name of the user.',
  82. 'required' => false,
  83. 'example' => 'Doe',
  84. ],
  85. ];
  86. /** @test */
  87. public function can_fetch_from_request_validate_assignment()
  88. {
  89. $endpoint = new class extends ExtractedEndpointData {
  90. public function __construct(array $parameters = [])
  91. {
  92. $this->method = new \ReflectionMethod(TestController::class, 'withInlineRequestValidate');
  93. }
  94. };
  95. $strategy = new BodyParameters\GetFromInlineValidator(new DocumentationConfig([]));
  96. $results = $strategy($endpoint, []);
  97. $this->assertArraySubset(self::$expected, $results);
  98. $this->assertIsArray($results['ids']['example']);
  99. }
  100. /** @test */
  101. public function can_fetch_from_request_validate_expression()
  102. {
  103. $endpoint = new class extends ExtractedEndpointData {
  104. public function __construct(array $parameters = [])
  105. {
  106. $this->method = new \ReflectionMethod(TestController::class, 'withInlineRequestValidateNoAssignment');
  107. }
  108. };
  109. $strategy = new BodyParameters\GetFromInlineValidator(new DocumentationConfig([]));
  110. $results = $strategy($endpoint, []);
  111. $this->assertArraySubset(self::$expected, $results);
  112. $this->assertIsArray($results['ids']['example']);
  113. }
  114. /** @test */
  115. public function can_fetch_from_request_validatewithbag()
  116. {
  117. $endpoint = new class extends ExtractedEndpointData {
  118. public function __construct(array $parameters = [])
  119. {
  120. $this->method = new \ReflectionMethod(TestController::class, 'withInlineRequestValidateWithBag');
  121. }
  122. };
  123. $strategy = new BodyParameters\GetFromInlineValidator(new DocumentationConfig([]));
  124. $results = $strategy($endpoint, []);
  125. $this->assertArraySubset(self::$expected, $results);
  126. $this->assertIsArray($results['ids']['example']);
  127. }
  128. /** @test */
  129. public function can_fetch_from_this_validate()
  130. {
  131. $endpoint = new class extends ExtractedEndpointData {
  132. public function __construct(array $parameters = [])
  133. {
  134. $this->method = new \ReflectionMethod(TestController::class, 'withInlineThisValidate');
  135. }
  136. };
  137. $strategy = new BodyParameters\GetFromInlineValidator(new DocumentationConfig([]));
  138. $results = $strategy($endpoint, []);
  139. $this->assertArraySubset(self::$expected, $results);
  140. $this->assertIsArray($results['ids']['example']);
  141. }
  142. /** @test */
  143. public function can_fetch_from_validator_make()
  144. {
  145. $endpoint = new class extends ExtractedEndpointData {
  146. public function __construct(array $parameters = [])
  147. {
  148. $this->method = new \ReflectionMethod(TestController::class, 'withInlineValidatorMake');
  149. }
  150. };
  151. $strategy = new BodyParameters\GetFromInlineValidator(new DocumentationConfig([]));
  152. $results = $strategy($endpoint, []);
  153. $this->assertArraySubset(self::$expected, $results);
  154. $this->assertIsArray($results['ids']['example']);
  155. }
  156. /** @test */
  157. public function respects_query_params_comment()
  158. {
  159. $queryParamsEndpoint = new class extends ExtractedEndpointData {
  160. public function __construct(array $parameters = [])
  161. {
  162. $this->method = new \ReflectionMethod(TestController::class, 'withInlineRequestValidateQueryParams');
  163. }
  164. };
  165. $strategy = new BodyParameters\GetFromInlineValidator(new DocumentationConfig([]));
  166. $results = $strategy($queryParamsEndpoint, []);
  167. $this->assertEquals([], $results);
  168. $queryParamsStrategy = new QueryParameters\GetFromInlineValidator(new DocumentationConfig([]));
  169. $results = $queryParamsStrategy($queryParamsEndpoint, []);
  170. $this->assertArraySubset(self::$expected, $results);
  171. $this->assertIsArray($results['ids']['example']);
  172. $bodyParamsEndpoint = new class extends ExtractedEndpointData {
  173. public function __construct(array $parameters = [])
  174. {
  175. $this->method = new \ReflectionMethod(TestController::class, 'withInlineRequestValidate');
  176. }
  177. };
  178. $results = $queryParamsStrategy($bodyParamsEndpoint, []);
  179. $this->assertEquals([], $results);
  180. }
  181. }