ApiDocGeneratorTest.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. namespace Mpociot\ApiDoc\Tests;
  3. use Illuminate\Routing\Route;
  4. use Orchestra\Testbench\TestCase;
  5. use Mpociot\ApiDoc\Generators\LaravelGenerator;
  6. use Mpociot\ApiDoc\Tests\Fixtures\TestController;
  7. use Mpociot\ApiDoc\ApiDocGeneratorServiceProvider;
  8. use Illuminate\Support\Facades\Route as RouteFacade;
  9. class ApiDocGeneratorTest extends TestCase
  10. {
  11. /**
  12. * @var \Mpociot\ApiDoc\AbstractGenerator
  13. */
  14. protected $generator;
  15. protected function getPackageProviders($app)
  16. {
  17. return [
  18. ApiDocGeneratorServiceProvider::class,
  19. ];
  20. }
  21. /**
  22. * Setup the test environment.
  23. */
  24. public function setUp()
  25. {
  26. parent::setUp();
  27. $this->generator = new LaravelGenerator();
  28. }
  29. public function testCanParseMethodDescription()
  30. {
  31. RouteFacade::get('/api/test', TestController::class.'@parseMethodDescription');
  32. $route = new Route(['GET'], '/api/test', ['uses' => TestController::class.'@parseMethodDescription']);
  33. $parsed = $this->generator->processRoute($route);
  34. $this->assertSame('Example title.', $parsed['title']);
  35. $this->assertSame("This will be the long description.\nIt can also be multiple lines long.", $parsed['description']);
  36. }
  37. public function testCanParseRouteMethods()
  38. {
  39. RouteFacade::get('/get', TestController::class.'@dummy');
  40. RouteFacade::post('/post', TestController::class.'@dummy');
  41. RouteFacade::put('/put', TestController::class.'@dummy');
  42. RouteFacade::delete('/delete', TestController::class.'@dummy');
  43. $route = new Route(['GET'], '/get', ['uses' => TestController::class.'@parseMethodDescription']);
  44. $parsed = $this->generator->processRoute($route);
  45. $this->assertSame(['GET'], $parsed['methods']);
  46. $route = new Route(['POST'], '/post', ['uses' => TestController::class.'@parseMethodDescription']);
  47. $parsed = $this->generator->processRoute($route);
  48. $this->assertSame(['POST'], $parsed['methods']);
  49. $route = new Route(['PUT'], '/put', ['uses' => TestController::class.'@parseMethodDescription']);
  50. $parsed = $this->generator->processRoute($route);
  51. $this->assertSame(['PUT'], $parsed['methods']);
  52. $route = new Route(['DELETE'], '/delete', ['uses' => TestController::class.'@parseMethodDescription']);
  53. $parsed = $this->generator->processRoute($route);
  54. $this->assertSame(['DELETE'], $parsed['methods']);
  55. }
  56. public function testCanParseDependencyInjectionInControllerMethods()
  57. {
  58. RouteFacade::post('/post', TestController::class.'@dependencyInjection');
  59. $route = new Route(['POST'], '/post', ['uses' => TestController::class.'@dependencyInjection']);
  60. $parsed = $this->generator->processRoute($route);
  61. $this->assertTrue(is_array($parsed));
  62. }
  63. public function testCanParseResponseTag()
  64. {
  65. RouteFacade::post('/responseTag', TestController::class.'@responseTag');
  66. $route = new Route(['POST'], '/responseTag', ['uses' => TestController::class.'@responseTag']);
  67. $parsed = $this->generator->processRoute($route);
  68. $this->assertTrue(is_array($parsed));
  69. $this->assertArrayHasKey('showresponse', $parsed);
  70. $this->assertTrue($parsed['showresponse']);
  71. $this->assertJsonStringEqualsJsonString($parsed['response'], '{ "data": []}');
  72. }
  73. public function testCanParseTransformerTag()
  74. {
  75. if (version_compare(PHP_VERSION, '7.0.0', '<')) {
  76. $this->markTestSkipped('The transformer tag without model need PHP 7');
  77. }
  78. RouteFacade::post('/transformerTag', TestController::class.'@transformerTag');
  79. $route = new Route(['GET'], '/transformerTag', ['uses' => TestController::class.'@transformerTag']);
  80. $parsed = $this->generator->processRoute($route);
  81. $this->assertTrue(is_array($parsed));
  82. $this->assertArrayHasKey('showresponse', $parsed);
  83. $this->assertTrue($parsed['showresponse']);
  84. $this->assertSame(
  85. $parsed['response'],
  86. '{"data":{"id":1,"description":"Welcome on this test versions","name":"TestName"}}'
  87. );
  88. }
  89. public function testCanParseTransformerTagWithModel()
  90. {
  91. RouteFacade::post('/transformerTagWithModel', TestController::class.'@transformerTagWithModel');
  92. $route = new Route(['GET'], '/transformerTagWithModel', ['uses' => TestController::class.'@transformerTagWithModel']);
  93. $parsed = $this->generator->processRoute($route);
  94. $this->assertTrue(is_array($parsed));
  95. $this->assertArrayHasKey('showresponse', $parsed);
  96. $this->assertTrue($parsed['showresponse']);
  97. $this->assertSame(
  98. $parsed['response'],
  99. '{"data":{"id":1,"description":"Welcome on this test versions","name":"TestName"}}'
  100. );
  101. }
  102. public function testCanParseTransformerCollectionTag()
  103. {
  104. if (version_compare(PHP_VERSION, '7.0.0', '<')) {
  105. $this->markTestSkipped('The transformer tag without model need PHP 7');
  106. }
  107. RouteFacade::post('/transformerCollectionTag', TestController::class.'@transformerCollectionTag');
  108. $route = new Route(['GET'], '/transformerCollectionTag', ['uses' => TestController::class.'@transformerCollectionTag']);
  109. $parsed = $this->generator->processRoute($route);
  110. $this->assertTrue(is_array($parsed));
  111. $this->assertArrayHasKey('showresponse', $parsed);
  112. $this->assertTrue($parsed['showresponse']);
  113. $this->assertSame(
  114. $parsed['response'],
  115. '{"data":[{"id":1,"description":"Welcome on this test versions","name":"TestName"},'.
  116. '{"id":1,"description":"Welcome on this test versions","name":"TestName"}]}'
  117. );
  118. }
  119. public function testCanParseTransformerCollectionTagWithModel()
  120. {
  121. RouteFacade::post('/transformerCollectionTagWithModel', TestController::class.'@transformerCollectionTagWithModel');
  122. $route = new Route(['GET'], '/transformerCollectionTagWithModel', ['uses' => TestController::class.'@transformerCollectionTagWithModel']);
  123. $parsed = $this->generator->processRoute($route);
  124. $this->assertTrue(is_array($parsed));
  125. $this->assertArrayHasKey('showresponse', $parsed);
  126. $this->assertTrue($parsed['showresponse']);
  127. $this->assertSame(
  128. $parsed['response'],
  129. '{"data":[{"id":1,"description":"Welcome on this test versions","name":"TestName"},'.
  130. '{"id":1,"description":"Welcome on this test versions","name":"TestName"}]}'
  131. );
  132. }
  133. }