annotate core/modules/views/tests/src/Unit/ViewsTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\views\Unit;
Chris@0 4
Chris@0 5 use Drupal\Core\Entity\EntityTypeManagerInterface;
Chris@0 6 use Drupal\Tests\UnitTestCase;
Chris@0 7 use Drupal\views\Views;
Chris@0 8 use Drupal\views\Entity\View;
Chris@0 9 use Drupal\views\ViewExecutableFactory;
Chris@0 10 use Drupal\Core\DependencyInjection\ContainerBuilder;
Chris@0 11 use Symfony\Component\HttpFoundation\Request;
Chris@0 12 use Symfony\Component\HttpFoundation\RequestStack;
Chris@0 13
Chris@0 14 /**
Chris@0 15 * @coversDefaultClass \Drupal\views\Views
Chris@0 16 * @group views
Chris@0 17 */
Chris@0 18 class ViewsTest extends UnitTestCase {
Chris@0 19
Chris@0 20 /**
Chris@0 21 * The test container.
Chris@0 22 *
Chris@0 23 * @var \Drupal\Core\DependencyInjection\ContainerBuilder
Chris@0 24 */
Chris@0 25 protected $container;
Chris@0 26
Chris@0 27 /**
Chris@0 28 * {@inheritdoc}
Chris@0 29 */
Chris@0 30 protected function setUp() {
Chris@0 31 parent::setUp();
Chris@0 32
Chris@0 33 $this->container = new ContainerBuilder();
Chris@0 34 $user = $this->getMock('Drupal\Core\Session\AccountInterface');
Chris@0 35 $request_stack = new RequestStack();
Chris@0 36 $request_stack->push(new Request());
Chris@0 37 $views_data = $this->getMockBuilder('Drupal\views\ViewsData')
Chris@0 38 ->disableOriginalConstructor()
Chris@0 39 ->getMock();
Chris@0 40 $route_provider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface');
Chris@0 41 $this->container->set('views.executable', new ViewExecutableFactory($user, $request_stack, $views_data, $route_provider));
Chris@0 42
Chris@0 43 \Drupal::setContainer($this->container);
Chris@0 44 }
Chris@0 45
Chris@0 46 /**
Chris@0 47 * Tests the getView() method.
Chris@0 48 *
Chris@0 49 * @covers ::getView
Chris@0 50 */
Chris@0 51 public function testGetView() {
Chris@0 52 $view = new View(['id' => 'test_view'], 'view');
Chris@0 53
Chris@0 54 $view_storage = $this->getMockBuilder('Drupal\Core\Config\Entity\ConfigEntityStorage')
Chris@0 55 ->disableOriginalConstructor()
Chris@0 56 ->getMock();
Chris@0 57 $view_storage->expects($this->once())
Chris@0 58 ->method('load')
Chris@0 59 ->with('test_view')
Chris@0 60 ->will($this->returnValue($view));
Chris@0 61
Chris@0 62 $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
Chris@0 63 $entity_manager->expects($this->once())
Chris@0 64 ->method('getStorage')
Chris@0 65 ->with('view')
Chris@0 66 ->will($this->returnValue($view_storage));
Chris@0 67 $this->container->set('entity.manager', $entity_manager);
Chris@0 68
Chris@0 69 $executable = Views::getView('test_view');
Chris@0 70 $this->assertInstanceOf('Drupal\views\ViewExecutable', $executable);
Chris@0 71 $this->assertEquals($view->id(), $executable->storage->id());
Chris@0 72 $this->assertEquals(spl_object_hash($view), spl_object_hash($executable->storage));
Chris@0 73 }
Chris@0 74
Chris@0 75 /**
Chris@0 76 * @covers ::getApplicableViews
Chris@0 77 *
Chris@0 78 * @dataProvider providerTestGetApplicableViews
Chris@0 79 */
Chris@0 80 public function testGetApplicableViews($applicable_type, $expected) {
Chris@0 81 $view_1 = new View([
Chris@0 82 'id' => 'test_view_1',
Chris@0 83 'display' => [
Chris@0 84 'default' => [
Chris@0 85 'display_plugin' => 'default',
Chris@0 86 'display_options' => [],
Chris@0 87 ],
Chris@0 88 'type_a' => [
Chris@0 89 'display_plugin' => 'type_a',
Chris@0 90 'display_options' => [],
Chris@0 91 ],
Chris@0 92 ],
Chris@0 93 ], 'view');
Chris@0 94 $view_2 = new View([
Chris@0 95 'id' => 'test_view_2',
Chris@0 96 'display' => [
Chris@0 97 'default' => [
Chris@0 98 'display_plugin' => 'default',
Chris@0 99 'display_options' => [],
Chris@0 100 ],
Chris@0 101 'type_b' => [
Chris@0 102 'display_plugin' => 'type_b',
Chris@0 103 'display_options' => [
Chris@0 104 'enabled' => TRUE,
Chris@0 105 ],
Chris@0 106 ],
Chris@0 107 'type_b_2' => [
Chris@0 108 'display_plugin' => 'type_b',
Chris@0 109 'display_options' => [
Chris@0 110 'enabled' => FALSE,
Chris@0 111 ],
Chris@0 112 ],
Chris@0 113 ],
Chris@0 114 ], 'view');
Chris@0 115 $view_3 = new View([
Chris@0 116 'id' => 'test_view_3',
Chris@0 117 'display' => [
Chris@0 118 'default' => [
Chris@0 119 'display_plugin' => 'default',
Chris@0 120 'display_options' => [],
Chris@0 121 ],
Chris@0 122 // Test with Type A but a disabled display.
Chris@0 123 'type_a' => [
Chris@0 124 'display_plugin' => 'type_a',
Chris@0 125 'display_options' => [
Chris@17 126 'enabled' => FALSE,
Chris@0 127 ],
Chris@0 128 ],
Chris@0 129 // Type D intentionally doesn't exist.
Chris@0 130 'type_d' => [
Chris@0 131 'display_plugin' => 'type_d',
Chris@0 132 'display_options' => [],
Chris@0 133 ],
Chris@0 134 ],
Chris@0 135 ], 'view');
Chris@0 136
Chris@0 137 $query = $this->getMock('Drupal\Core\Entity\Query\QueryInterface');
Chris@0 138 $query->expects($this->exactly(2))
Chris@0 139 ->method('condition')
Chris@0 140 ->willReturnSelf();
Chris@0 141 $query->expects($this->once())
Chris@0 142 ->method('execute')
Chris@0 143 ->willReturn(['test_view_1', 'test_view_2', 'test_view_3']);
Chris@0 144
Chris@0 145 $view_storage = $this->getMockBuilder('Drupal\Core\Config\Entity\ConfigEntityStorage')
Chris@0 146 ->disableOriginalConstructor()
Chris@0 147 ->getMock();
Chris@0 148 $view_storage->expects($this->once())
Chris@0 149 ->method('getQuery')
Chris@0 150 ->willReturn($query);
Chris@0 151
Chris@0 152 $view_storage->expects($this->once())
Chris@0 153 ->method('loadMultiple')
Chris@0 154 ->with(['test_view_1', 'test_view_2', 'test_view_3'])
Chris@0 155 ->will($this->returnValue(['test_view_1' => $view_1, 'test_view_2' => $view_2, 'test_view_3' => $view_3]));
Chris@0 156
Chris@0 157 $entity_type_manager = $this->getMock(EntityTypeManagerInterface::class);
Chris@0 158 $entity_type_manager->expects($this->exactly(2))
Chris@0 159 ->method('getStorage')
Chris@0 160 ->with('view')
Chris@0 161 ->will($this->returnValue($view_storage));
Chris@0 162 $this->container->set('entity_type.manager', $entity_type_manager);
Chris@0 163
Chris@0 164 $definitions = [
Chris@0 165 'type_a' => [
Chris@0 166 'type_a' => TRUE,
Chris@0 167 'type_b' => FALSE,
Chris@0 168 ],
Chris@0 169 'type_b' => [
Chris@0 170 'type_a' => FALSE,
Chris@0 171 'type_b' => TRUE,
Chris@0 172 ],
Chris@0 173 ];
Chris@0 174
Chris@0 175 $display_manager = $this->getMock('Drupal\Component\Plugin\PluginManagerInterface');
Chris@0 176 $display_manager->expects($this->once())
Chris@0 177 ->method('getDefinitions')
Chris@0 178 ->willReturn($definitions);
Chris@0 179 $this->container->set('plugin.manager.views.display', $display_manager);
Chris@0 180
Chris@0 181 $result = Views::getApplicableViews($applicable_type);
Chris@0 182 $this->assertEquals($expected, $result);
Chris@0 183 }
Chris@0 184
Chris@0 185 /**
Chris@0 186 * Data provider for testGetApplicableViews.
Chris@0 187 *
Chris@0 188 * @return array
Chris@0 189 */
Chris@0 190 public function providerTestGetApplicableViews() {
Chris@0 191 return [
Chris@0 192 ['type_a', [['test_view_1', 'type_a']]],
Chris@0 193 ['type_b', [['test_view_2', 'type_b']]],
Chris@0 194 ['type_c', []],
Chris@0 195 ];
Chris@0 196 }
Chris@0 197
Chris@0 198 }