Forráskód Böngészése

Add unit test for sorting

Bram Ceulemans 2 éve
szülő
commit
968cedb0ff
2 módosított fájl, 40 hozzáadás és 2 törlés
  1. 1 1
      src/Extracting/Extractor.php
  2. 39 1
      tests/Unit/ExtractorPluginSystemTest.php

+ 1 - 1
src/Extracting/Extractor.php

@@ -165,7 +165,7 @@ class Extractor
             $endpointData->responses->concat($results);
         });
         // Ensure 200 responses come first
-        $endpointData->responses = $endpointData->responses->sortBy('status');
+        $endpointData->responses = $endpointData->responses->sortBy('status')->values();
     }
 
     protected function fetchResponseFields(ExtractedEndpointData $endpointData, array $rulesToApply): void

+ 39 - 1
tests/Unit/ExtractorPluginSystemTest.php

@@ -2,9 +2,9 @@
 
 namespace Knuckles\Scribe\Tests\Unit;
 
-use Knuckles\Camel\Extraction\ExtractedEndpointData;
 use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
 use Illuminate\Routing\Route;
+use Knuckles\Camel\Extraction\ExtractedEndpointData;
 use Knuckles\Scribe\Extracting\Extractor;
 use Knuckles\Scribe\Extracting\Strategies\Strategy;
 use Knuckles\Scribe\ScribeServiceProvider;
@@ -129,6 +129,36 @@ class ExtractorPluginSystemTest extends TestCase
         $this->assertArraySubset($expectedMetadata, $parsed->metadata->toArray());
     }
 
+    public function responsesToSort(): array
+    {
+        return [
+            '400, 200, 201' => [[DummyResponseStrategy400::class, DummyResponseStrategy200::class, DummyResponseStrategy201::class]],
+            '201, 400, 200' => [[DummyResponseStrategy201::class, DummyResponseStrategy400::class, DummyResponseStrategy200::class]],
+            '400, 201, 200' => [[DummyResponseStrategy400::class, DummyResponseStrategy201::class, DummyResponseStrategy200::class]],
+        ];
+    }
+
+    /**
+     * @test
+     * @dataProvider responsesToSort
+     */
+    public function sort_responses_by_status_code(array $responses)
+    {
+        $config = [
+            'strategies' => [
+                'bodyParameters' => [],
+                'responses' => $responses,
+            ],
+        ];
+        $parsed = $this->processRoute($config);
+
+        [$first, $second, $third] = $parsed->responses;
+
+        self::assertEquals(200, $first->status);
+        self::assertEquals(201, $second->status);
+        self::assertEquals(400, $third->status);
+    }
+
     /** @test */
     public function overwrites_metadata_from_previous_strategies_in_same_stage()
     {
@@ -236,6 +266,14 @@ class DummyResponseStrategy200 extends Strategy
     }
 }
 
+class DummyResponseStrategy201 extends Strategy
+{
+    public function __invoke(ExtractedEndpointData $endpointData, array $routeRules = []): ?array
+    {
+        return [['status' => 201, 'content' => 'dummy2']];
+    }
+}
+
 class DummyResponseStrategy400 extends Strategy
 {
     public function __invoke(ExtractedEndpointData $endpointData, array $routeRules = []): ?array