You've already forked Php-Template
All checks were successful
🧪✨ Tests Workflow / 🛡️ 🔒 Library Audit (push) Successful in 3m4s
🧪✨ Tests Workflow / 📝 ✨ Code Lint (push) Successful in 2m59s
🧪✨ Tests Workflow / 🛡️ 🔒 License Check (push) Successful in 3m29s
🧪✨ Tests Workflow / 🧪 ✨ Database Migrations (push) Successful in 4m2s
🧪✨ Tests Workflow / 🐙 🔍 Code Sniffer (push) Successful in 3m48s
🧪✨ Tests Workflow / 🧪 ✅ Unit Tests (push) Successful in 2m49s
Reviewed-on: #20 Co-authored-by: Ron Rise <ron@siteworxpro.com> Co-committed-by: Ron Rise <ron@siteworxpro.com>
112 lines
3.0 KiB
PHP
112 lines
3.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Siteworxpro\Tests\Http\Middleware;
|
|
|
|
use League\Route\Dispatcher;
|
|
use Nyholm\Psr7\Response;
|
|
use Nyholm\Psr7\ServerRequest;
|
|
use Siteworxpro\App\Attributes\Guards\Scope;
|
|
use Siteworxpro\App\Http\Middleware\ScopeMiddleware;
|
|
use Siteworxpro\HttpStatus\CodesEnum;
|
|
|
|
class ScopeMiddlewareTest extends Middleware
|
|
{
|
|
/**
|
|
* @throws \ReflectionException
|
|
* @throws \JsonException
|
|
*/
|
|
public function testHandlesNoScopes()
|
|
{
|
|
$class = new class {
|
|
public function getCallable(): array
|
|
{
|
|
return [ $this, 'index' ];
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
// Dummy method for testing
|
|
}
|
|
};
|
|
|
|
$handler = \Mockery::mock(Dispatcher::class);
|
|
$handler->shouldReceive('getMiddlewareStack')
|
|
->andReturn([$class]);
|
|
|
|
$handler
|
|
->shouldReceive('handle')
|
|
->once()
|
|
->andReturn(new Response(200));
|
|
|
|
$request = new ServerRequest('GET', '/');
|
|
$middleware = new ScopeMiddleware();
|
|
$response = $middleware->process($request, $handler);
|
|
$this->assertEquals(200, $response->getStatusCode());
|
|
}
|
|
|
|
/**
|
|
* @throws \ReflectionException
|
|
* @throws \JsonException
|
|
*/
|
|
public function testAllowsWithScope()
|
|
{
|
|
$class = new class {
|
|
public function getCallable(): array
|
|
{
|
|
return [ $this, 'index' ];
|
|
}
|
|
|
|
#[Scope(['admin'])]
|
|
public function index()
|
|
{
|
|
// Dummy method for testing
|
|
}
|
|
};
|
|
|
|
$handler = \Mockery::mock(Dispatcher::class);
|
|
$handler->shouldReceive('getMiddlewareStack')
|
|
->andReturn([$class]);
|
|
|
|
$handler
|
|
->shouldReceive('handle')
|
|
->once()
|
|
->andReturn(new Response(200));
|
|
|
|
$request = new ServerRequest('GET', '/')->withAttribute('scope', ['admin', 'user']);
|
|
$middleware = new ScopeMiddleware();
|
|
$response = $middleware->process($request, $handler);
|
|
$this->assertEquals(CodesEnum::OK->value, $response->getStatusCode());
|
|
}
|
|
|
|
/**
|
|
* @throws \ReflectionException
|
|
* @throws \JsonException
|
|
*/
|
|
public function testDisallowsWithScope()
|
|
{
|
|
$class = new class {
|
|
public function getCallable(): array
|
|
{
|
|
return [ $this, 'index' ];
|
|
}
|
|
|
|
#[Scope(['admin'])]
|
|
public function index()
|
|
{
|
|
// Dummy method for testing
|
|
}
|
|
};
|
|
|
|
$handler = \Mockery::mock(Dispatcher::class);
|
|
$handler->shouldReceive('getMiddlewareStack')
|
|
->andReturn([$class]);
|
|
|
|
$request = new ServerRequest('GET', '/');
|
|
$middleware = new ScopeMiddleware();
|
|
$response = $middleware->process($request, $handler);
|
|
$this->assertEquals(CodesEnum::FORBIDDEN->value, $response->getStatusCode());
|
|
}
|
|
}
|