GetFromDocBlocksTest.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace Knuckles\Scribe\Tests\Strategies\Metadata;
  3. use Knuckles\Scribe\Extracting\Strategies\Metadata\GetFromDocBlocks;
  4. use Knuckles\Scribe\Tools\DocumentationConfig;
  5. use Mpociot\Reflection\DocBlock;
  6. use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
  7. use PHPUnit\Framework\TestCase;
  8. class GetFromDocBlocksTest extends TestCase
  9. {
  10. use ArraySubsetAsserts;
  11. /** @test */
  12. public function can_fetch_metadata_from_method_docblock()
  13. {
  14. $strategy = new GetFromDocBlocks(new DocumentationConfig([]));
  15. $methodDocblock = <<<DOCBLOCK
  16. /**
  17. * Endpoint title.
  18. * Endpoint description.
  19. * Multiline.
  20. */
  21. DOCBLOCK;
  22. $classDocblock = '';
  23. $results = $strategy->getMetadataFromDocBlock(new DocBlock($methodDocblock), new DocBlock($classDocblock));
  24. $this->assertArrayNotHasKey('authenticated', $results);
  25. $this->assertNull($results['subgroup']);
  26. $this->assertSame('Endpoint title.', $results['title']);
  27. $this->assertSame("Endpoint description.\nMultiline.", $results['description']);
  28. }
  29. /** @test */
  30. public function can_fetch_metadata_from_method_and_class()
  31. {
  32. $strategy = new GetFromDocBlocks(new DocumentationConfig([]));
  33. $methodDocblock = <<<DOCBLOCK
  34. /**
  35. * Endpoint title.
  36. * Endpoint description.
  37. * Multiline.
  38. */
  39. DOCBLOCK;
  40. $classDocblock = <<<DOCBLOCK
  41. /**
  42. * @group Group A
  43. * Group description.
  44. */
  45. DOCBLOCK;
  46. $results = $strategy->getMetadataFromDocBlock(new DocBlock($methodDocblock), new DocBlock($classDocblock));
  47. $this->assertArrayNotHasKey('authenticated', $results);
  48. $this->assertNull($results['subgroup']);
  49. $this->assertSame('Group A', $results['groupName']);
  50. $this->assertSame('Group description.', $results['groupDescription']);
  51. $this->assertSame('Endpoint title.', $results['title']);
  52. $this->assertSame("Endpoint description.\nMultiline.", $results['description']);
  53. $methodDocblock = <<<DOCBLOCK
  54. /**
  55. * Endpoint title.
  56. * @authenticated
  57. */
  58. DOCBLOCK;
  59. $classDocblock = <<<DOCBLOCK
  60. /**
  61. * @authenticated
  62. * @subgroup Scheiße
  63. * @subgroupDescription Heilige Scheiße
  64. */
  65. DOCBLOCK;
  66. $results = $strategy->getMetadataFromDocBlock(new DocBlock($methodDocblock), new DocBlock($classDocblock));
  67. $this->assertTrue($results['authenticated']);
  68. $this->assertSame(null, $results['groupName']);
  69. $this->assertSame('Scheiße', $results['subgroup']);
  70. $this->assertSame('Heilige Scheiße', $results['subgroupDescription']);
  71. $this->assertSame('', $results['groupDescription']);
  72. $this->assertSame('Endpoint title.', $results['title']);
  73. $this->assertSame("", $results['description']);
  74. }
  75. /** @test */
  76. public function can_override_group_name_group_description_and_auth_status_from_method()
  77. {
  78. $strategy = new GetFromDocBlocks(new DocumentationConfig([]));
  79. $methodDocblock = <<<DOCBLOCK
  80. /**
  81. * Endpoint title.
  82. * This is the endpoint description.
  83. * @authenticated
  84. * @group Group from method
  85. */
  86. DOCBLOCK;
  87. $classDocblock = <<<DOCBLOCK
  88. /**
  89. * @group Group from controller
  90. * This is the group description.
  91. */
  92. DOCBLOCK;
  93. $results = $strategy->getMetadataFromDocBlock(new DocBlock($methodDocblock), new DocBlock($classDocblock));
  94. $this->assertTrue($results['authenticated']);
  95. $this->assertSame('Group from method', $results['groupName']);
  96. $this->assertSame("", $results['groupDescription']);
  97. $this->assertSame("This is the endpoint description.", $results['description']);
  98. $this->assertSame("Endpoint title.", $results['title']);
  99. }
  100. }