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;
11 * @coversDefaultClass \Drupal\Core\Entity\Enhancer\EntityRouteEnhancer
14 class EntityRouteEnhancerTest extends UnitTestCase {
17 * Tests the enhancer method.
19 * @see \Drupal\Core\Entity\Enhancer\EntityRouteEnhancer::enhancer()
21 public function testEnhancer() {
22 $route_enhancer = new EntityRouteEnhancer();
24 // Set a controller to ensure it is not overridden.
25 $request = new Request();
27 $defaults['_controller'] = 'Drupal\Tests\Core\Controller\TestController::content';
28 $defaults['_entity_form'] = 'entity_test.default';
29 $new_defaults = $route_enhancer->enhance($defaults, $request);
30 $this->assertTrue(is_callable($new_defaults['_controller']));
31 $this->assertEquals($defaults['_controller'], $new_defaults['_controller'], '_controller did not get overridden.');
33 // Set _entity_form and ensure that the form is set.
35 $defaults['_entity_form'] = 'entity_test.default';
36 $new_defaults = $route_enhancer->enhance($defaults, $request);
37 $this->assertEquals('controller.entity_form:getContentResult', $new_defaults['_controller']);
39 // Set _entity_list and ensure that the entity list controller is set.
41 $defaults['_entity_list'] = 'entity_test.default';
42 $new_defaults = $route_enhancer->enhance($defaults, $request);
43 $this->assertEquals('\Drupal\Core\Entity\Controller\EntityListController::listing', $new_defaults['_controller'], 'The entity list controller was not set.');
44 $this->assertEquals('entity_test.default', $new_defaults['entity_type']);
45 $this->assertFalse(isset($new_defaults['_entity_list']));
47 // Set _entity_view and ensure that the entity view controller is set.
49 $defaults['_entity_view'] = 'entity_test.full';
50 $defaults['entity_test'] = 'Mock entity';
51 $defaults = $route_enhancer->enhance($defaults, $request);
52 $this->assertEquals('\Drupal\Core\Entity\Controller\EntityViewController::view', $defaults['_controller'], 'The entity view controller was not set.');
53 $this->assertEquals($defaults['_entity'], 'Mock entity');
54 $this->assertEquals($defaults['view_mode'], 'full');
55 $this->assertFalse(isset($defaults['_entity_view']));
57 // Set _entity_view and ensure that the entity view controller is set using
60 $defaults['_entity_view'] = 'entity_test.full';
61 $defaults['foo'] = 'Mock entity';
63 $options['parameters']['foo'] = ['type' => 'entity:entity_test'];
65 $route = $this->getMockBuilder('Symfony\Component\Routing\Route')
66 ->disableOriginalConstructor()
69 $route->expects($this->any())
70 ->method('getOptions')
71 ->will($this->returnValue($options));
73 $defaults[RouteObjectInterface::ROUTE_OBJECT] = $route;
74 $defaults = $route_enhancer->enhance($defaults, $request);
75 $this->assertEquals('\Drupal\Core\Entity\Controller\EntityViewController::view', $defaults['_controller'], 'The entity view controller was not set.');
76 $this->assertEquals($defaults['_entity'], 'Mock entity');
77 $this->assertEquals($defaults['view_mode'], 'full');
78 $this->assertFalse(isset($defaults['_entity_view']));
80 // Set _entity_view without a view mode.
82 $defaults['_entity_view'] = 'entity_test';
83 $defaults['entity_test'] = 'Mock entity';
84 $defaults = $route_enhancer->enhance($defaults, $request);
85 $this->assertEquals('\Drupal\Core\Entity\Controller\EntityViewController::view', $defaults['_controller'], 'The entity view controller was not set.');
86 $this->assertEquals($defaults['_entity'], 'Mock entity');
87 $this->assertTrue(empty($defaults['view_mode']));
88 $this->assertFalse(isset($defaults['_entity_view']));