5ea28c9d86c0fc09e52f8268e66a953af93985c2
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Entity / Enhancer / EntityRouteEnhancerTest.php
1 <?php
2
3 namespace Drupal\Tests\Core\Entity\Enhancer;
4
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;
10
11 /**
12  * @coversDefaultClass \Drupal\Core\Entity\Enhancer\EntityRouteEnhancer
13  * @group Entity
14  */
15 class EntityRouteEnhancerTest extends UnitTestCase {
16
17   /**
18    * Tests the enhancer method.
19    *
20    * @see \Drupal\Core\Entity\Enhancer\EntityRouteEnhancer::enhancer()
21    */
22   public function testEnhancer() {
23     $route_enhancer = new EntityRouteEnhancer();
24
25     // Set a controller to ensure it is not overridden.
26     $request = new Request();
27     $defaults = [];
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.');
34
35     // Set _entity_form and ensure that the form is set.
36     $defaults = [];
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']);
41
42     // Set _entity_list and ensure that the entity list controller is set.
43     $defaults = [];
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']));
50
51     // Set _entity_view and ensure that the entity view controller is set.
52     $defaults = [];
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']));
61
62     // Set _entity_view and ensure that the entity view controller is set using
63     // a converter.
64     $defaults = [];
65     $defaults['_entity_view'] = 'entity_test.full';
66     $defaults['foo'] = 'Mock entity';
67     // Add a converter.
68     $options['parameters']['foo'] = ['type' => 'entity:entity_test'];
69     // Set the route.
70     $route = new Route('/test');
71     $route->setOptions($options);
72     $route->setDefaults($defaults);
73
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']));
80
81     // Set _entity_view without a view mode.
82     $defaults = [];
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']));
91   }
92
93 }