Version 1
[yaffs-website] / web / core / modules / views / tests / src / Kernel / Entity / ViewEntityDependenciesTest.php
diff --git a/web/core/modules/views/tests/src/Kernel/Entity/ViewEntityDependenciesTest.php b/web/core/modules/views/tests/src/Kernel/Entity/ViewEntityDependenciesTest.php
new file mode 100644 (file)
index 0000000..4929c7e
--- /dev/null
@@ -0,0 +1,178 @@
+<?php
+
+namespace Drupal\Tests\views\Kernel\Entity;
+
+use Drupal\Component\Utility\Unicode;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\node\Entity\NodeType;
+use Drupal\views\Tests\ViewTestData;
+use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
+use Drupal\views\Views;
+use Drupal\comment\Entity\CommentType;
+
+/**
+ * Tests the calculation of dependencies for views.
+ *
+ * @group views
+ */
+class ViewEntityDependenciesTest extends ViewsKernelTestBase {
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['test_field_get_entity', 'test_relationship_dependency', 'test_plugin_dependencies', 'test_argument_dependency'];
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['node', 'comment', 'user', 'field', 'text', 'search'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp($import_test_views = TRUE) {
+    parent::setUp(FALSE);
+
+    // Install the necessary dependencies for node type creation to work.
+    $this->installEntitySchema('node');
+    $this->installConfig(['field', 'node']);
+
+    $comment_type = CommentType::create([
+      'id' => 'comment',
+      'label' => 'Comment settings',
+      'description' => 'Comment settings',
+      'target_entity_type_id' => 'node',
+    ]);
+    $comment_type->save();
+
+    $content_type = NodeType::create([
+      'type' => $this->randomMachineName(),
+      'name' => $this->randomString(),
+    ]);
+    $content_type->save();
+    $field_storage = FieldStorageConfig::create([
+      'field_name' => Unicode::strtolower($this->randomMachineName()),
+      'entity_type' => 'node',
+      'type' => 'comment',
+    ]);
+    $field_storage->save();
+    FieldConfig::create([
+      'field_storage' => $field_storage,
+      'bundle' => $content_type->id(),
+      'label' => $this->randomMachineName() . '_label',
+      'description' => $this->randomMachineName() . '_description',
+      'settings' => [
+        'comment_type' => $comment_type->id(),
+      ],
+    ])->save();
+    FieldConfig::create([
+      'field_storage' => FieldStorageConfig::loadByName('node', 'body'),
+      'bundle' => $content_type->id(),
+      'label' => $this->randomMachineName() . '_body',
+      'settings' => ['display_summary' => TRUE],
+    ])->save();
+
+    ViewTestData::createTestViews(get_class($this), ['views_test_config']);
+  }
+
+  /**
+   * Tests the getDependencies method.
+   */
+  public function testGetDependencies() {
+    $expected = [];
+    $expected['test_field_get_entity'] = [
+      'module' => [
+        'comment',
+        'node',
+        'user',
+      ]
+    ];
+    // Tests dependencies of relationships.
+    $expected['test_relationship_dependency'] = [
+      'module' => [
+        'comment',
+        'node',
+        'user',
+      ]
+    ];
+    $expected['test_plugin_dependencies'] = [
+      'module' => [
+        'comment',
+        'views_test_data',
+      ],
+      'content' => [
+        'RowTest',
+        'StaticTest',
+        'StyleTest',
+      ]
+    ];
+
+    $expected['test_argument_dependency'] = [
+      'config' => [
+        'core.entity_view_mode.node.teaser',
+        'field.storage.node.body'
+      ],
+      'content' => [
+        'ArgumentDefaultTest',
+        'ArgumentValidatorTest'
+      ],
+      'module' => [
+        'node',
+        // The argument handler is provided by the search module.
+        'search',
+        'text',
+        'user'
+      ],
+    ];
+
+    foreach ($this::$testViews as $view_id) {
+      $view = Views::getView($view_id);
+
+      $dependencies = $view->getDependencies();
+      $this->assertEqual($expected[$view_id], $dependencies);
+      $config = $this->config('views.view.' . $view_id);
+      \Drupal::service('config.storage.sync')->write($view_id, $config->get());
+    }
+
+    // Ensure that dependencies are calculated on the display level.
+    $expected_display['default'] = [
+      'config' => [
+        'core.entity_view_mode.node.teaser',
+      ],
+      'content' => [
+        'ArgumentDefaultTest',
+        'ArgumentValidatorTest'
+      ],
+      'module' => [
+        'core',
+        'node',
+        'search',
+        'user',
+        'views'
+      ],
+    ];
+    $expected_display['page'] = [
+      'config' => [
+        'field.storage.node.body'
+      ],
+      'module' => [
+        'core',
+        'text',
+        'views'
+      ],
+    ];
+
+    $view = Views::getView('test_argument_dependency');
+    $view->initDisplay();
+    foreach ($view->displayHandlers as $display) {
+      // Calculate the dependencies each display has.
+      $this->assertEqual($expected_display[$display->getPluginId()], $display->calculateDependencies());
+    }
+  }
+
+}