df9f4b13376f7c25235bed2e1dfe75643b1f8fcc
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Entity / RouteProviderTest.php
1 <?php
2
3 namespace Drupal\KernelTests\Core\Entity;
4
5 use Drupal\entity_test\Entity\EntityTestAdminRoutes;
6 use Drupal\entity_test\Entity\EntityTestMul;
7 use Drupal\KernelTests\KernelTestBase;
8 use Drupal\user\Entity\Role;
9 use Drupal\user\RoleInterface;
10 use Symfony\Component\HttpFoundation\Request;
11 use Symfony\Component\HttpKernel\HttpKernelInterface;
12
13 /**
14  * Tests route providers for entity types.
15  *
16  * @group Entity
17  */
18 class RouteProviderTest extends KernelTestBase {
19
20   /**
21    * {@inheritdoc}
22    */
23   public static $modules = ['entity_test', 'user', 'system'];
24
25   /**
26    * {@inheritdoc}
27    */
28   protected function setUp() {
29     parent::setUp();
30
31     $this->installEntitySchema('user');
32     $this->installEntitySchema('entity_test_mul');
33     $this->installEntitySchema('entity_test_admin_routes');
34
35     /** @var \Drupal\user\RoleInterface $role */
36     $role = Role::create([
37       'id' => RoleInterface::ANONYMOUS_ID
38     ]);
39     $role
40       ->grantPermission('administer entity_test content')
41       ->grantPermission('view test entity');
42     $role->save();
43   }
44
45   protected function httpKernelHandle($url) {
46     $request = Request::create($url);
47     /** @var \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel */
48     $http_kernel = \Drupal::service('http_kernel');
49     return $http_kernel->handle($request, HttpKernelInterface::SUB_REQUEST)->getContent();
50   }
51
52   /**
53    * @covers \Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider::getRoutes
54    */
55   public function testHtmlRoutes() {
56     /** @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
57     $route_provider = \Drupal::service('router.route_provider');
58
59     $route = $route_provider->getRouteByName('entity.entity_test_mul.canonical');
60     $this->assertEquals('entity_test_mul.full', $route->getDefault('_entity_view'));
61     $this->assertEquals('\Drupal\Core\Entity\Controller\EntityController::title', $route->getDefault('_title_callback'));
62     $this->assertEquals('entity_test_mul.view', $route->getRequirement('_entity_access'));
63     $this->assertFalse($route->hasOption('_admin_route'));
64
65     $route = $route_provider->getRouteByName('entity.entity_test_mul.edit_form');
66     $this->assertEquals('entity_test_mul.default', $route->getDefault('_entity_form'));
67     $this->assertEquals('\Drupal\Core\Entity\Controller\EntityController::editTitle', $route->getDefault('_title_callback'));
68     $this->assertEquals('entity_test_mul.update', $route->getRequirement('_entity_access'));
69     $this->assertFalse($route->hasOption('_admin_route'));
70
71     $route = $route_provider->getRouteByName('entity.entity_test_mul.delete_form');
72     $this->assertEquals('entity_test_mul.delete', $route->getDefault('_entity_form'));
73     $this->assertEquals('\Drupal\Core\Entity\Controller\EntityController::deleteTitle', $route->getDefault('_title_callback'));
74     $this->assertEquals('entity_test_mul.delete', $route->getRequirement('_entity_access'));
75     $this->assertFalse($route->hasOption('_admin_route'));
76
77     $entity = EntityTestMul::create([
78       'name' => 'Test title',
79     ]);
80     $entity->save();
81
82     $this->setRawContent($this->httpKernelHandle($entity->url()));
83     $this->assertTitle('Test title | ');
84
85     $this->setRawContent($this->httpKernelHandle($entity->url('edit-form')));
86     $this->assertTitle('Edit Test title | ');
87
88     $this->setRawContent($this->httpKernelHandle($entity->url('delete-form')));
89     $this->assertTitle('Are you sure you want to delete the test entity - data table Test title? | ');
90   }
91
92   /**
93    * @covers \Drupal\Core\Entity\Routing\AdminHtmlRouteProvider::getEditFormRoute
94    * @covers \Drupal\Core\Entity\Routing\AdminHtmlRouteProvider::getDeleteFormRoute
95    */
96   public function testAdminHtmlRoutes() {
97     /** @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
98     $route_provider = \Drupal::service('router.route_provider');
99
100     $route = $route_provider->getRouteByName('entity.entity_test_admin_routes.canonical');
101     $this->assertEquals('entity_test_admin_routes.full', $route->getDefault('_entity_view'));
102     $this->assertEquals('\Drupal\Core\Entity\Controller\EntityController::title', $route->getDefault('_title_callback'));
103     $this->assertEquals('entity_test_admin_routes.view', $route->getRequirement('_entity_access'));
104     $this->assertFalse($route->hasOption('_admin_route'));
105
106     $route = $route_provider->getRouteByName('entity.entity_test_admin_routes.edit_form');
107     $this->assertEquals('entity_test_admin_routes.default', $route->getDefault('_entity_form'));
108     $this->assertEquals('\Drupal\Core\Entity\Controller\EntityController::editTitle', $route->getDefault('_title_callback'));
109     $this->assertEquals('entity_test_admin_routes.update', $route->getRequirement('_entity_access'));
110     $this->assertTrue($route->hasOption('_admin_route'));
111     $this->assertTrue($route->getOption('_admin_route'));
112
113     $route = $route_provider->getRouteByName('entity.entity_test_admin_routes.delete_form');
114     $this->assertEquals('entity_test_admin_routes.delete', $route->getDefault('_entity_form'));
115     $this->assertEquals('\Drupal\Core\Entity\Controller\EntityController::deleteTitle', $route->getDefault('_title_callback'));
116     $this->assertEquals('entity_test_admin_routes.delete', $route->getRequirement('_entity_access'));
117     $this->assertTrue($route->hasOption('_admin_route'));
118     $this->assertTrue($route->getOption('_admin_route'));
119
120     $entity = EntityTestAdminRoutes::create([
121       'name' => 'Test title',
122     ]);
123     $entity->save();
124
125     $this->setRawContent($this->httpKernelHandle($entity->url()));
126     $this->assertTitle('Test title | ');
127
128     $this->setRawContent($this->httpKernelHandle($entity->url('edit-form')));
129     $this->assertTitle('Edit Test title | ');
130
131     $this->setRawContent($this->httpKernelHandle($entity->url('delete-form')));
132     $this->assertTitle('Are you sure you want to delete the test entity - admin routes Test title? | ');
133   }
134
135 }