Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\system\Tests\System;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Component\Utility\SafeMarkup;
|
Chris@0
|
6 use Drupal\simpletest\WebTestBase;
|
Chris@0
|
7 use Drupal\user\RoleInterface;
|
Chris@0
|
8
|
Chris@0
|
9 /**
|
Chris@0
|
10 * Tests page not found functionality, including custom 404 pages.
|
Chris@0
|
11 *
|
Chris@0
|
12 * @group system
|
Chris@0
|
13 */
|
Chris@0
|
14 class PageNotFoundTest extends WebTestBase {
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * Modules to enable.
|
Chris@0
|
18 *
|
Chris@0
|
19 * @var array
|
Chris@0
|
20 */
|
Chris@0
|
21 public static $modules = ['system_test'];
|
Chris@0
|
22
|
Chris@0
|
23 protected $adminUser;
|
Chris@0
|
24
|
Chris@0
|
25 protected function setUp() {
|
Chris@0
|
26 parent::setUp();
|
Chris@0
|
27
|
Chris@0
|
28 // Create an administrative user.
|
Chris@0
|
29 $this->adminUser = $this->drupalCreateUser(['administer site configuration', 'link to any page']);
|
Chris@0
|
30 $this->adminUser->roles[] = 'administrator';
|
Chris@0
|
31 $this->adminUser->save();
|
Chris@0
|
32
|
Chris@0
|
33 user_role_grant_permissions(RoleInterface::ANONYMOUS_ID, ['access user profiles']);
|
Chris@0
|
34 user_role_grant_permissions(RoleInterface::AUTHENTICATED_ID, ['access user profiles']);
|
Chris@0
|
35 }
|
Chris@0
|
36
|
Chris@0
|
37 public function testPageNotFound() {
|
Chris@0
|
38 $this->drupalLogin($this->adminUser);
|
Chris@0
|
39 $this->drupalGet($this->randomMachineName(10));
|
Chris@0
|
40 $this->assertText(t('Page not found'), 'Found the default 404 page');
|
Chris@0
|
41
|
Chris@0
|
42 // Set a custom 404 page without a starting slash.
|
Chris@0
|
43 $edit = [
|
Chris@0
|
44 'site_404' => 'user/' . $this->adminUser->id(),
|
Chris@0
|
45 ];
|
Chris@0
|
46 $this->drupalPostForm('admin/config/system/site-information', $edit, t('Save configuration'));
|
Chris@0
|
47 $this->assertRaw(SafeMarkup::format("The path '%path' has to start with a slash.", ['%path' => $edit['site_404']]));
|
Chris@0
|
48
|
Chris@0
|
49 // Use a custom 404 page.
|
Chris@0
|
50 $edit = [
|
Chris@0
|
51 'site_404' => '/user/' . $this->adminUser->id(),
|
Chris@0
|
52 ];
|
Chris@0
|
53 $this->drupalPostForm('admin/config/system/site-information', $edit, t('Save configuration'));
|
Chris@0
|
54
|
Chris@0
|
55 $this->drupalGet($this->randomMachineName(10));
|
Chris@0
|
56 $this->assertText($this->adminUser->getUsername(), 'Found the custom 404 page');
|
Chris@0
|
57 }
|
Chris@0
|
58
|
Chris@0
|
59 /**
|
Chris@0
|
60 * Tests that an inaccessible custom 404 page falls back to the default.
|
Chris@0
|
61 */
|
Chris@0
|
62 public function testPageNotFoundCustomPageWithAccessDenied() {
|
Chris@0
|
63 // Sets up a 404 page not accessible by the anonymous user.
|
Chris@0
|
64 $this->config('system.site')->set('page.404', '/system-test/custom-4xx')->save();
|
Chris@0
|
65
|
Chris@0
|
66 $this->drupalGet('/this-path-does-not-exist');
|
Chris@0
|
67 $this->assertNoText('Admin-only 4xx response');
|
Chris@0
|
68 $this->assertText('The requested page could not be found.');
|
Chris@0
|
69 $this->assertResponse(404);
|
Chris@0
|
70 // Verify the access cacheability metadata for custom 404 is bubbled.
|
Chris@0
|
71 $this->assertCacheContext('user.roles');
|
Chris@0
|
72
|
Chris@0
|
73 $this->drupalLogin($this->adminUser);
|
Chris@0
|
74 $this->drupalGet('/this-path-does-not-exist');
|
Chris@0
|
75 $this->assertText('Admin-only 4xx response');
|
Chris@0
|
76 $this->assertNoText('The requested page could not be found.');
|
Chris@0
|
77 $this->assertResponse(404);
|
Chris@0
|
78 // Verify the access cacheability metadata for custom 404 is bubbled.
|
Chris@0
|
79 $this->assertCacheContext('user.roles');
|
Chris@0
|
80 }
|
Chris@0
|
81
|
Chris@0
|
82 }
|