Skip to content

Commit

Permalink
92% test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
medilies committed Aug 13, 2024
1 parent ce11445 commit d15dcc8
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 55 deletions.
21 changes: 0 additions & 21 deletions src/laravel/Commands/StartCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -25,8 +24,6 @@ public function handle(): void
return;
}

$this->onTermination($service);

while ($service->isRunning()) {
$output = $service->getIncrementalOutput();
$errorOutput = $service->getIncrementalErrorOutput();
Expand All @@ -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);
}
}
14 changes: 14 additions & 0 deletions tests/Mocks/NoInterfaceConfig.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php

namespace Tests\Mocks;

use Medilies\Xssless\Interfaces\ConfigInterface;
use stdClass;

class NoInterfaceConfig implements ConfigInterface
{
public function getClass(): string
{
return stdClass::class;
}
}
19 changes: 19 additions & 0 deletions tests/Mocks/NoSetupDriver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Tests\Mocks;

use Medilies\Xssless\Interfaces\CliInterface;
use Medilies\Xssless\Interfaces\ConfigInterface;

class NoSetupDriver implements CliInterface
{
public function configure(ConfigInterface $config): static
{
return $this;
}

public function exec(string $html): string
{
return '';
}
}
13 changes: 13 additions & 0 deletions tests/Mocks/NoSetupDriverConfig.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace Tests\Mocks;

use Medilies\Xssless\Interfaces\ConfigInterface;

class NoSetupDriverConfig implements ConfigInterface
{
public function getClass(): string
{
return NoSetupDriver::class;
}
}
18 changes: 18 additions & 0 deletions tests/laravel/FacadeTest.php
Original file line number Diff line number Diff line change
@@ -1,9 +1,27 @@
<?php

use Medilies\Xssless\Exceptions\XsslessException;
use Medilies\Xssless\Laravel\Facades\Xssless;

test('clean()', function () {
expect(Xssless::setup())->toBeTrue();

expect(Xssless::clean('foo'))->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);
});
13 changes: 13 additions & 0 deletions tests/laravel/SetupCommandTest.php
Original file line number Diff line number Diff line change
@@ -1,9 +1,22 @@
<?php

use Tests\Mocks\NoSetupDriverConfig;
use Tests\OrchestraTestCase;

test('xssless:setup', function () {
/** @var OrchestraTestCase $this */
$this->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);
});
10 changes: 10 additions & 0 deletions tests/laravel/configTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
41 changes: 7 additions & 34 deletions tests/unit/XsslessTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
Expand All @@ -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();
});

0 comments on commit d15dcc8

Please sign in to comment.