Upgraded drupal core with security updates
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / RouteProcessor / RouteProcessorCurrentIntegrationTest.php
1 <?php
2
3 namespace Drupal\KernelTests\Core\RouteProcessor;
4
5 use Drupal\Core\Cache\Cache;
6 use Drupal\Core\GeneratedUrl;
7 use Drupal\Core\Render\BubbleableMetadata;
8 use Drupal\KernelTests\KernelTestBase;
9 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
10 use Symfony\Component\HttpFoundation\Request;
11 use Symfony\Component\Routing\Route;
12
13 /**
14  * Tests the <current> route processor.
15  *
16  * @see \Drupal\Core\RouteProcessor\RouteProcessorCurrent
17  * @group route_processor
18  */
19 class RouteProcessorCurrentIntegrationTest extends KernelTestBase {
20
21   /**
22    * {@inheritdoc}
23    */
24   public static $modules = ['system'];
25
26   /**
27    * The URL generator.
28    *
29    * @var \Drupal\Core\Routing\UrlGeneratorInterface
30    */
31   protected $urlGenerator;
32
33   /**
34    * {@inheritdoc}
35    */
36   protected function setUp() {
37     parent::setUp();
38
39     $this->urlGenerator = \Drupal::urlGenerator();
40   }
41
42   /**
43    * Tests the output process.
44    */
45   public function testProcessOutbound() {
46     $expected_cacheability = (new BubbleableMetadata())
47       ->addCacheContexts(['route'])
48       ->setCacheMaxAge(Cache::PERMANENT);
49
50     $request_stack = \Drupal::requestStack();
51     /** @var \Symfony\Component\Routing\RequestContext $request_context */
52     $request_context = \Drupal::service('router.request_context');
53
54     // Test request with subdir on homepage.
55     $server = [
56       'SCRIPT_NAME' => '/subdir/index.php',
57       'SCRIPT_FILENAME' => \Drupal::root() . '/index.php',
58       'SERVER_NAME' => 'http://www.example.com',
59     ];
60     $request = Request::create('/subdir/', 'GET', [], [], [], $server);
61     $request->attributes->set(RouteObjectInterface::ROUTE_NAME, '<front>');
62     $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/'));
63
64     $request_stack->push($request);
65     $request_context->fromRequest($request);
66     $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('/subdir/');
67     $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<current>', [], [], TRUE));
68
69     // Test request with subdir on other page.
70     $server = [
71       'SCRIPT_NAME' => '/subdir/index.php',
72       'SCRIPT_FILENAME' => \Drupal::root() . '/index.php',
73       'SERVER_NAME' => 'http://www.example.com',
74     ];
75     $request = Request::create('/subdir/node/add', 'GET', [], [], [], $server);
76     $request->attributes->set(RouteObjectInterface::ROUTE_NAME, 'node.add');
77     $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/node/add'));
78
79     $request_stack->push($request);
80     $request_context->fromRequest($request);
81     $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('/subdir/node/add');
82     $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<current>', [], [], TRUE));
83
84     // Test request without subdir on the homepage.
85     $server = [
86       'SCRIPT_NAME' => '/index.php',
87       'SCRIPT_FILENAME' => \Drupal::root() . '/index.php',
88       'SERVER_NAME' => 'http://www.example.com',
89     ];
90     $request = Request::create('/', 'GET', [], [], [], $server);
91     $request->attributes->set(RouteObjectInterface::ROUTE_NAME, '<front>');
92     $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/'));
93
94     $request_stack->push($request);
95     $request_context->fromRequest($request);
96     $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('/');
97     $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<current>', [], [], TRUE));
98
99     // Test request without subdir on other page.
100     $server = [
101       'SCRIPT_NAME' => '/index.php',
102       'SCRIPT_FILENAME' => \Drupal::root() . '/index.php',
103       'SERVER_NAME' => 'http://www.example.com',
104     ];
105     $request = Request::create('/node/add', 'GET', [], [], [], $server);
106     $request->attributes->set(RouteObjectInterface::ROUTE_NAME, 'node.add');
107     $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/node/add'));
108
109     $request_stack->push($request);
110     $request_context->fromRequest($request);
111     $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('/node/add');
112     $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<current>', [], [], TRUE));
113
114     // Test request without a found route. This happens for example on an
115     // not found exception page.
116     $server = [
117       'SCRIPT_NAME' => '/index.php',
118       'SCRIPT_FILENAME' => \Drupal::root() . '/index.php',
119       'SERVER_NAME' => 'http://www.example.com',
120     ];
121     $request = Request::create('/invalid-path', 'GET', [], [], [], $server);
122
123     $request_stack->push($request);
124     $request_context->fromRequest($request);
125     // In case we have no routing, the current route should point to the front,
126     // and the cacheability does not depend on the 'route' cache context, since
127     // no route was involved at all: this is fallback behavior.
128     $url = GeneratedUrl::createFromObject((new BubbleableMetadata())->setCacheMaxAge(Cache::PERMANENT))->setGeneratedUrl('/');
129     $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<current>', [], [], TRUE));
130   }
131
132 }