GetFromFormRequestTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. namespace Knuckles\Scribe\Tests\Strategies;
  3. use Knuckles\Scribe\Extracting\Strategies\BodyParameters;
  4. use Knuckles\Scribe\Extracting\Strategies\QueryParameters;
  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 GetFromFormRequestTest extends BaseLaravelTest
  10. {
  11. use ArraySubsetAsserts;
  12. /** @test */
  13. public function can_fetch_bodyparams_from_form_request()
  14. {
  15. $method = new \ReflectionMethod(TestController::class, 'withFormRequestParameter');
  16. $strategy = new BodyParameters\GetFromFormRequest(new DocumentationConfig([]));
  17. $results = $strategy->getParametersFromFormRequest($method);
  18. $this->assertArraySubset([
  19. 'user_id' => [
  20. 'type' => 'integer',
  21. 'required' => true,
  22. 'description' => 'The id of the user.',
  23. 'example' => 9,
  24. ],
  25. 'room_id' => [
  26. 'type' => 'string',
  27. 'required' => false,
  28. 'description' => 'The id of the room.',
  29. ],
  30. 'forever' => [
  31. 'type' => 'boolean',
  32. 'required' => false,
  33. 'description' => 'Whether to ban the user forever.',
  34. 'example' => false,
  35. ],
  36. 'another_one' => [
  37. 'type' => 'number',
  38. 'required' => false,
  39. 'description' => 'Just need something here.',
  40. ],
  41. 'even_more_param' => [
  42. 'type' => 'string[]',
  43. 'required' => false,
  44. 'description' => '',
  45. ],
  46. 'book' => [
  47. 'type' => 'object',
  48. 'description' => '',
  49. 'required' => false,
  50. 'example' => [],
  51. ],
  52. 'book.name' => [
  53. 'type' => 'string',
  54. 'description' => '',
  55. 'required' => false,
  56. ],
  57. 'book.author_id' => [
  58. 'type' => 'integer',
  59. 'description' => '',
  60. 'required' => false,
  61. ],
  62. 'book.pages_count' => [
  63. 'type' => 'integer',
  64. 'description' => '',
  65. 'required' => false,
  66. ],
  67. 'ids' => [
  68. 'type' => 'integer[]',
  69. 'description' => '',
  70. 'required' => false,
  71. ],
  72. 'users' => [
  73. 'type' => 'object[]',
  74. 'description' => '',
  75. 'required' => false,
  76. 'example' => [[]],
  77. ],
  78. 'users[].first_name' => [
  79. 'type' => 'string',
  80. 'description' => 'The first name of the user.',
  81. 'required' => false,
  82. 'example' => 'John',
  83. ],
  84. 'users[].last_name' => [
  85. 'type' => 'string',
  86. 'description' => 'The last name of the user.',
  87. 'required' => false,
  88. 'example' => 'Doe',
  89. ],
  90. ], $results);
  91. $this->assertIsArray($results['ids']['example']);
  92. }
  93. /** @test */
  94. public function can_fetch_queryparams_from_form_request()
  95. {
  96. $strategy = new QueryParameters\GetFromFormRequest(new DocumentationConfig([]));
  97. $method = new \ReflectionMethod(TestController::class, 'withFormRequestParameterQueryParams');
  98. $results = $strategy->getParametersFromFormRequest($method);
  99. $this->assertArraySubset([
  100. 'q_param' => [
  101. 'type' => 'integer',
  102. 'description' => 'The param.',
  103. 'required' => true,
  104. 'example' => 9,
  105. ],
  106. ], $results);
  107. $method = new \ReflectionMethod(TestController::class, 'withFormRequestParameterQueryParamsComment');
  108. $results = $strategy->getParametersFromFormRequest($method);
  109. $this->assertArraySubset([
  110. 'type' => 'integer',
  111. 'description' => '',
  112. 'required' => true,
  113. ], $results['q_param']);
  114. }
  115. /** @test */
  116. public function will_ignore_not_relevant_form_request()
  117. {
  118. $queryParamsStrategy = new QueryParameters\GetFromFormRequest(new DocumentationConfig([]));
  119. $method = new \ReflectionMethod(TestController::class, 'withFormRequestParameter');
  120. $results = $queryParamsStrategy->getParametersFromFormRequest($method);
  121. $this->assertEquals([], $results);
  122. $bodyParamsStrategy = new BodyParameters\GetFromFormRequest(new DocumentationConfig([]));
  123. $method = new \ReflectionMethod(TestController::class, 'withFormRequestParameterQueryParams');
  124. $results = $bodyParamsStrategy->getParametersFromFormRequest($method);
  125. $this->assertEquals([], $results);
  126. $method = new \ReflectionMethod(TestController::class, 'withFormRequestParameterQueryParamsComment');
  127. $results = $bodyParamsStrategy->getParametersFromFormRequest($method);
  128. $this->assertEquals([], $results);
  129. }
  130. }