GetFromInlineValidatorTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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()
  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_validator_make()
  102. {
  103. $endpoint = new class extends ExtractedEndpointData {
  104. public function __construct(array $parameters = [])
  105. {
  106. $this->method = new \ReflectionMethod(TestController::class, 'withInlineValidatorMake');
  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 respects_query_params_comment()
  116. {
  117. $queryParamsEndpoint = new class extends ExtractedEndpointData {
  118. public function __construct(array $parameters = [])
  119. {
  120. $this->method = new \ReflectionMethod(TestController::class, 'withInlineRequestValidateQueryParams');
  121. }
  122. };
  123. $strategy = new BodyParameters\GetFromInlineValidator(new DocumentationConfig([]));
  124. $results = $strategy($queryParamsEndpoint, []);
  125. $this->assertEquals([], $results);
  126. $queryParamsStrategy = new QueryParameters\GetFromInlineValidator(new DocumentationConfig([]));
  127. $results = $queryParamsStrategy($queryParamsEndpoint, []);
  128. $this->assertArraySubset(self::$expected, $results);
  129. $this->assertIsArray($results['ids']['example']);
  130. $bodyParamsEndpoint = new class extends ExtractedEndpointData {
  131. public function __construct(array $parameters = [])
  132. {
  133. $this->method = new \ReflectionMethod(TestController::class, 'withInlineRequestValidate');
  134. }
  135. };
  136. $results = $queryParamsStrategy($bodyParamsEndpoint, []);
  137. $this->assertEquals([], $results);
  138. }
  139. }