Security update for Core, with self-updated composer
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / File / UrlRewritingTest.php
1 <?php
2
3 namespace Drupal\KernelTests\Core\File;
4
5 use Symfony\Component\HttpFoundation\Request;
6
7 /**
8  * Tests for file URL rewriting.
9  *
10  * @group File
11  */
12 class UrlRewritingTest extends FileTestBase {
13
14   /**
15    * Modules to enable.
16    *
17    * @var array
18    */
19   public static $modules = ['file_test'];
20
21   /**
22    * Tests the rewriting of shipped file URLs by hook_file_url_alter().
23    */
24   public function testShippedFileURL() {
25     // Test generating a URL to a shipped file (i.e. a file that is part of
26     // Drupal core, a module or a theme, for example a JavaScript file).
27
28     // Test alteration of file URLs to use a CDN.
29     \Drupal::state()->set('file_test.hook_file_url_alter', 'cdn');
30     $filepath = 'core/assets/vendor/jquery/jquery.min.js';
31     $url = file_create_url($filepath);
32     $this->assertEqual(FILE_URL_TEST_CDN_1 . '/' . $filepath, $url, 'Correctly generated a CDN URL for a shipped file.');
33     $filepath = 'core/misc/favicon.ico';
34     $url = file_create_url($filepath);
35     $this->assertEqual(FILE_URL_TEST_CDN_2 . '/' . $filepath, $url, 'Correctly generated a CDN URL for a shipped file.');
36
37     // Test alteration of file URLs to use root-relative URLs.
38     \Drupal::state()->set('file_test.hook_file_url_alter', 'root-relative');
39     $filepath = 'core/assets/vendor/jquery/jquery.min.js';
40     $url = file_create_url($filepath);
41     $this->assertEqual(base_path() . '/' . $filepath, $url, 'Correctly generated a root-relative URL for a shipped file.');
42     $filepath = 'core/misc/favicon.ico';
43     $url = file_create_url($filepath);
44     $this->assertEqual(base_path() . '/' . $filepath, $url, 'Correctly generated a root-relative URL for a shipped file.');
45
46     // Test alteration of file URLs to use protocol-relative URLs.
47     \Drupal::state()->set('file_test.hook_file_url_alter', 'protocol-relative');
48     $filepath = 'core/assets/vendor/jquery/jquery.min.js';
49     $url = file_create_url($filepath);
50     $this->assertEqual('/' . base_path() . '/' . $filepath, $url, 'Correctly generated a protocol-relative URL for a shipped file.');
51     $filepath = 'core/misc/favicon.ico';
52     $url = file_create_url($filepath);
53     $this->assertEqual('/' . base_path() . '/' . $filepath, $url, 'Correctly generated a protocol-relative URL for a shipped file.');
54
55     // Test alteration of file URLs with query strings and/or fragment.
56     \Drupal::state()->delete('file_test.hook_file_url_alter');
57     $filepath = 'core/misc/favicon.ico';
58     $url = file_create_url($filepath . '?foo');
59     $this->assertEqual($GLOBALS['base_url'] . '/' . $filepath . '?foo=', $url, 'Correctly generated URL. The query string is present.');
60     $url = file_create_url($filepath . '?foo=bar');
61     $this->assertEqual($GLOBALS['base_url'] . '/' . $filepath . '?foo=bar', $url, 'Correctly generated URL. The query string is present.');
62     $url = file_create_url($filepath . '#v1.2');
63     $this->assertEqual($GLOBALS['base_url'] . '/' . $filepath . '#v1.2', $url, 'Correctly generated URL. The fragment is present.');
64     $url = file_create_url($filepath . '?foo=bar#v1.2');
65     $this->assertEqual($GLOBALS['base_url'] . '/' . $filepath . '?foo=bar#v1.2', $url, 'Correctly generated URL. The query string amd fragment is present.');
66   }
67
68   /**
69    * Tests the rewriting of public managed file URLs by hook_file_url_alter().
70    */
71   public function testPublicManagedFileURL() {
72     // Test generating a URL to a managed file.
73
74     // Test alteration of file URLs to use a CDN.
75     \Drupal::state()->set('file_test.hook_file_url_alter', 'cdn');
76     $uri = $this->createUri();
77     $url = file_create_url($uri);
78     $public_directory_path = \Drupal::service('stream_wrapper_manager')->getViaScheme('public')->getDirectoryPath();
79     $this->assertEqual(FILE_URL_TEST_CDN_2 . '/' . $public_directory_path . '/' . drupal_basename($uri), $url, 'Correctly generated a CDN URL for a created file.');
80
81     // Test alteration of file URLs to use root-relative URLs.
82     \Drupal::state()->set('file_test.hook_file_url_alter', 'root-relative');
83     $uri = $this->createUri();
84     $url = file_create_url($uri);
85     $this->assertEqual(base_path() . '/' . $public_directory_path . '/' . drupal_basename($uri), $url, 'Correctly generated a root-relative URL for a created file.');
86
87     // Test alteration of file URLs to use a protocol-relative URLs.
88     \Drupal::state()->set('file_test.hook_file_url_alter', 'protocol-relative');
89     $uri = $this->createUri();
90     $url = file_create_url($uri);
91     $this->assertEqual('/' . base_path() . '/' . $public_directory_path . '/' . drupal_basename($uri), $url, 'Correctly generated a protocol-relative URL for a created file.');
92   }
93
94   /**
95    * Test file_url_transform_relative().
96    */
97   public function testRelativeFileURL() {
98     // Disable file_test.module's hook_file_url_alter() implementation.
99     \Drupal::state()->set('file_test.hook_file_url_alter', NULL);
100
101     // Create a mock Request for file_url_transform_relative().
102     $request = Request::create($GLOBALS['base_url']);
103     $this->container->get('request_stack')->push($request);
104     \Drupal::setContainer($this->container);
105
106     // Shipped file.
107     $filepath = 'core/assets/vendor/jquery/jquery.min.js';
108     $url = file_create_url($filepath);
109     $this->assertSame(base_path() . $filepath, file_url_transform_relative($url));
110
111     // Managed file.
112     $uri = $this->createUri();
113     $url = file_create_url($uri);
114     $public_directory_path = \Drupal::service('stream_wrapper_manager')->getViaScheme('public')->getDirectoryPath();
115     $this->assertSame(base_path() . $public_directory_path . '/' . rawurlencode(drupal_basename($uri)), file_url_transform_relative($url));
116   }
117
118 }