TrustedRedirectResponseTest.php in Drupal 9
File
core/tests/Drupal/Tests/Core/Routing/TrustedRedirectResponseTest.php
View source
<?php
namespace Drupal\Tests\Core\Routing;
use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Cache\CacheableRedirectResponse;
use Drupal\Core\Cache\CacheableResponseInterface;
use Drupal\Core\Routing\RequestContext;
use Drupal\Core\Routing\TrustedRedirectResponse;
use Drupal\Tests\UnitTestCase;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpFoundation\RedirectResponse;
class TrustedRedirectResponseTest extends UnitTestCase {
public function testSetTargetUrlWithInternalUrl() {
$redirect_response = new TrustedRedirectResponse('/example');
$redirect_response
->setTargetUrl('/example2');
$this
->assertEquals('/example2', $redirect_response
->getTargetUrl());
}
public function testSetTargetUrlWithUntrustedUrl() {
$request_context = new RequestContext();
$request_context
->setCompleteBaseUrl('https://www.drupal.org');
$container = new ContainerBuilder();
$container
->set('router.request_context', $request_context);
\Drupal::setContainer($container);
$redirect_response = new TrustedRedirectResponse('/example');
$this
->expectException(\InvalidArgumentException::class);
$redirect_response
->setTargetUrl('http://evil-url.com/example');
}
public function testSetTargetUrlWithTrustedUrl() {
$redirect_response = new TrustedRedirectResponse('/example');
$redirect_response
->setTrustedTargetUrl('http://good-external-url.com/example');
$this
->assertEquals('http://good-external-url.com/example', $redirect_response
->getTargetUrl());
}
public function testCreateFromRedirectResponse($redirect_response) {
$trusted_redirect_response = TrustedRedirectResponse::createFromRedirectResponse($redirect_response);
$this
->assertInstanceOf(CacheableResponseInterface::class, $trusted_redirect_response);
$expected_cacheability = $redirect_response instanceof CacheableResponseInterface ? $redirect_response
->getCacheableMetadata() : (new CacheableMetadata())
->setCacheMaxAge(0);
$this
->assertEquals($expected_cacheability, $trusted_redirect_response
->getCacheableMetadata());
}
public function providerCreateFromRedirectResponse() {
return [
'cacheable-with-tags' => [
(new CacheableRedirectResponse('/example'))
->addCacheableDependency((new CacheableMetadata())
->addCacheTags([
'foo',
])),
],
'cacheable-with-max-age-0' => [
(new CacheableRedirectResponse('/example'))
->addCacheableDependency((new CacheableMetadata())
->setCacheMaxAge(0)),
],
'uncacheable' => [
new RedirectResponse('/example'),
],
];
}
}