GetFromMetadataAttributesTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. namespace Knuckles\Scribe\Tests\Strategies\QueryParameters;
  3. use Closure;
  4. use Knuckles\Camel\Extraction\ExtractedEndpointData;
  5. use Knuckles\Scribe\Attributes\Authenticated;
  6. use Knuckles\Scribe\Attributes\Endpoint;
  7. use Knuckles\Scribe\Attributes\Group;
  8. use Knuckles\Scribe\Attributes\Subgroup;
  9. use Knuckles\Scribe\Attributes\Unauthenticated;
  10. use Knuckles\Scribe\Extracting\Strategies\Metadata\GetFromMetadataAttributes;
  11. use Knuckles\Scribe\Tools\DocumentationConfig;
  12. use PHPUnit\Framework\TestCase;
  13. use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
  14. use ReflectionClass;
  15. class UseMetadataAttributesTest extends TestCase
  16. {
  17. use ArraySubsetAsserts;
  18. /** @test */
  19. public function can_fetch_from_authenticated_attribute_or_authenticated_parameter()
  20. {
  21. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  22. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  23. $e->method = $e->controller->getMethod('a1');
  24. });
  25. $results = $this->fetch($endpoint);
  26. $this->assertArraySubset([
  27. "groupName" => "Group A",
  28. "groupDescription" => "A group",
  29. "subgroup" => "SG AA",
  30. "subgroupDescription" => "A subgroup",
  31. "title" => "Endpoint A1",
  32. "description" => "",
  33. "authenticated" => false,
  34. ], $results);
  35. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  36. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  37. $e->method = $e->controller->getMethod('a2');
  38. });
  39. $results = $this->fetch($endpoint);
  40. $this->assertArraySubset([
  41. "groupName" => "Group A",
  42. "groupDescription" => "A group",
  43. "subgroup" => "",
  44. "subgroupDescription" => "",
  45. "title" => "Endpoint A2",
  46. "description" => "Stuff",
  47. "authenticated" => true,
  48. ], $results);
  49. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  50. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  51. $e->method = $e->controller->getMethod('a3');
  52. });
  53. $results = $this->fetch($endpoint);
  54. $this->assertArraySubset([
  55. "groupName" => "Group A",
  56. "groupDescription" => "A group",
  57. "subgroup" => "",
  58. "subgroupDescription" => "",
  59. "title" => "Endpoint A3",
  60. "description" => "",
  61. "authenticated" => true,
  62. ], $results);
  63. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  64. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  65. $e->method = $e->controller->getMethod('b1');
  66. });
  67. $results = $this->fetch($endpoint);
  68. $this->assertArraySubset([
  69. "groupName" => "Group B",
  70. "groupDescription" => "",
  71. "subgroup" => "SG BA",
  72. "subgroupDescription" => "",
  73. "title" => "Endpoint B1",
  74. "description" => "",
  75. "authenticated" => false,
  76. ], $results);
  77. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  78. $e->controller = new ReflectionClass(MetadataAttributesTestController2::class);
  79. $e->method = $e->controller->getMethod('c1');
  80. });
  81. $results = $this->fetch($endpoint);
  82. $this->assertArraySubset([
  83. "authenticated" => true,
  84. ], $results);
  85. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  86. $e->controller = new ReflectionClass(MetadataAttributesTestController2::class);
  87. $e->method = $e->controller->getMethod('c2');
  88. });
  89. $results = $this->fetch($endpoint);
  90. $this->assertArraySubset([
  91. "authenticated" => false,
  92. ], $results);
  93. }
  94. protected function fetch($endpoint): array
  95. {
  96. $strategy = new GetFromMetadataAttributes(new DocumentationConfig([
  97. "auth" => ["default" => true]
  98. ]));
  99. return $strategy($endpoint, []);
  100. }
  101. protected function endpoint(Closure $configure): ExtractedEndpointData
  102. {
  103. $endpoint = new class extends ExtractedEndpointData {
  104. public function __construct(array $parameters = [])
  105. {
  106. }
  107. };
  108. $configure($endpoint);
  109. return $endpoint;
  110. }
  111. }
  112. #[Group("Group A", "A group")]
  113. #[Authenticated(false)]
  114. class MetadataAttributesTestController
  115. {
  116. #[Subgroup("SG AA", "A subgroup")]
  117. #[Endpoint("Endpoint A1")]
  118. public function a1()
  119. {
  120. }
  121. #[Endpoint("Endpoint A2", "Stuff", authenticated: true)]
  122. public function a2()
  123. {
  124. }
  125. #[Endpoint("Endpoint A3")]
  126. #[Authenticated]
  127. public function a3()
  128. {
  129. }
  130. #[Group("Group B")]
  131. #[Subgroup("SG BA")]
  132. #[Endpoint("Endpoint B1")]
  133. public function b1()
  134. {
  135. }
  136. }
  137. #[Authenticated]
  138. class MetadataAttributesTestController2
  139. {
  140. public function c1()
  141. {
  142. }
  143. #[Unauthenticated]
  144. public function c2()
  145. {
  146. }
  147. }