Upstream spiral/testing state of the touched files before e812c3d094

This commit is contained in:
upstream committed 2026-09-21 16:30:28 +02:00
1 parent 4bb906a5d6
commit fdcc6b7728
3 files changed
+3 -108

No files matched your search

+3 -27
View File
@@ -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);
}
}