Upstream spiral/testing state of the touched files before e812c3d094
This commit is contained in:
1 parent
4bb906a5d6
commit
fdcc6b7728
3 files changed
+3
-108
No files matched your search
+3
-27
@@ -421,7 +421,9 @@ class FakeHttp
|
||||
$bindings[ActorProviderInterface::class] = new FakeActorProvider($this->actor);
|
||||
$bindings[TokenStorageInterface::class] = new FakeTokenStorage();
|
||||
|
||||
$bindings[TransportRegistry::class] = $this->createFakeTransportRegistry();
|
||||
$transport = new TransportRegistry();
|
||||
$transport->setTransport('testing', new HeaderTransport(static::AUTH_TOKEN_HEADER_KEY));
|
||||
$bindings[TransportRegistry::class] = $transport;
|
||||
}
|
||||
|
||||
if ($this->session) {
|
||||
@@ -459,30 +461,4 @@ class FakeHttp
|
||||
throw new \InvalidArgumentException('$data should be an array or an object.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The fake token travels in the {@see self::AUTH_TOKEN_HEADER_KEY} header, so every transport the
|
||||
* application has configured is replaced by one that reads it. The configured names are kept because
|
||||
* {@see \Spiral\Auth\Middleware\AuthTransportMiddleware} resolves a transport by name.
|
||||
*/
|
||||
private function createFakeTransportRegistry(): TransportRegistry
|
||||
{
|
||||
$registry = new TransportRegistry();
|
||||
$transport = new HeaderTransport(static::AUTH_TOKEN_HEADER_KEY);
|
||||
|
||||
try {
|
||||
/** @var TransportRegistry $configured */
|
||||
$configured = $this->container->get(TransportRegistry::class);
|
||||
foreach (\array_keys($configured->getTransports()) as $name) {
|
||||
$registry->setTransport((string) $name, $transport);
|
||||
}
|
||||
} catch (\Throwable) {
|
||||
// Nothing to copy the names from; the fake transport is all there is.
|
||||
}
|
||||
|
||||
$registry->setTransport('testing', $transport);
|
||||
$registry->setDefaultTransport('testing');
|
||||
|
||||
return $registry;
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Spiral\Testing\Tests\Http;
|
||||
|
||||
use Spiral\Auth\Middleware\AuthMiddleware;
|
||||
use Spiral\Bootloader\Auth\HttpAuthBootloader;
|
||||
use Spiral\Testing\Tests\Http\Stub\ActorReportingMiddleware;
|
||||
use Spiral\Testing\Tests\Http\Stub\HeaderAuthMiddleware;
|
||||
use Spiral\Testing\Tests\TestCase;
|
||||
|
||||
final class FakeHttpAuthTransportTest extends TestCase
|
||||
{
|
||||
public function defineBootloaders(): array
|
||||
{
|
||||
return [...parent::defineBootloaders(), HttpAuthBootloader::class];
|
||||
}
|
||||
|
||||
public function testActorIsAuthenticatedThroughNamedTransport(): void
|
||||
{
|
||||
$actor = new \stdClass();
|
||||
|
||||
$response = $this->fakeHttp()
|
||||
->withActor($actor)
|
||||
->withMiddleware(ActorReportingMiddleware::class, HeaderAuthMiddleware::class)
|
||||
->get('/get/query-params');
|
||||
|
||||
$response->assertOk();
|
||||
$response->assertBodySame($actor::class);
|
||||
}
|
||||
|
||||
public function testActorIsAuthenticatedThroughEveryTransport(): void
|
||||
{
|
||||
$actor = new \stdClass();
|
||||
|
||||
$response = $this->fakeHttp()
|
||||
->withActor($actor)
|
||||
->withMiddleware(ActorReportingMiddleware::class, AuthMiddleware::class)
|
||||
->get('/get/query-params');
|
||||
|
||||
$response->assertOk();
|
||||
$response->assertBodySame($actor::class);
|
||||
}
|
||||
|
||||
public function testRequestWithoutActorStaysUnauthenticated(): void
|
||||
{
|
||||
$response = $this->fakeHttp()
|
||||
->withMiddleware(ActorReportingMiddleware::class, HeaderAuthMiddleware::class)
|
||||
->get('/get/query-params');
|
||||
|
||||
$response->assertOk();
|
||||
$response->assertBodySame(ActorReportingMiddleware::NO_ACTOR);
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Spiral\Testing\Tests\Http\Stub;
|
||||
|
||||
use Nyholm\Psr7\Response;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Psr\Http\Server\MiddlewareInterface;
|
||||
use Psr\Http\Server\RequestHandlerInterface;
|
||||
use Spiral\Auth\AuthContextInterface;
|
||||
use Spiral\Auth\Middleware\AuthMiddleware;
|
||||
|
||||
final class ActorReportingMiddleware implements MiddlewareInterface
|
||||
{
|
||||
public const NO_ACTOR = 'guest';
|
||||
|
||||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||
{
|
||||
$context = $request->getAttribute(AuthMiddleware::ATTRIBUTE);
|
||||
$actor = $context instanceof AuthContextInterface ? $context->getActor() : null;
|
||||
|
||||
return new Response(200, body: $actor === null ? self::NO_ACTOR : $actor::class);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user