GetFromMetadataAttributesTest.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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\Extracting\Strategies\Metadata\GetFromMetadataAttributes;
  10. use Knuckles\Scribe\Tools\DocumentationConfig;
  11. use PHPUnit\Framework\TestCase;
  12. use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
  13. use ReflectionClass;
  14. class UseMetadataAttributesTest extends TestCase
  15. {
  16. use ArraySubsetAsserts;
  17. /** @test */
  18. public function can_fetch_from_authenticated_attribute_or_authenticated_parameter()
  19. {
  20. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  21. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  22. $e->method = $e->controller->getMethod('a1');
  23. });
  24. $results = $this->fetch($endpoint);
  25. $this->assertArraySubset([
  26. "groupName" => "Group A",
  27. "groupDescription" => "A group",
  28. "subgroup" => "SG AA",
  29. "subgroupDescription" => "A subgroup",
  30. "title" => "Endpoint A1",
  31. "description" => "",
  32. "authenticated" => false,
  33. ], $results);
  34. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  35. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  36. $e->method = $e->controller->getMethod('a2');
  37. });
  38. $results = $this->fetch($endpoint);
  39. $this->assertArraySubset([
  40. "groupName" => "Group A",
  41. "groupDescription" => "A group",
  42. "subgroup" => "",
  43. "subgroupDescription" => "",
  44. "title" => "Endpoint A2",
  45. "description" => "Stuff",
  46. "authenticated" => true,
  47. ], $results);
  48. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  49. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  50. $e->method = $e->controller->getMethod('a3');
  51. });
  52. $results = $this->fetch($endpoint);
  53. $this->assertArraySubset([
  54. "groupName" => "Group A",
  55. "groupDescription" => "A group",
  56. "subgroup" => "",
  57. "subgroupDescription" => "",
  58. "title" => "Endpoint A3",
  59. "description" => "",
  60. "authenticated" => true,
  61. ], $results);
  62. $endpoint = $this->endpoint(function (ExtractedEndpointData $e) {
  63. $e->controller = new ReflectionClass(MetadataAttributesTestController::class);
  64. $e->method = $e->controller->getMethod('b1');
  65. });
  66. $results = $this->fetch($endpoint);
  67. $this->assertArraySubset([
  68. "groupName" => "Group B",
  69. "groupDescription" => "",
  70. "subgroup" => "SG BA",
  71. "subgroupDescription" => "",
  72. "title" => "Endpoint B1",
  73. "description" => "",
  74. "authenticated" => false,
  75. ], $results);
  76. }
  77. protected function fetch($endpoint): array
  78. {
  79. $strategy = new GetFromMetadataAttributes(new DocumentationConfig([
  80. "auth" => ["default" => true]
  81. ]));
  82. return $strategy($endpoint, []);
  83. }
  84. protected function endpoint(Closure $configure): ExtractedEndpointData
  85. {
  86. $endpoint = new class extends ExtractedEndpointData {
  87. public function __construct(array $parameters = [])
  88. {
  89. }
  90. };
  91. $configure($endpoint);
  92. return $endpoint;
  93. }
  94. }
  95. #[Group("Group A", "A group")]
  96. #[Authenticated(false)]
  97. class MetadataAttributesTestController
  98. {
  99. #[Subgroup("SG AA", "A subgroup")]
  100. #[Endpoint("Endpoint A1")]
  101. public function a1()
  102. {
  103. }
  104. #[Endpoint("Endpoint A2", "Stuff", authenticated: true)]
  105. public function a2()
  106. {
  107. }
  108. #[Endpoint("Endpoint A3")]
  109. #[Authenticated]
  110. public function a3()
  111. {
  112. }
  113. #[Group("Group B")]
  114. #[Subgroup("SG BA")]
  115. #[Endpoint("Endpoint B1")]
  116. public function b1()
  117. {
  118. }
  119. }