diff --git a/src/laravel/Commands/StartCommand.php b/src/laravel/Commands/StartCommand.php index 93d6469..72a8444 100644 --- a/src/laravel/Commands/StartCommand.php +++ b/src/laravel/Commands/StartCommand.php @@ -3,7 +3,6 @@ namespace Medilies\Xssless\Laravel\Commands; use Illuminate\Console\Command; -use Medilies\Xssless\Interfaces\ServiceInterface; use Medilies\Xssless\Laravel\Facades\Xssless; class StartCommand extends Command @@ -25,8 +24,6 @@ public function handle(): void return; } - $this->onTermination($service); - while ($service->isRunning()) { $output = $service->getIncrementalOutput(); $errorOutput = $service->getIncrementalErrorOutput(); @@ -38,25 +35,7 @@ public function handle(): void $this->error($errorOutput); } - pcntl_signal_dispatch(); - usleep(100_000); } } - - private function onTermination(ServiceInterface $service): void - { - if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' || ! extension_loaded('pcntl')) { - return; - } - - $terminate = function ($signal) use ($service) { - $this->warn("Terminating...\n"); - $service->stop(); - exit; - }; - - pcntl_signal(SIGTERM, $terminate); - pcntl_signal(SIGINT, $terminate); - } } diff --git a/tests/Mocks/NoInterfaceConfig.php b/tests/Mocks/NoInterfaceConfig.php new file mode 100644 index 0000000..e7dd6aa --- /dev/null +++ b/tests/Mocks/NoInterfaceConfig.php @@ -0,0 +1,14 @@ +toBe('foo'); }); + +it('throws when usingLaravelConfig() with no default driver', function () { + config([ + 'xssless.default' => null, + ]); + + expect(fn () => Xssless::usingLaravelConfig())->toThrow(XsslessException::class); +}); + +it('throws when usingLaravelConfig() with bad default driver', function () { + config([ + 'xssless.default' => 'x', + 'xssless.drivers.x' => new stdClass, + ]); + + expect(fn () => Xssless::usingLaravelConfig())->toThrow(XsslessException::class); +}); diff --git a/tests/laravel/SetupCommandTest.php b/tests/laravel/SetupCommandTest.php index 94ab8dd..b9706d7 100644 --- a/tests/laravel/SetupCommandTest.php +++ b/tests/laravel/SetupCommandTest.php @@ -1,9 +1,22 @@ artisan('xssless:setup') + ->expectsOutput('Setup done.') + ->assertExitCode(0); +}); + +test('NoSetupDriverConfig', function () { + config([ + 'xssless.default' => 'no-setup', + 'xssless.drivers.no-setup' => new NoSetupDriverConfig, + ]); + + $this->artisan('xssless:setup') + ->expectsOutput('The current driver has no setup.') ->assertExitCode(0); }); diff --git a/tests/laravel/configTest.php b/tests/laravel/configTest.php index c94a767..3e54554 100644 --- a/tests/laravel/configTest.php +++ b/tests/laravel/configTest.php @@ -3,3 +3,13 @@ test('config is loaded', function () { expect(config('xssless.default'))->toBe('dompurify-cli'); }); + +it('caches', function () { + $config = config('xssless'); + $serializedConfig = var_export($config, true); + + $evaluatedConfig = eval("return {$serializedConfig};"); + expect($evaluatedConfig)->toBeArray(); + + expect($evaluatedConfig)->toEqual($config); +})->depends('config is loaded'); diff --git a/tests/unit/XsslessTest.php b/tests/unit/XsslessTest.php index c2258d3..f6fe982 100644 --- a/tests/unit/XsslessTest.php +++ b/tests/unit/XsslessTest.php @@ -2,24 +2,17 @@ use Medilies\Xssless\Dompurify\DompurifyCliConfig; use Medilies\Xssless\Exceptions\XsslessException; -use Medilies\Xssless\Interfaces\CliInterface; -use Medilies\Xssless\Interfaces\ConfigInterface; use Medilies\Xssless\Xssless; +use Tests\Mocks\NoInterfaceConfig; +use Tests\Mocks\NoSetupDriverConfig; // ---------------------------------------------------------------------------- // makeCleaner() // ---------------------------------------------------------------------------- -it('throws when makeCleaner() with no interface', function () { - $cleaner = new Xssless; - - $cleaner->using(new class implements ConfigInterface - { - public function getClass(): string - { - return Xssless::class; - } - }); +it('throws when makeCleaner() with NoInterfaceConfig', function () { + $cleaner = (new Xssless) + ->using(new NoInterfaceConfig); expect(fn () => $cleaner->clean('foo'))->toThrow(XsslessException::class); }); @@ -42,28 +35,8 @@ public function getClass(): string }); it('returns false when setup() without HasSetupInterface', function () { - $cleaner = new Xssless; - - class NoSetupDriver implements CliInterface - { - public function configure(ConfigInterface $config): static - { - return $this; - } - - public function exec(string $html): string - { - return ''; - } - } - - $cleaner->using(new class implements ConfigInterface - { - public function getClass(): string - { - return NoSetupDriver::class; - } - }); + $cleaner = (new Xssless) + ->using(new NoSetupDriverConfig); expect($cleaner->setup())->toBeFalse(); });