Parcourir la source

Merge pull request #381 from robbieaverill/feature/custom-endpoint-metadata

Add support for custom endpoint metadata definitions
Shalvah il y a 3 ans
Parent
commit
1285461d8b

+ 3 - 2
camel/Extraction/Metadata.php

@@ -2,7 +2,6 @@
 
 namespace Knuckles\Camel\Extraction;
 
-
 use Knuckles\Camel\BaseDTO;
 
 class Metadata extends BaseDTO
@@ -28,4 +27,6 @@ class Metadata extends BaseDTO
     public ?string $description;
 
     public bool $authenticated = false;
-}
+
+    public array $custom = [];
+}

+ 15 - 0
tests/Fixtures/TestCustomEndpointMetadata.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace Knuckles\Scribe\Tests\Fixtures;
+
+use Knuckles\Camel\Extraction\ExtractedEndpointData;
+use Knuckles\Scribe\Extracting\Strategies\Strategy;
+
+class TestCustomEndpointMetadata extends Strategy
+{
+    public function __invoke(ExtractedEndpointData $endpointData, array $routeRules): ?array
+    {
+        $endpointData->metadata->custom['myProperty'] = 'some custom metadata';
+        return null;
+    }
+}

+ 9 - 0
tests/Unit/ExtractorTest.php

@@ -23,6 +23,7 @@ class ExtractorTest extends TestCase
         'strategies' => [
             'metadata' => [
                 \Knuckles\Scribe\Extracting\Strategies\Metadata\GetFromDocBlocks::class,
+                \Knuckles\Scribe\Tests\Fixtures\TestCustomEndpointMetadata::class,
             ],
             'urlParameters' => [
                 \Knuckles\Scribe\Extracting\Strategies\UrlParameters\GetFromLaravelAPI::class,
@@ -264,6 +265,14 @@ class ExtractorTest extends TestCase
         $this->assertSame('Name of the location', $parsed->bodyParameters['name']->description);
     }
 
+    /** @test */
+    public function endpoint_metadata_supports_custom_declarations()
+    {
+        $route = $this->createRoute('POST', '/api/test', 'dummy');
+        $parsed = $this->generator->processRoute($route);
+        $this->assertSame('some custom metadata', $parsed->metadata->custom['myProperty']);
+    }
+
     public function createRoute(string $httpMethod, string $path, string $controllerMethod, $register = false, $class = TestController::class)
     {
         return new Route([$httpMethod], $path, ['uses' => $class . "@$controllerMethod"]);