]> BookStack Code Mirror - bookstack/commitdiff
Added test for logical-theme-system command registration 3072/head
authorDan Brown <redacted>
Mon, 22 Nov 2021 19:03:04 +0000 (19:03 +0000)
committerDan Brown <redacted>
Mon, 22 Nov 2021 19:03:04 +0000 (19:03 +0000)
Changed how the command registration was handled due to complications of
action order found during testing. Now the theme service will resolve
and directly register the command on the Kernel instead of them being
fetched from the ThemeService from within Kernel.
More direct, Seems to work.

app/Console/Kernel.php
app/Theming/ThemeService.php
tests/ThemeTest.php

index 02c8c00e61135c6c33c86831944350b6f2eeb36c..11c8018c8d6fca1cec1191c011938d20c2478fe1 100644 (file)
@@ -2,11 +2,8 @@
 
 namespace BookStack\Console;
 
-use BookStack\Facades\Theme;
-use BookStack\Theming\ThemeService;
 use Illuminate\Console\Scheduling\Schedule;
 use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
-use Symfony\Component\Console\Command\Command;
 
 class Kernel extends ConsoleKernel
 {
@@ -38,13 +35,6 @@ class Kernel extends ConsoleKernel
      */
     protected function commands()
     {
-        // Default framework command loading from 'Commands' directory
         $this->load(__DIR__ . '/Commands');
-
-        // Load any user commands that have been registered via the theme system.
-        $themeService = $this->app->make(ThemeService::class);
-        foreach ($themeService->getRegisteredCommands() as $command) {
-            $this->registerCommand($command);
-        }
     }
 }
index f095c7a8e7fb1716d4caa77495887acd2e51f898..f0f8f033c4d9c4542259906835cb1bf98d4651a3 100644 (file)
@@ -3,17 +3,13 @@
 namespace BookStack\Theming;
 
 use BookStack\Auth\Access\SocialAuthService;
+use Illuminate\Contracts\Console\Kernel;
 use Symfony\Component\Console\Command\Command;
 
 class ThemeService
 {
     protected $listeners = [];
 
-    /**
-     * @var Command[]
-     */
-    protected $commands = [];
-
     /**
      * Listen to a given custom theme event,
      * setting up the action to be ran when the event occurs.
@@ -54,15 +50,9 @@ class ThemeService
      */
     public function registerCommand(Command $command)
     {
-        $this->commands[] = $command;
-    }
-
-    /**
-     * Get the custom commands that have been registered.
-     */
-    public function getRegisteredCommands(): array
-    {
-        return $this->commands;
+        /** @var \Illuminate\Foundation\Console\Kernel $consoleKernel */
+        $consoleKernel = app()->make(Kernel::class);
+        $consoleKernel->registerCommand($command);
     }
 
     /**
index 9aa7873b07c93af103206bd7f8608cfdf3622c22..f04250bff57a2719e2cfa6d51df6b182f9ba8f15 100644 (file)
@@ -7,8 +7,10 @@ use BookStack\Entities\Models\Page;
 use BookStack\Entities\Tools\PageContent;
 use BookStack\Facades\Theme;
 use BookStack\Theming\ThemeEvents;
+use Illuminate\Console\Command;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
+use Illuminate\Support\Facades\Artisan;
 use Illuminate\Support\Facades\File;
 use League\CommonMark\ConfigurableEnvironmentInterface;
 
@@ -206,6 +208,16 @@ class ThemeTest extends TestCase
         $this->assertStringContainsString('donkey=donut', $redirect);
     }
 
+    public function test_register_command_allows_provided_command_to_be_usable_via_artisan()
+    {
+        Theme::registerCommand(new MyCustomCommand);
+
+        Artisan::call('bookstack:test-custom-command', []);
+        $output = Artisan::output();
+
+        $this->assertStringContainsString('Command ran!', $output);
+    }
+
     protected function usingThemeFolder(callable $callback)
     {
         // Create a folder and configure a theme
@@ -220,3 +232,10 @@ class ThemeTest extends TestCase
         File::deleteDirectory($themeFolderPath);
     }
 }
+
+class MyCustomCommand extends Command {
+    protected $signature = 'bookstack:test-custom-command';
+    public function handle() {
+        $this->line('Command ran!');
+    }
+}
\ No newline at end of file
Morty Proxy This is a proxified and sanitized view of the page, visit original site.