3 namespace Drupal\Tests\Core\Entity\Enhancer;
5 use Drupal\Core\Entity\Enhancer\EntityRouteEnhancer;
6 use Drupal\Tests\UnitTestCase;
7 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
8 use Symfony\Component\HttpFoundation\Request;
9 use Symfony\Component\Routing\Route;
12 * @coversDefaultClass \Drupal\Core\Entity\Enhancer\EntityRouteEnhancer
15 class EntityRouteEnhancerTest extends UnitTestCase {
18 * Tests the enhancer method.
20 * @see \Drupal\Core\Entity\Enhancer\EntityRouteEnhancer::enhancer()
22 public function testEnhancer() {
23 $route_enhancer = new EntityRouteEnhancer();
25 // Set a controller to ensure it is not overridden.
26 $request = new Request();
28 $defaults['_controller'] = 'Drupal\Tests\Core\Controller\TestController::content';
29 $defaults['_entity_form'] = 'entity_test.default';
30 $defaults['_route_object'] = (new Route('/test', $defaults));
31 $new_defaults = $route_enhancer->enhance($defaults, $request);
32 $this->assertTrue(is_callable($new_defaults['_controller']));
33 $this->assertEquals($defaults['_controller'], $new_defaults['_controller'], '_controller did not get overridden.');
35 // Set _entity_form and ensure that the form is set.
37 $defaults['_entity_form'] = 'entity_test.default';
38 $defaults['_route_object'] = (new Route('/test', $defaults));
39 $new_defaults = $route_enhancer->enhance($defaults, $request);
40 $this->assertEquals('controller.entity_form:getContentResult', $new_defaults['_controller']);
42 // Set _entity_list and ensure that the entity list controller is set.
44 $defaults['_entity_list'] = 'entity_test.default';
45 $defaults['_route_object'] = (new Route('/test', $defaults));
46 $new_defaults = $route_enhancer->enhance($defaults, $request);
47 $this->assertEquals('\Drupal\Core\Entity\Controller\EntityListController::listing', $new_defaults['_controller'], 'The entity list controller was not set.');
48 $this->assertEquals('entity_test.default', $new_defaults['entity_type']);
49 $this->assertFalse(isset($new_defaults['_entity_list']));
51 // Set _entity_view and ensure that the entity view controller is set.
53 $defaults['_entity_view'] = 'entity_test.full';
54 $defaults['entity_test'] = 'Mock entity';
55 $defaults['_route_object'] = (new Route('/test', $defaults));
56 $defaults = $route_enhancer->enhance($defaults, $request);
57 $this->assertEquals('\Drupal\Core\Entity\Controller\EntityViewController::view', $defaults['_controller'], 'The entity view controller was not set.');
58 $this->assertEquals($defaults['_entity'], 'Mock entity');
59 $this->assertEquals($defaults['view_mode'], 'full');
60 $this->assertFalse(isset($defaults['_entity_view']));
62 // Set _entity_view and ensure that the entity view controller is set using
65 $defaults['_entity_view'] = 'entity_test.full';
66 $defaults['foo'] = 'Mock entity';
68 $options['parameters']['foo'] = ['type' => 'entity:entity_test'];
70 $route = new Route('/test');
71 $route->setOptions($options);
72 $route->setDefaults($defaults);
74 $defaults[RouteObjectInterface::ROUTE_OBJECT] = $route;
75 $defaults = $route_enhancer->enhance($defaults, $request);
76 $this->assertEquals('\Drupal\Core\Entity\Controller\EntityViewController::view', $defaults['_controller'], 'The entity view controller was not set.');
77 $this->assertEquals($defaults['_entity'], 'Mock entity');
78 $this->assertEquals($defaults['view_mode'], 'full');
79 $this->assertFalse(isset($defaults['_entity_view']));
81 // Set _entity_view without a view mode.
83 $defaults['_entity_view'] = 'entity_test';
84 $defaults['entity_test'] = 'Mock entity';
85 $defaults['_route_object'] = (new Route('/test', $defaults));
86 $defaults = $route_enhancer->enhance($defaults, $request);
87 $this->assertEquals('\Drupal\Core\Entity\Controller\EntityViewController::view', $defaults['_controller'], 'The entity view controller was not set.');
88 $this->assertEquals($defaults['_entity'], 'Mock entity');
89 $this->assertTrue(empty($defaults['view_mode']));
90 $this->assertFalse(isset($defaults['_entity_view']));