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