GetFromMetadataAttributesTest.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  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. use ReflectionMethod;
  16. class UseMetadataAttributesTest extends TestCase
  17. {
  18. use ArraySubsetAsserts;
  19. /** @test */
  20. public function can_fetch_from_authenticated_attribute_or_authenticated_parameter()
  21. {
  22. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  23. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  24. $e->method = $e->controller->getMethod('a1');
  25. });
  26. $results = $this->fetch($endpoint);
  27. $this->assertArraySubset([
  28. "groupName" => "Group A",
  29. "groupDescription" => "A group",
  30. "subgroup" => "SG AA",
  31. "subgroupDescription" => "A subgroup",
  32. "title" => "Endpoint A1",
  33. "description" => "",
  34. "authenticated" => false,
  35. ], $results);
  36. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  37. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  38. $e->method = $e->controller->getMethod('a2');
  39. });
  40. $results = $this->fetch($endpoint);
  41. $this->assertArraySubset([
  42. "groupName" => "Group A",
  43. "groupDescription" => "A group",
  44. "subgroup" => "",
  45. "subgroupDescription" => "",
  46. "title" => "Endpoint A2",
  47. "description" => "Stuff",
  48. "authenticated" => true,
  49. ], $results);
  50. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  51. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  52. $e->method = $e->controller->getMethod('a3');
  53. });
  54. $results = $this->fetch($endpoint);
  55. $this->assertArraySubset([
  56. "groupName" => "Group A",
  57. "groupDescription" => "A group",
  58. "subgroup" => "",
  59. "subgroupDescription" => "",
  60. "title" => "Endpoint A3",
  61. "description" => "",
  62. "authenticated" => true,
  63. ], $results);
  64. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  65. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  66. $e->method = $e->controller->getMethod('b1');
  67. });
  68. $results = $this->fetch($endpoint);
  69. $this->assertArraySubset([
  70. "groupName" => "Group B",
  71. "groupDescription" => "",
  72. "subgroup" => "SG BA",
  73. "subgroupDescription" => "",
  74. "title" => "Endpoint B1",
  75. "description" => "",
  76. "authenticated" => false,
  77. ], $results);
  78. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  79. $e->controller = new ReflectionClass(MetadataAttributesTestController2::class);
  80. $e->method = $e->controller->getMethod('c1');
  81. });
  82. $results = $this->fetch($endpoint);
  83. $this->assertArraySubset([
  84. "authenticated" => true,
  85. ], $results);
  86. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  87. $e->controller = new ReflectionClass(MetadataAttributesTestController2::class);
  88. $e->method = $e->controller->getMethod('c2');
  89. });
  90. $results = $this->fetch($endpoint);
  91. $this->assertArraySubset([
  92. "authenticated" => false,
  93. ], $results);
  94. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  95. $e->controller = new ReflectionClass(MetadataAttributesTestController3::class);
  96. $e->method = $e->controller->getMethod('c1');
  97. });
  98. $results = $this->fetch($endpoint);
  99. $this->assertArraySubset([
  100. "title" => "Endpoint C"
  101. ], $results);
  102. }
  103. protected function fetch($endpoint): array
  104. {
  105. $strategy = new GetFromMetadataAttributes(new DocumentationConfig([
  106. "auth" => ["default" => true]
  107. ]));
  108. return $strategy($endpoint, []);
  109. }
  110. protected function endpoint(Closure $configure): ExtractedEndpointData
  111. {
  112. $endpoint = new class extends ExtractedEndpointData {
  113. public function __construct(array $parameters = [])
  114. {
  115. }
  116. };
  117. $configure($endpoint);
  118. return $endpoint;
  119. }
  120. }
  121. #[Group("Group A", "A group")]
  122. #[Authenticated(false)]
  123. class MetadataAttributesTestController
  124. {
  125. #[Subgroup("SG AA", "A subgroup")]
  126. #[Endpoint("Endpoint A1")]
  127. public function a1()
  128. {
  129. }
  130. #[Endpoint("Endpoint A2", "Stuff", authenticated: true)]
  131. public function a2()
  132. {
  133. }
  134. #[Endpoint("Endpoint A3")]
  135. #[Authenticated]
  136. public function a3()
  137. {
  138. }
  139. #[Group("Group B")]
  140. #[Subgroup("SG BA")]
  141. #[Endpoint("Endpoint B1")]
  142. public function b1()
  143. {
  144. }
  145. }
  146. #[Authenticated]
  147. class MetadataAttributesTestController2
  148. {
  149. public function c1()
  150. {
  151. }
  152. #[Unauthenticated]
  153. public function c2()
  154. {
  155. }
  156. }
  157. #[Endpoint("Endpoint C")]
  158. class MetadataAttributesTestController3
  159. {
  160. public function c1()
  161. {
  162. }
  163. }