Browse Source

Refactor + clean up tests

Shalvah 1 year ago
parent
commit
40fe571c08

+ 131 - 2
camel/Output/OutputEndpointData.php

@@ -4,9 +4,11 @@ namespace Knuckles\Camel\Output;
 
 use Illuminate\Http\UploadedFile;
 use Illuminate\Routing\Route;
+use Illuminate\Support\Arr;
 use Illuminate\Support\Str;
 use Knuckles\Camel\BaseDTO;
 use Knuckles\Camel\Extraction\Metadata;
+use Knuckles\Camel\Extraction\Parameter;
 use Knuckles\Camel\Extraction\ResponseCollection;
 use Knuckles\Camel\Extraction\ResponseField;
 use Knuckles\Scribe\Extracting\Extractor;
@@ -105,8 +107,8 @@ class OutputEndpointData extends BaseDTO
         $this->cleanBodyParameters = Extractor::cleanParams($this->bodyParameters);
         $this->cleanQueryParameters = Extractor::cleanParams($this->queryParameters);
         $this->cleanUrlParameters = Extractor::cleanParams($this->urlParameters);
-        $this->nestedBodyParameters = Extractor::nestArrayAndObjectFields($this->bodyParameters, $this->cleanBodyParameters);
-        $this->nestedResponseFields = Extractor::nestArrayAndObjectFields($this->responseFields);
+        $this->nestedBodyParameters = self::nestArrayAndObjectFields($this->bodyParameters, $this->cleanBodyParameters);
+        $this->nestedResponseFields = self::nestArrayAndObjectFields($this->responseFields);
 
         $this->boundUri = u::getUrlWithBoundParameters($this->uri, $this->cleanUrlParameters);
 
@@ -142,6 +144,133 @@ class OutputEndpointData extends BaseDTO
         return new self($endpoint);
     }
 
+    /**
+     * Transform body parameters such that object fields have a `fields` property containing a list of all subfields
+     * Subfields will be removed from the main parameter map
+     * For instance, if $parameters is [
+     *   'dad' => new Parameter(...),
+     *   'dad.age' => new Parameter(...),
+     *   'dad.cars[]' => new Parameter(...),
+     *   'dad.cars[].model' => new Parameter(...),
+     *   'dad.cars[].price' => new Parameter(...),
+     * ],
+     * normalise this into [
+     *   'dad' => [
+     *     ...,
+     *     '__fields' => [
+     *       'dad.age' => [...],
+     *       'dad.cars' => [
+     *         ...,
+     *         '__fields' => [
+     *           'model' => [...],
+     *           'price' => [...],
+     *         ],
+     *       ],
+     *   ],
+     * ]]
+     *
+     * @param array $parameters
+     *
+     * @return array
+     */
+    public static function nestArrayAndObjectFields(array $parameters, array $cleanParameters = []): array
+    {
+        // First, we'll make sure all object fields have parent fields properly set
+        $normalisedParameters = [];
+        foreach ($parameters as $name => $parameter) {
+            if (Str::contains($name, '.')) {
+                // If the user didn't add a parent field, we'll helpfully add it for them
+                $ancestors = [];
+
+                $parts = explode('.', $name);
+                $fieldName = array_pop($parts);
+                $parentName = rtrim(join('.', $parts), '[]');
+
+                // When the body is an array, param names will be "[].paramname",
+                // so $parentName is empty. Let's fix that.
+                if (empty($parentName)) {
+                    $parentName = '[]';
+                }
+
+                while ($parentName) {
+                    if (!empty($normalisedParameters[$parentName])) {
+                        break;
+                    }
+
+                    $details = [
+                        "name" => $parentName,
+                        "type" => $parentName === '[]' ? "object[]" : "object",
+                        "description" => "",
+                        "required" => false,
+                    ];
+
+                    if ($parameter instanceof ResponseField) {
+                        $ancestors[] = [$parentName, new ResponseField($details)];
+                    } else {
+                        $lastParentExample = $details["example"] =
+                            [$fieldName => $lastParentExample ?? $parameter->example];
+                        $ancestors[] = [$parentName, new Parameter($details)];
+                    }
+
+                    $fieldName = array_pop($parts);
+                    $parentName = rtrim(join('.', $parts), '[]');
+                }
+
+                // We add ancestors in reverse so we can iterate over parents first in the next section
+                foreach (array_reverse($ancestors) as [$ancestorName, $ancestor]) {
+                    $normalisedParameters[$ancestorName] = $ancestor;
+                }
+            }
+
+            $normalisedParameters[$name] = $parameter;
+            unset($lastParentExample);
+        }
+
+        $finalParameters = [];
+        foreach ($normalisedParameters as $name => $parameter) {
+            $parameter = $parameter->toArray();
+            if (Str::contains($name, '.')) { // An object field
+                // Get the various pieces of the name
+                $parts = explode('.', $name);
+                $fieldName = array_pop($parts);
+                $baseName = join('.__fields.', $parts);
+
+                // For subfields, the type is indicated in the source object
+                // eg test.items[].more and test.items.more would both have parent field with name `items` and containing __fields => more
+                // The difference would be in the parent field's `type` property (object[] vs object)
+                // So we can get rid of all [] to get the parent name
+                $dotPathToParent = str_replace('[]', '', $baseName);
+                // When the body is an array, param names will be  "[].paramname",
+                // so $parts is ['[]']
+                if ($parts[0] == '[]') {
+                    $dotPathToParent = '[]' . $dotPathToParent;
+                }
+
+                $dotPath = $dotPathToParent . '.__fields.' . $fieldName;
+                Arr::set($finalParameters, $dotPath, $parameter);
+            } else { // A regular field, not a subfield of anything
+                // Note: we're assuming any subfields of this field are listed *after* it,
+                // and will set __fields correctly when we iterate over them
+                // Hence why we create a new "normalisedParameters" array above and push the parent to that first
+                $parameter['__fields'] = [];
+                $finalParameters[$name] = $parameter;
+            }
+
+        }
+
+        // Finally, if the body is an array, remove any other items.
+        if (isset($finalParameters['[]'])) {
+            $finalParameters = ["[]" => $finalParameters['[]']];
+            // At this point, the examples are likely [[], []],
+            // but have been correctly set in clean parameters, so let's update them
+            if ($finalParameters["[]"]["example"][0] == [] && !empty($cleanParameters)) {
+                $finalParameters["[]"]["example"] = $cleanParameters;
+            }
+        }
+
+        return $finalParameters;
+    }
+
     public function endpointId(): string
     {
         return $this->httpMethods[0] . str_replace(['/', '?', '{', '}', ':', '\\', '+', '|', '.'], '-', $this->uri);

+ 4 - 129
src/Extracting/Extractor.php

@@ -14,8 +14,8 @@ use Illuminate\Support\Str;
 use Knuckles\Camel\Extraction\ResponseCollection;
 use Knuckles\Camel\Extraction\ResponseField;
 use Knuckles\Camel\Output\OutputEndpointData;
-use Knuckles\Scribe\Extracting\Strategies\Strategy;
 use Knuckles\Scribe\Tools\DocumentationConfig;
+use Knuckles\Scribe\Tools\RoutePatternMatcher;
 
 class Extractor
 {
@@ -199,7 +199,9 @@ class Extractor
      * @param callable $handler Function to run after each strategy returns its results (an array).
      *
      */
-    protected function iterateThroughStrategies(string $stage, ExtractedEndpointData $endpointData, array $rulesToApply, callable $handler): void
+    protected function iterateThroughStrategies(
+        string $stage, ExtractedEndpointData $endpointData, array $rulesToApply, callable $handler
+    ): void
     {
         $strategies = $this->config->get("strategies.$stage", []);
 
@@ -418,133 +420,6 @@ class Extractor
         return new File($fileName, fopen($filePath, 'r'));
     }
 
-    /**
-     * Transform body parameters such that object fields have a `fields` property containing a list of all subfields
-     * Subfields will be removed from the main parameter map
-     * For instance, if $parameters is [
-     *   'dad' => new Parameter(...),
-     *   'dad.age' => new Parameter(...),
-     *   'dad.cars[]' => new Parameter(...),
-     *   'dad.cars[].model' => new Parameter(...),
-     *   'dad.cars[].price' => new Parameter(...),
-     * ],
-     * normalise this into [
-     *   'dad' => [
-     *     ...,
-     *     '__fields' => [
-     *       'dad.age' => [...],
-     *       'dad.cars' => [
-     *         ...,
-     *         '__fields' => [
-     *           'model' => [...],
-     *           'price' => [...],
-     *         ],
-     *       ],
-     *   ],
-     * ]]
-     *
-     * @param array $parameters
-     *
-     * @return array
-     */
-    public static function nestArrayAndObjectFields(array $parameters, array $cleanParameters = []): array
-    {
-        // First, we'll make sure all object fields have parent fields properly set
-        $normalisedParameters = [];
-        foreach ($parameters as $name => $parameter) {
-            if (Str::contains($name, '.')) {
-                // If the user didn't add a parent field, we'll helpfully add it for them
-                $ancestors = [];
-
-                $parts = explode('.', $name);
-                $fieldName = array_pop($parts);
-                $parentName = rtrim(join('.', $parts), '[]');
-
-                // When the body is an array, param names will be "[].paramname",
-                // so $parentName is empty. Let's fix that.
-                if (empty($parentName)) {
-                    $parentName = '[]';
-                }
-
-                while ($parentName) {
-                    if (!empty($normalisedParameters[$parentName])) {
-                        break;
-                    }
-
-                    $details = [
-                        "name" => $parentName,
-                        "type" => $parentName === '[]' ? "object[]" : "object",
-                        "description" => "",
-                        "required" => false,
-                    ];
-
-                    if ($parameter instanceof ResponseField) {
-                        $ancestors[] = [$parentName, new ResponseField($details)];
-                    } else {
-                        $lastParentExample = $details["example"] =
-                            [$fieldName => $lastParentExample ?? $parameter->example];
-                        $ancestors[] = [$parentName, new Parameter($details)];
-                    }
-
-                    $fieldName = array_pop($parts);
-                    $parentName = rtrim(join('.', $parts), '[]');
-                }
-
-                // We add ancestors in reverse so we can iterate over parents first in the next section
-                foreach (array_reverse($ancestors) as [$ancestorName, $ancestor]) {
-                    $normalisedParameters[$ancestorName] = $ancestor;
-                }
-            }
-
-            $normalisedParameters[$name] = $parameter;
-            unset($lastParentExample);
-        }
-
-        $finalParameters = [];
-        foreach ($normalisedParameters as $name => $parameter) {
-            $parameter = $parameter->toArray();
-            if (Str::contains($name, '.')) { // An object field
-                // Get the various pieces of the name
-                $parts = explode('.', $name);
-                $fieldName = array_pop($parts);
-                $baseName = join('.__fields.', $parts);
-
-                // For subfields, the type is indicated in the source object
-                // eg test.items[].more and test.items.more would both have parent field with name `items` and containing __fields => more
-                // The difference would be in the parent field's `type` property (object[] vs object)
-                // So we can get rid of all [] to get the parent name
-                $dotPathToParent = str_replace('[]', '', $baseName);
-                // When the body is an array, param names will be  "[].paramname",
-                // so $parts is ['[]']
-                if ($parts[0] == '[]') {
-                    $dotPathToParent = '[]' . $dotPathToParent;
-                }
-
-                $dotPath = $dotPathToParent . '.__fields.' . $fieldName;
-                Arr::set($finalParameters, $dotPath, $parameter);
-            } else { // A regular field, not a subfield of anything
-                // Note: we're assuming any subfields of this field are listed *after* it,
-                // and will set __fields correctly when we iterate over them
-                // Hence why we create a new "normalisedParameters" array above and push the parent to that first
-                $parameter['__fields'] = [];
-                $finalParameters[$name] = $parameter;
-            }
-
-        }
-
-        // Finally, if the body is an array, remove any other items.
-        if (isset($finalParameters['[]'])) {
-            $finalParameters = ["[]" => $finalParameters['[]']];
-            // At this point, the examples are likely [[], []],
-            // but have been correctly set in clean parameters, so let's update them
-            if ($finalParameters["[]"]["example"][0] == [] && !empty($cleanParameters)) {
-                $finalParameters["[]"]["example"] = $cleanParameters;
-            }
-        }
-
-        return $finalParameters;
-    }
-
     protected function mergeInheritedMethodsData(string $stage, ExtractedEndpointData $endpointData, array $inheritedDocsOverrides = []): void
     {
         $overrides = $inheritedDocsOverrides[$stage] ?? [];

+ 10 - 0
tests/BaseLaravelTest.php

@@ -2,12 +2,14 @@
 
 namespace Knuckles\Scribe\Tests;
 
+use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
 use Knuckles\Scribe\ScribeServiceProvider;
 use Orchestra\Testbench\TestCase;
 
 class BaseLaravelTest extends TestCase
 {
     use TestHelpers;
+    use ArraySubsetAsserts;
 
     protected function getEnvironmentSetUp($app)
     {
@@ -41,4 +43,12 @@ class BaseLaravelTest extends TestCase
         }
         return $providers;
     }
+
+    protected function setConfig($configValues): void
+    {
+        foreach ($configValues as $key => $value) {
+            config(["scribe.$key" => $value]);
+            config(["scribe_new.$key" => $value]);
+        }
+    }
 }

+ 11 - 0
tests/BaseUnitTest.php

@@ -0,0 +1,11 @@
+<?php
+
+namespace Knuckles\Scribe\Tests;
+
+use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
+use PHPUnit\Framework\TestCase;
+
+class BaseUnitTest extends TestCase
+{
+    use ArraySubsetAsserts;
+}

+ 2 - 2
tests/Unit/AnnotationParserTest.php

@@ -2,10 +2,10 @@
 
 namespace Knuckles\Scribe\Tests\Unit;
 
+use Knuckles\Scribe\Tests\BaseUnitTest;
 use Knuckles\Scribe\Tools\AnnotationParser;
-use PHPUnit\Framework\TestCase;
 
-class AnnotationParserTest extends TestCase
+class AnnotationParserTest extends BaseUnitTest
 {
     /**
      * @test

+ 2 - 2
tests/Unit/ConfigDifferTest.php

@@ -2,10 +2,10 @@
 
 namespace Knuckles\Scribe\Tests\Unit;
 
+use Knuckles\Scribe\Tests\BaseUnitTest;
 use Knuckles\Scribe\Tools\ConfigDiffer;
-use PHPUnit\Framework\TestCase;
 
-class ConfigDifferTest extends TestCase
+class ConfigDifferTest extends BaseUnitTest
 {
     /** @test */
     public function returns_empty_when_there_are_no_changes()

+ 3 - 18
tests/Unit/ExtractorPluginSystemTest.php → tests/Unit/ExtractorStrategiesInvocationTest.php

@@ -2,33 +2,18 @@
 
 namespace Knuckles\Scribe\Tests\Unit;
 
-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;
+use Knuckles\Scribe\Tests\BaseUnitTest;
 use Knuckles\Scribe\Tests\Fixtures\TestController;
 use Knuckles\Scribe\Tools\DocumentationConfig;
-use PHPUnit\Framework\TestCase;
 
-class ExtractorPluginSystemTest extends TestCase
+class ExtractorStrategiesInvocationTest extends BaseUnitTest
 {
-    use ArraySubsetAsserts;
-
-    /** @var \Knuckles\Scribe\Extracting\Extractor|null */
-    protected $generator;
-
-    protected function getPackageProviders($app)
-    {
-        $providers = [
-            ScribeServiceProvider::class,
-        ];
-        if (class_exists(\Dingo\Api\Provider\LaravelServiceProvider::class)) {
-            $providers[] = \Dingo\Api\Provider\LaravelServiceProvider::class;
-        }
-        return $providers;
-    }
+    protected ?Extractor $generator;
 
     protected function tearDown(): void
     {

+ 2 - 103
tests/Unit/ExtractorTest.php

@@ -2,20 +2,16 @@
 
 namespace Knuckles\Scribe\Tests\Unit;
 
-use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
 use Illuminate\Routing\Route;
 use Knuckles\Camel\Extraction\ExtractedEndpointData;
 use Knuckles\Camel\Extraction\Parameter;
-use Knuckles\Camel\Extraction\ResponseField;
 use Knuckles\Scribe\Extracting\Extractor;
+use Knuckles\Scribe\Tests\BaseUnitTest;
 use Knuckles\Scribe\Tests\Fixtures\TestController;
 use Knuckles\Scribe\Tools\DocumentationConfig;
-use PHPUnit\Framework\TestCase;
 
-class ExtractorTest extends TestCase
+class ExtractorTest extends BaseUnitTest
 {
-    use ArraySubsetAsserts;
-
     protected Extractor $extractor;
 
     protected $config = [
@@ -293,103 +289,6 @@ class ExtractorTest extends TestCase
         $this->assertArraySubset(["type" => "string"], $inherited->queryParameters["queryThing"]->toArray());
     }
 
-    /** @test */
-    public function can_nest_array_and_object_parameters_correctly()
-    {
-        $parameters = [
-            "dad" => Parameter::create([
-                "name" => 'dad',
-            ]),
-            "dad.age" => ResponseField::create([
-                "name" => 'dad.age',
-            ]),
-            "dad.cars[]" => Parameter::create([
-                "name" => 'dad.cars[]',
-            ]),
-            "dad.cars[].model" => Parameter::create([
-                "name" => 'dad.cars[].model',
-            ]),
-            "dad.cars[].price" => ResponseField::create([
-                "name" => 'dad.cars[].price',
-            ]),
-        ];
-        $cleanParameters = [];
-
-        $nested = Extractor::nestArrayAndObjectFields($parameters, $cleanParameters);
-
-        $this->assertEquals(["dad"], array_keys($nested));
-        $this->assertArraySubset([
-            "dad" => [
-                "name" => "dad",
-                "__fields" => [
-                    "age" => [
-                        "name" => "dad.age",
-                    ],
-                    "cars" => [
-                        "name" => "dad.cars",
-                        "__fields" => [
-                            "model" => [
-                                "name" => "dad.cars[].model",
-                            ],
-                            "price" => [
-                                "name" => "dad.cars[].price",
-                            ],
-                        ],
-                    ],
-                ],
-            ],
-        ], $nested);
-    }
-
-    /** @test */
-    public function sets_missing_ancestors_for_object_fields_properly()
-    {
-        $parameters = [
-            "dad.cars[]" => Parameter::create([
-                "name" => 'dad.cars[]',
-            ]),
-            "dad.cars[].model" => Parameter::create([
-                "name" => 'dad.cars[].model',
-            ]),
-            "parent.not.specified" => Parameter::create([
-                "name" => "parent.not.specified",
-            ]),
-        ];
-        $cleanParameters = [];
-
-        $nested = Extractor::nestArrayAndObjectFields($parameters, $cleanParameters);
-
-        $this->assertEquals(["dad", "parent"], array_keys($nested));
-        $this->assertArraySubset([
-            "dad" => [
-                "name" => "dad",
-                "__fields" => [
-                    "cars" => [
-                        "name" => "dad.cars",
-                        "__fields" => [
-                            "model" => [
-                                "name" => "dad.cars[].model",
-                            ],
-                        ],
-                    ],
-                ],
-            ],
-            "parent" => [
-                "name" => "parent",
-                "__fields" => [
-                    "not" => [
-                        "name" => "parent.not",
-                        "__fields" => [
-                            "specified" => [
-                                "name" => "parent.not.specified",
-                            ],
-                        ],
-                    ],
-                ],
-            ],
-        ], $nested);
-    }
-
     public function createRoute(string $httpMethod, string $path, string $controllerMethod, $class = TestController::class)
     {
         return new Route([$httpMethod], $path, ['uses' => [$class, $controllerMethod]]);

+ 2 - 5
tests/Unit/OpenAPISpecWriterTest.php

@@ -2,22 +2,19 @@
 
 namespace Knuckles\Scribe\Tests\Unit;
 
-use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
 use Faker\Factory;
 use Illuminate\Support\Arr;
 use Knuckles\Camel\Camel;
 use Knuckles\Camel\Output\OutputEndpointData;
+use Knuckles\Scribe\Tests\BaseUnitTest;
 use Knuckles\Scribe\Tools\DocumentationConfig;
 use Knuckles\Scribe\Writing\OpenAPISpecWriter;
-use PHPUnit\Framework\TestCase;
 
 /**
  * See https://swagger.io/specification/
  */
-class OpenAPISpecWriterTest extends TestCase
+class OpenAPISpecWriterTest extends BaseUnitTest
 {
-    use ArraySubsetAsserts;
-
     protected $config = [
         'title' => 'My Testy Testes API',
         'description' => 'All about testy testes.',

+ 108 - 0
tests/Unit/OutputEndpointDataTest.php

@@ -0,0 +1,108 @@
+<?php
+
+namespace Knuckles\Scribe\Tests\Unit;
+
+use Knuckles\Camel\Extraction\Parameter;
+use Knuckles\Camel\Extraction\ResponseField;
+use Knuckles\Camel\Output\OutputEndpointData;
+use Knuckles\Scribe\Tests\BaseUnitTest;
+
+class OutputEndpointDataTest extends BaseUnitTest
+{
+    /** @test */
+    public function can_nest_array_and_object_parameters_correctly()
+    {
+        $parameters = [
+            "dad" => Parameter::create([
+                "name" => 'dad',
+            ]),
+            "dad.age" => ResponseField::create([
+                "name" => 'dad.age',
+            ]),
+            "dad.cars[]" => Parameter::create([
+                "name" => 'dad.cars[]',
+            ]),
+            "dad.cars[].model" => Parameter::create([
+                "name" => 'dad.cars[].model',
+            ]),
+            "dad.cars[].price" => ResponseField::create([
+                "name" => 'dad.cars[].price',
+            ]),
+        ];
+        $cleanParameters = [];
+
+        $nested = OutputEndpointData::nestArrayAndObjectFields($parameters, $cleanParameters);
+
+        $this->assertEquals(["dad"], array_keys($nested));
+        $this->assertArraySubset([
+            "dad" => [
+                "name" => "dad",
+                "__fields" => [
+                    "age" => [
+                        "name" => "dad.age",
+                    ],
+                    "cars" => [
+                        "name" => "dad.cars",
+                        "__fields" => [
+                            "model" => [
+                                "name" => "dad.cars[].model",
+                            ],
+                            "price" => [
+                                "name" => "dad.cars[].price",
+                            ],
+                        ],
+                    ],
+                ],
+            ],
+        ], $nested);
+    }
+
+    /** @test */
+    public function sets_missing_ancestors_for_object_fields_properly()
+    {
+        $parameters = [
+            "dad.cars[]" => Parameter::create([
+                "name" => 'dad.cars[]',
+            ]),
+            "dad.cars[].model" => Parameter::create([
+                "name" => 'dad.cars[].model',
+            ]),
+            "parent.not.specified" => Parameter::create([
+                "name" => "parent.not.specified",
+            ]),
+        ];
+        $cleanParameters = [];
+
+        $nested = OutputEndpointData::nestArrayAndObjectFields($parameters, $cleanParameters);
+
+        $this->assertEquals(["dad", "parent"], array_keys($nested));
+        $this->assertArraySubset([
+            "dad" => [
+                "name" => "dad",
+                "__fields" => [
+                    "cars" => [
+                        "name" => "dad.cars",
+                        "__fields" => [
+                            "model" => [
+                                "name" => "dad.cars[].model",
+                            ],
+                        ],
+                    ],
+                ],
+            ],
+            "parent" => [
+                "name" => "parent",
+                "__fields" => [
+                    "not" => [
+                        "name" => "parent.not",
+                        "__fields" => [
+                            "specified" => [
+                                "name" => "parent.not.specified",
+                            ],
+                        ],
+                    ],
+                ],
+            ],
+        ], $nested);
+    }
+}

+ 2 - 2
tests/Unit/PathConfigurationTest.php

@@ -2,10 +2,10 @@
 
 namespace Knuckles\Scribe\Tests\Unit;
 
+use Knuckles\Scribe\Tests\BaseUnitTest;
 use Knuckles\Scribe\Tools\PathConfig;
-use PHPUnit\Framework\TestCase;
 
-class PathConfigurationTest extends TestCase
+class PathConfigurationTest extends BaseUnitTest
 {
     /** @test */
     public function resolves_default_cache_path()

+ 2 - 5
tests/Unit/PostmanCollectionWriterTest.php

@@ -2,18 +2,15 @@
 
 namespace Knuckles\Scribe\Tests\Unit;
 
-use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
 use Knuckles\Camel\Output\OutputEndpointData;
 use Knuckles\Camel\Output\Parameter;
 use Knuckles\Scribe\Extracting\Extractor;
+use Knuckles\Scribe\Tests\BaseUnitTest;
 use Knuckles\Scribe\Tools\DocumentationConfig;
 use Knuckles\Scribe\Writing\PostmanCollectionWriter;
-use PHPUnit\Framework\TestCase;
 
-class PostmanCollectionWriterTest extends TestCase
+class PostmanCollectionWriterTest extends BaseUnitTest
 {
-    use ArraySubsetAsserts;
-
     /** @test */
     public function correct_structure_is_followed()
     {

+ 3 - 2
tests/Unit/RoutePatternMatcherTest.php

@@ -3,10 +3,10 @@
 namespace Knuckles\Scribe\Tests\Unit;
 
 use Illuminate\Routing\Route;
+use Knuckles\Scribe\Tests\BaseUnitTest;
 use Knuckles\Scribe\Tools\RoutePatternMatcher;
-use PHPUnit\Framework\TestCase;
 
-class RoutePatternMatcherTest extends TestCase
+class RoutePatternMatcherTest extends BaseUnitTest
 {
     /** @test */
     public function matches_by_route_name()
@@ -42,6 +42,7 @@ class RoutePatternMatcherTest extends TestCase
         $this->assertTrue(RoutePatternMatcher::matches($route, ["*"]));
 
         $this->assertFalse(RoutePatternMatcher::matches($route, ["/d*"]));
+        $this->assertFalse(RoutePatternMatcher::matches($route, ["d*"]));
     }
 
 }