GetFromInlineValidatorTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace Knuckles\Scribe\Tests\Strategies\BodyParameters;
  3. use Knuckles\Camel\Extraction\ExtractedEndpointData;
  4. use Knuckles\Scribe\Extracting\Strategies\BodyParameters\GetFromInlineValidator;
  5. use Knuckles\Scribe\Tests\BaseLaravelTest;
  6. use Knuckles\Scribe\Tests\Fixtures\TestController;
  7. use Knuckles\Scribe\Tools\DocumentationConfig;
  8. use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
  9. class GetFromInlineValidatorTest extends BaseLaravelTest
  10. {
  11. use ArraySubsetAsserts;
  12. private static $expected = [
  13. 'user_id' => [
  14. 'type' => 'integer',
  15. 'required' => true,
  16. 'description' => 'The id of the user.',
  17. 'example' => 9,
  18. ],
  19. 'room_id' => [
  20. 'type' => 'string',
  21. 'required' => false,
  22. 'description' => 'The id of the room. The value must be one of <code>3</code>, <code>5</code>, or <code>6</code>.',
  23. ],
  24. 'forever' => [
  25. 'type' => 'boolean',
  26. 'required' => false,
  27. 'description' => 'Whether to ban the user forever.',
  28. 'example' => false,
  29. ],
  30. 'another_one' => [
  31. 'type' => 'number',
  32. 'required' => false,
  33. 'description' => 'Just need something here.',
  34. ],
  35. 'even_more_param' => [
  36. 'type' => 'string[]',
  37. 'required' => false,
  38. 'description' => '',
  39. ],
  40. 'book' => [
  41. 'type' => 'object',
  42. 'description' => '',
  43. 'required' => false,
  44. 'example' => [],
  45. ],
  46. 'book.name' => [
  47. 'type' => 'string',
  48. 'description' => '',
  49. 'required' => false,
  50. ],
  51. 'book.author_id' => [
  52. 'type' => 'integer',
  53. 'description' => '',
  54. 'required' => false,
  55. ],
  56. 'book.pages_count' => [
  57. 'type' => 'integer',
  58. 'description' => '',
  59. 'required' => false,
  60. ],
  61. 'ids' => [
  62. 'type' => 'integer[]',
  63. 'description' => '',
  64. 'required' => false,
  65. ],
  66. 'users' => [
  67. 'type' => 'object[]',
  68. 'description' => '',
  69. 'required' => false,
  70. 'example' => [[]],
  71. ],
  72. 'users[].first_name' => [
  73. 'type' => 'string',
  74. 'description' => 'The first name of the user.',
  75. 'required' => false,
  76. 'example' => 'John',
  77. ],
  78. 'users[].last_name' => [
  79. 'type' => 'string',
  80. 'description' => 'The last name of the user.',
  81. 'required' => false,
  82. 'example' => 'Doe',
  83. ],
  84. ];
  85. /** @test */
  86. public function can_fetch_from_request_validate()
  87. {
  88. $endpoint = new class extends ExtractedEndpointData {
  89. public function __construct(array $parameters = [])
  90. {
  91. $this->method = new \ReflectionMethod(TestController::class, 'withInlineRequestValidate');
  92. }
  93. };
  94. $strategy = new GetFromInlineValidator(new DocumentationConfig([]));
  95. $results = $strategy($endpoint, []);
  96. $this->assertArraySubset(self::$expected, $results);
  97. $this->assertIsArray($results['ids']['example']);
  98. }
  99. /** @test */
  100. public function can_fetch_from_validator_make()
  101. {
  102. $endpoint = new class extends ExtractedEndpointData {
  103. public function __construct(array $parameters = [])
  104. {
  105. $this->method = new \ReflectionMethod(TestController::class, 'withInlineValidatorMake');
  106. }
  107. };
  108. $strategy = new GetFromInlineValidator(new DocumentationConfig([]));
  109. $results = $strategy($endpoint, []);
  110. $this->assertArraySubset(self::$expected, $results);
  111. $this->assertIsArray($results['ids']['example']);
  112. }
  113. }