Version 1
[yaffs-website] / web / core / modules / views / tests / src / Unit / Plugin / area / EntityTest.php
diff --git a/web/core/modules/views/tests/src/Unit/Plugin/area/EntityTest.php b/web/core/modules/views/tests/src/Unit/Plugin/area/EntityTest.php
new file mode 100644 (file)
index 0000000..556aef9
--- /dev/null
@@ -0,0 +1,322 @@
+<?php
+
+namespace Drupal\Tests\views\Unit\Plugin\area;
+
+use Drupal\Tests\UnitTestCase;
+use Drupal\views\Plugin\views\area\Entity;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+
+/**
+ * @coversDefaultClass \Drupal\views\Plugin\views\area\Entity
+ * @group Entity
+ */
+class EntityTest extends UnitTestCase {
+
+  /**
+   * The tested entity area handler.
+   *
+   * @var \Drupal\views\Plugin\views\area\Entity
+   */
+  protected $entityHandler;
+
+  /**
+   * The mocked entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $entityManager;
+
+  /**
+   * The mocked entity storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $entityStorage;
+
+  /**
+   * The mocked entity view builder.
+   *
+   * @var \Drupal\Core\Entity\EntityViewBuilderInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $entityViewBuilder;
+
+  /**
+   * The mocked view executable.
+   *
+   * @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $executable;
+
+  /**
+   * The mocked display.
+   *
+   * @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $display;
+
+  /**
+   * The mocked style plugin.
+   *
+   * @var \Drupal\views\Plugin\views\style\StylePluginBase|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $stylePlugin;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
+    $this->entityStorage = $this->getMock('Drupal\Core\Entity\EntityStorageInterface');
+    $this->entityViewBuilder = $this->getMock('Drupal\Core\Entity\EntityViewBuilderInterface');
+
+    $this->executable = $this->getMockBuilder('Drupal\views\ViewExecutable')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $this->display = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $this->stylePlugin = $this->getMockBuilder('Drupal\views\Plugin\views\style\StylePluginBase')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $this->executable->style_plugin = $this->stylePlugin;
+
+    $this->entityHandler = new Entity([], 'entity', ['entity_type' => 'entity_test'], $this->entityManager);
+
+    $this->display->expects($this->any())
+      ->method('getPlugin')
+      ->with('style')
+      ->willReturn($this->stylePlugin);
+    $this->executable->expects($this->any())
+      ->method('getStyle')
+      ->willReturn($this->stylePlugin);
+
+
+    $token = $this->getMockBuilder('Drupal\Core\Utility\Token')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $token->expects($this->any())
+      ->method('replace')
+      ->willReturnArgument(0);
+    $container = new ContainerBuilder();
+    $container->set('token', $token);
+    \Drupal::setContainer($container);
+  }
+
+  /**
+   * Ensures that the entity manager returns an entity storage.
+   */
+  protected function setupEntityManager() {
+    $this->entityManager->expects($this->any())
+      ->method('getStorage')
+      ->with('entity_test')
+      ->willReturn($this->entityStorage);
+    $this->entityManager->expects($this->any())
+      ->method('getViewBuilder')
+      ->with('entity_test')
+      ->willReturn($this->entityViewBuilder);
+  }
+
+  /**
+   * Data provider for testing different types of tokens.
+   *
+   * @return array
+   */
+  public function providerTestTokens() {
+    return [
+      ['{{ raw_arguments.test1 }}', 5],
+      ['{{ arguments.test2 }}', 6],
+      ['{{ test_render_token }}', 7],
+      ['{{ test:global_token }}', 8],
+    ];
+  }
+
+  /**
+   * @covers ::render
+   * @covers ::defineOptions
+   * @covers ::init
+   */
+  public function testRenderWithId() {
+    $this->setupEntityManager();
+    $options = [
+      'target' => 1,
+      'tokenize' => FALSE,
+    ];
+
+    /** @var \Drupal\Core\Entity\EntityInterface $entity */
+    $entity = $this->getMock('Drupal\Core\Entity\EntityInterface');
+    $entity->expects($this->once())
+      ->method('access')
+      ->willReturn(TRUE);
+
+    $this->entityStorage->expects($this->never())
+      ->method('loadByProperties');
+    $this->entityManager->expects($this->any())
+      ->method('loadEntityByConfigTarget')
+      ->willReturn($entity);
+    $this->entityViewBuilder->expects($this->once())
+      ->method('view')
+      ->with($entity, 'default')
+      ->willReturn(['#markup' => 'hallo']);
+
+    $this->entityHandler->init($this->executable, $this->display, $options);
+
+    $result = $this->entityHandler->render();
+    $this->assertEquals(['#markup' => 'hallo'], $result);
+  }
+
+  /**
+   * @covers ::render
+   * @covers ::defineOptions
+   * @covers ::init
+   *
+   * @dataProvider providerTestTokens
+   */
+  public function testRenderWithIdAndToken($token, $id) {
+    $this->setupEntityManager();
+    $options = [
+      'target' => $token,
+      'tokenize' => TRUE,
+    ];
+
+    $entity = $this->getMock('Drupal\Core\Entity\EntityInterface');
+    $entity->expects($this->once())
+      ->method('access')
+      ->willReturn(TRUE);
+
+    $this->stylePlugin->expects($this->once())
+      ->method('tokenizeValue')
+      ->with($token, 0)
+      ->willReturn($id);
+
+    $this->entityStorage->expects($this->never())
+      ->method('loadByProperties');
+    $this->entityStorage->expects($this->once())
+      ->method('load')
+      ->with($id)
+      ->willReturn($entity);
+    $this->entityViewBuilder->expects($this->once())
+      ->method('view')
+      ->with($entity, 'default')
+      ->willReturn(['#markup' => 'hallo']);
+
+    $this->entityHandler->init($this->executable, $this->display, $options);
+
+    $result = $this->entityHandler->render();
+    $this->assertEquals(['#markup' => 'hallo'], $result);
+  }
+
+  /**
+   * @covers ::render
+   * @covers ::defineOptions
+   * @covers ::init
+   */
+  public function testRenderWithUuid() {
+    $this->setupEntityManager();
+    $uuid = '1d52762e-b9d8-4177-908f-572d1a5845a4';
+    $options = [
+      'target' => $uuid,
+      'tokenize' => FALSE,
+    ];
+    $entity = $this->getMock('Drupal\Core\Entity\EntityInterface');
+    $entity->expects($this->once())
+      ->method('access')
+      ->willReturn(TRUE);
+
+    $this->entityStorage->expects($this->never())
+      ->method('load');
+    $this->entityManager->expects($this->once())
+      ->method('loadEntityByConfigTarget')
+      ->willReturn($entity);
+    $this->entityViewBuilder->expects($this->once())
+      ->method('view')
+      ->with($entity, 'default')
+      ->willReturn(['#markup' => 'hallo']);
+
+    $this->entityHandler->init($this->executable, $this->display, $options);
+
+    $result = $this->entityHandler->render();
+    $this->assertEquals(['#markup' => 'hallo'], $result);
+  }
+
+  /**
+   * @covers ::calculateDependencies
+   *
+   * @dataProvider providerTestTokens
+   */
+  public function testCalculateDependenciesWithPlaceholder($token, $id) {
+    $this->setupEntityManager();
+
+    $options = [
+      'target' => $token,
+    ];
+    $this->entityHandler->init($this->executable, $this->display, $options);
+
+    $this->assertEquals([], $this->entityHandler->calculateDependencies());
+  }
+
+  /**
+   * @covers ::calculateDependencies
+   */
+  public function testCalculateDependenciesWithUuid() {
+    $this->setupEntityManager();
+
+    $uuid = '1d52762e-b9d8-4177-908f-572d1a5845a4';
+    $entity = $this->getMock('Drupal\Core\Entity\EntityInterface');
+    $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
+    $entity->expects($this->once())
+      ->method('getConfigDependencyName')
+      ->willReturn('entity_test:test-bundle:1d52762e-b9d8-4177-908f-572d1a5845a4');
+    $this->entityStorage->expects($this->never())
+      ->method('load');
+    $this->entityManager->expects($this->once())
+      ->method('loadEntityByConfigTarget')
+      ->willReturn($entity);
+    $entity_type->expects($this->once())
+      ->method('getConfigDependencyKey')
+      ->willReturn('content');
+    $this->entityManager->expects($this->once())
+      ->method('getDefinition')
+      ->willReturn($entity_type);
+
+    $options = [
+      'target' => $uuid,
+    ];
+    $this->entityHandler->init($this->executable, $this->display, $options);
+
+    $this->assertEquals(['content' => ['entity_test:test-bundle:1d52762e-b9d8-4177-908f-572d1a5845a4']], $this->entityHandler->calculateDependencies());
+  }
+
+  /**
+   * @covers ::calculateDependencies
+   */
+  public function testCalculateDependenciesWithEntityId() {
+    $this->setupEntityManager();
+
+    $entity = $this->getMock('Drupal\Core\Entity\EntityInterface');
+    $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
+    $entity->expects($this->once())
+      ->method('getConfigDependencyName')
+      ->willReturn('entity_test:test-bundle:1d52762e-b9d8-4177-908f-572d1a5845a4');
+    $this->entityManager->expects($this->once())
+      ->method('loadEntityByConfigTarget')
+      ->willReturn($entity);
+    $this->entityStorage->expects($this->never())
+      ->method('loadByProperties');
+    $entity_type->expects($this->once())
+      ->method('getConfigDependencyKey')
+      ->willReturn('content');
+    $this->entityManager->expects($this->once())
+      ->method('getDefinition')
+      ->willReturn($entity_type);
+
+    $options = [
+      'target' => 1,
+    ];
+    $this->entityHandler->init($this->executable, $this->display, $options);
+
+    $this->assertEquals(['content' => ['entity_test:test-bundle:1d52762e-b9d8-4177-908f-572d1a5845a4']], $this->entityHandler->calculateDependencies());
+  }
+
+}