Version 1
[yaffs-website] / web / core / modules / block / tests / src / Kernel / BlockStorageUnitTest.php
diff --git a/web/core/modules/block/tests/src/Kernel/BlockStorageUnitTest.php b/web/core/modules/block/tests/src/Kernel/BlockStorageUnitTest.php
new file mode 100644 (file)
index 0000000..2a7c771
--- /dev/null
@@ -0,0 +1,158 @@
+<?php
+
+namespace Drupal\Tests\block\Kernel;
+
+use Drupal\Core\Block\BlockPluginInterface;
+use Drupal\Core\Config\Entity\ConfigEntityStorage;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\block_test\Plugin\Block\TestHtmlBlock;
+use Drupal\Component\Plugin\Exception\PluginException;
+use Drupal\block\Entity\Block;
+
+/**
+ * Tests the storage of blocks.
+ *
+ * @group block
+ */
+class BlockStorageUnitTest extends KernelTestBase {
+
+  /**
+   * Modules to install.
+   *
+   * @var array
+   */
+  public static $modules = ['block', 'block_test', 'system'];
+
+  /**
+   * The block storage.
+   *
+   * @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface.
+   */
+  protected $controller;
+
+  protected function setUp() {
+    parent::setUp();
+
+    $this->controller = $this->container->get('entity_type.manager')->getStorage('block');
+
+    $this->container->get('theme_installer')->install(['stark']);
+  }
+
+  /**
+   * Tests CRUD operations.
+   */
+  public function testBlockCRUD() {
+    $this->assertTrue($this->controller instanceof ConfigEntityStorage, 'The block storage is loaded.');
+
+    // Run each test method in the same installation.
+    $this->createTests();
+    $this->loadTests();
+    $this->deleteTests();
+  }
+
+  /**
+   * Tests the creation of blocks.
+   */
+  protected function createTests() {
+    // Attempt to create a block without a plugin.
+    try {
+      $entity = $this->controller->create([]);
+      $entity->getPlugin();
+      $this->fail('A block without a plugin was created with no exception thrown.');
+    }
+    catch (PluginException $e) {
+      $this->assertEqual('The block \'\' did not specify a plugin.', $e->getMessage(), 'An exception was thrown when a block was created without a plugin.');
+    }
+
+    // Create a block with only required values.
+    $entity = $this->controller->create([
+      'id' => 'test_block',
+      'theme' => 'stark',
+      'region' => 'content',
+      'plugin' => 'test_html',
+    ]);
+    $entity->save();
+
+    $this->assertTrue($entity instanceof Block, 'The newly created entity is a Block.');
+
+    // Verify all of the block properties.
+    $actual_properties = $this->config('block.block.test_block')->get();
+    $this->assertTrue(!empty($actual_properties['uuid']), 'The block UUID is set.');
+    unset($actual_properties['uuid']);
+
+    // Ensure that default values are filled in.
+    $expected_properties = [
+      'langcode' => \Drupal::languageManager()->getDefaultLanguage()->getId(),
+      'status' => TRUE,
+      'dependencies' => ['module' => ['block_test'], 'theme' => ['stark']],
+      'id' => 'test_block',
+      'theme' => 'stark',
+      'region' => 'content',
+      'weight' => NULL,
+      'provider' => NULL,
+      'plugin' => 'test_html',
+      'settings' => [
+        'id' => 'test_html',
+        'label' => '',
+        'provider' => 'block_test',
+        'label_display' => BlockPluginInterface::BLOCK_LABEL_VISIBLE,
+      ],
+      'visibility' => [],
+    ];
+
+    $this->assertIdentical($actual_properties, $expected_properties);
+
+    $this->assertTrue($entity->getPlugin() instanceof TestHtmlBlock, 'The entity has an instance of the correct block plugin.');
+  }
+
+  /**
+   * Tests the loading of blocks.
+   */
+  protected function loadTests() {
+    $entity = $this->controller->load('test_block');
+
+    $this->assertTrue($entity instanceof Block, 'The loaded entity is a Block.');
+
+    // Verify several properties of the block.
+    $this->assertSame('content', $entity->getRegion());
+    $this->assertTrue($entity->status());
+    $this->assertEqual($entity->getTheme(), 'stark');
+    $this->assertTrue($entity->uuid());
+  }
+
+  /**
+   * Tests the deleting of blocks.
+   */
+  protected function deleteTests() {
+    $entity = $this->controller->load('test_block');
+
+    // Ensure that the storage isn't currently empty.
+    $config_storage = $this->container->get('config.storage');
+    $config = $config_storage->listAll('block.block.');
+    $this->assertFalse(empty($config), 'There are blocks in config storage.');
+
+    // Delete the block.
+    $entity->delete();
+
+    // Ensure that the storage is now empty.
+    $config = $config_storage->listAll('block.block.');
+    $this->assertTrue(empty($config), 'There are no blocks in config storage.');
+  }
+
+  /**
+   * Tests the installation of default blocks.
+   */
+  public function testDefaultBlocks() {
+    \Drupal::service('theme_handler')->install(['classy']);
+    $entities = $this->controller->loadMultiple();
+    $this->assertTrue(empty($entities), 'There are no blocks initially.');
+
+    // Install the block_test.module, so that its default config is installed.
+    $this->installConfig(['block_test']);
+
+    $entities = $this->controller->loadMultiple();
+    $entity = reset($entities);
+    $this->assertEqual($entity->id(), 'test_block', 'The default test block was loaded.');
+  }
+
+}