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[ActorProviderInterface::class] = new FakeActorProvider($this->actor);
|
||||||
$bindings[TokenStorageInterface::class] = new FakeTokenStorage();
|
$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) {
|
if ($this->session) {
|
||||||
@@ -459,30 +461,4 @@ class FakeHttp
|
|||||||
throw new \InvalidArgumentException('$data should be an array or an object.');
|
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