Version 1
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / DrupalKernel / DrupalKernelSiteTest.php
diff --git a/web/core/tests/Drupal/KernelTests/Core/DrupalKernel/DrupalKernelSiteTest.php b/web/core/tests/Drupal/KernelTests/Core/DrupalKernel/DrupalKernelSiteTest.php
new file mode 100644 (file)
index 0000000..deea2a9
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+namespace Drupal\KernelTests\Core\DrupalKernel;
+
+use Drupal\Core\Site\Settings;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests site-specific service overrides.
+ *
+ * @group DrupalKernel
+ */
+class DrupalKernelSiteTest extends KernelTestBase {
+
+  /**
+   * Tests services.yml in site directory.
+   */
+  public function testServicesYml() {
+    $container_yamls = Settings::get('container_yamls');
+    $container_yamls[] = $this->siteDirectory . '/services.yml';
+    $this->setSetting('container_yamls', $container_yamls);
+    $this->assertFalse($this->container->has('site.service.yml'));
+    // A service provider class always has precedence over services.yml files.
+    // KernelTestBase::buildContainer() swaps out many services with in-memory
+    // implementations already, so those cannot be tested.
+    $this->assertIdentical(get_class($this->container->get('cache.backend.database')), 'Drupal\Core\Cache\DatabaseBackendFactory');
+
+    $class = __CLASS__;
+    $doc = <<<EOD
+services:
+  # Add a new service.
+  site.service.yml:
+    class: $class
+  # Swap out a core service.
+  cache.backend.database:
+    class: Drupal\Core\Cache\MemoryBackendFactory
+EOD;
+    file_put_contents($this->siteDirectory . '/services.yml', $doc);
+
+    // Rebuild the container.
+    $this->container->get('kernel')->rebuildContainer();
+
+    $this->assertTrue($this->container->has('site.service.yml'));
+    $this->assertIdentical(get_class($this->container->get('cache.backend.database')), 'Drupal\Core\Cache\MemoryBackendFactory');
+  }
+
+}