3 namespace Drupal\KernelTests\Core\Entity;
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;
14 * Tests route providers for entity types.
18 class RouteProviderTest extends KernelTestBase {
23 public static $modules = ['entity_test', 'user', 'system'];
28 protected function setUp() {
31 $this->installEntitySchema('user');
32 $this->installEntitySchema('entity_test_mul');
33 $this->installEntitySchema('entity_test_admin_routes');
35 /** @var \Drupal\user\RoleInterface $role */
36 $role = Role::create([
37 'id' => RoleInterface::ANONYMOUS_ID
40 ->grantPermission('administer entity_test content')
41 ->grantPermission('view test entity');
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();
53 * @covers \Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider::getRoutes
55 public function testHtmlRoutes() {
56 /** @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
57 $route_provider = \Drupal::service('router.route_provider');
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'));
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'));
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'));
77 $entity = EntityTestMul::create([
78 'name' => 'Test title',
82 $this->setRawContent($this->httpKernelHandle($entity->url()));
83 $this->assertTitle('Test title | ');
85 $this->setRawContent($this->httpKernelHandle($entity->url('edit-form')));
86 $this->assertTitle('Edit Test title | ');
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? | ');
93 * @covers \Drupal\Core\Entity\Routing\AdminHtmlRouteProvider::getEditFormRoute
94 * @covers \Drupal\Core\Entity\Routing\AdminHtmlRouteProvider::getDeleteFormRoute
96 public function testAdminHtmlRoutes() {
97 /** @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
98 $route_provider = \Drupal::service('router.route_provider');
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'));
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'));
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'));
120 $entity = EntityTestAdminRoutes::create([
121 'name' => 'Test title',
125 $this->setRawContent($this->httpKernelHandle($entity->url()));
126 $this->assertTitle('Test title | ');
128 $this->setRawContent($this->httpKernelHandle($entity->url('edit-form')));
129 $this->assertTitle('Edit Test title | ');
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? | ');