Version 1
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Cache / CacheFactoryTest.php
diff --git a/web/core/tests/Drupal/Tests/Core/Cache/CacheFactoryTest.php b/web/core/tests/Drupal/Tests/Core/Cache/CacheFactoryTest.php
new file mode 100644 (file)
index 0000000..0c43bb2
--- /dev/null
@@ -0,0 +1,148 @@
+<?php
+
+namespace Drupal\Tests\Core\Cache;
+
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Core\Cache\CacheFactory;
+use Drupal\Core\Site\Settings;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\Core\Cache\CacheFactory
+ * @group Cache
+ */
+class CacheFactoryTest extends UnitTestCase {
+
+  /**
+   * Test that the cache factory falls back to the built-in default service.
+   *
+   * @covers ::__construct
+   * @covers ::get
+   */
+  public function testCacheFactoryWithDefaultSettings() {
+    $settings = new Settings([]);
+    $cache_factory = new CacheFactory($settings);
+
+    $container = new ContainerBuilder();
+    $cache_factory->setContainer($container);
+
+    $builtin_default_backend_factory = $this->getMock('\Drupal\Core\Cache\CacheFactoryInterface');
+    $container->set('cache.backend.database', $builtin_default_backend_factory);
+
+    $render_bin = $this->getMock('\Drupal\Core\Cache\CacheBackendInterface');
+    $builtin_default_backend_factory->expects($this->once())
+      ->method('get')
+      ->with('render')
+      ->will($this->returnValue($render_bin));
+
+    $actual_bin = $cache_factory->get('render');
+    $this->assertSame($render_bin, $actual_bin);
+  }
+
+  /**
+   * Test that the cache factory falls back to customized default service.
+   *
+   * @covers ::__construct
+   * @covers ::get
+   */
+  public function testCacheFactoryWithCustomizedDefaultBackend() {
+    $settings = new Settings([
+      'cache' => [
+        'default' => 'cache.backend.custom',
+      ],
+    ]);
+    $cache_factory = new CacheFactory($settings);
+
+    $container = new ContainerBuilder();
+    $cache_factory->setContainer($container);
+
+    $custom_default_backend_factory = $this->getMock('\Drupal\Core\Cache\CacheFactoryInterface');
+    $container->set('cache.backend.custom', $custom_default_backend_factory);
+
+    $render_bin = $this->getMock('\Drupal\Core\Cache\CacheBackendInterface');
+    $custom_default_backend_factory->expects($this->once())
+      ->method('get')
+      ->with('render')
+      ->will($this->returnValue($render_bin));
+
+    $actual_bin = $cache_factory->get('render');
+    $this->assertSame($render_bin, $actual_bin);
+  }
+
+  /**
+   * Test that the cache factory uses the correct default bin backend.
+   *
+   * @covers ::__construct
+   * @covers ::get
+   */
+  public function testCacheFactoryWithDefaultBinBackend() {
+    // Ensure the default bin backends are used before the configured default.
+    $settings = new Settings([
+      'cache' => [
+        'default' => 'cache.backend.unused',
+      ],
+    ]);
+
+    $default_bin_backends = [
+      'render' => 'cache.backend.custom',
+    ];
+
+    $cache_factory = new CacheFactory($settings, $default_bin_backends);
+
+    $container = new ContainerBuilder();
+    $cache_factory->setContainer($container);
+
+    $custom_default_backend_factory = $this->getMock('\Drupal\Core\Cache\CacheFactoryInterface');
+    $container->set('cache.backend.custom', $custom_default_backend_factory);
+
+    $render_bin = $this->getMock('\Drupal\Core\Cache\CacheBackendInterface');
+    $custom_default_backend_factory->expects($this->once())
+      ->method('get')
+      ->with('render')
+      ->will($this->returnValue($render_bin));
+
+    $actual_bin = $cache_factory->get('render');
+    $this->assertSame($render_bin, $actual_bin);
+  }
+
+  /**
+   * Test that the cache factory picks the correct per-bin service.
+   *
+   * @covers ::__construct
+   * @covers ::get
+   */
+  public function testCacheFactoryWithSpecifiedPerBinBackend() {
+    // Ensure the per-bin configuration is used before the configured default
+    // and per-bin defaults.
+    $settings = new Settings([
+      'cache' => [
+        'default' => 'cache.backend.unused',
+        'bins' => [
+          'render' => 'cache.backend.custom',
+        ],
+      ],
+    ]);
+
+    $default_bin_backends = [
+      'render' => 'cache.backend.unused',
+    ];
+
+    $cache_factory = new CacheFactory($settings, $default_bin_backends);
+
+    $container = new ContainerBuilder();
+    $cache_factory->setContainer($container);
+
+    $custom_render_backend_factory = $this->getMock('\Drupal\Core\Cache\CacheFactoryInterface');
+    $container->set('cache.backend.custom', $custom_render_backend_factory);
+
+    $render_bin = $this->getMock('\Drupal\Core\Cache\CacheBackendInterface');
+    $custom_render_backend_factory->expects($this->once())
+      ->method('get')
+      ->with('render')
+      ->will($this->returnValue($render_bin));
+
+    $actual_bin = $cache_factory->get('render');
+    $this->assertSame($render_bin, $actual_bin);
+  }
+
+}