Version 1
[yaffs-website] / web / core / modules / forum / src / Tests / Views / ForumIntegrationTest.php
diff --git a/web/core/modules/forum/src/Tests/Views/ForumIntegrationTest.php b/web/core/modules/forum/src/Tests/Views/ForumIntegrationTest.php
new file mode 100644 (file)
index 0000000..f5677e4
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+
+namespace Drupal\forum\Tests\Views;
+
+use Drupal\node\NodeInterface;
+use Drupal\views\Views;
+use Drupal\views\Tests\ViewTestBase;
+use Drupal\views\Tests\ViewTestData;
+
+/**
+ * Tests the forum integration into views.
+ *
+ * @group forum
+ */
+class ForumIntegrationTest extends ViewTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['forum_test_views'];
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['test_forum_index'];
+
+  protected function setUp() {
+    parent::setUp();
+
+    ViewTestData::createTestViews(get_class($this), ['forum_test_views']);
+  }
+
+
+  /**
+   * Tests the integration.
+   */
+  public function testForumIntegration() {
+    // Create a forum.
+    $entity_manager = $this->container->get('entity.manager');
+    $term = $entity_manager->getStorage('taxonomy_term')->create(['vid' => 'forums', 'name' => $this->randomMachineName()]);
+    $term->save();
+
+    $comment_storage = $entity_manager->getStorage('comment');
+
+    // Create some nodes which are part of this forum with some comments.
+    $nodes = [];
+    for ($i = 0; $i < 3; $i++) {
+      $node = $this->drupalCreateNode(['type' => 'forum', 'taxonomy_forums' => [$term->id()], 'sticky' => $i == 0 ? NodeInterface::STICKY : NodeInterface::NOT_STICKY]);
+      $nodes[] = $node;
+    }
+
+    $account = $this->drupalCreateUser(['skip comment approval']);
+    $this->drupalLogin($account);
+
+    $comments = [];
+    foreach ($nodes as $index => $node) {
+      for ($i = 0; $i <= $index; $i++) {
+        $comment = $comment_storage->create(['entity_type' => 'node', 'entity_id' => $node->id(), 'field_name' => 'comment_forum']);
+        $comment->save();
+        $comments[$comment->get('entity_id')->target_id][$comment->id()] = $comment;
+      }
+    }
+
+    $view = Views::getView('test_forum_index');
+    $this->executeView($view);
+
+    $expected_result = [];
+    $expected_result[] = [
+      'nid' => $nodes[0]->id(),
+      'sticky' => NodeInterface::STICKY,
+      'comment_count' => 1.
+    ];
+    $expected_result[] = [
+      'nid' => $nodes[1]->id(),
+      'sticky' => NodeInterface::NOT_STICKY,
+      'comment_count' => 2.
+    ];
+    $expected_result[] = [
+      'nid' => $nodes[2]->id(),
+      'sticky' => NodeInterface::NOT_STICKY,
+      'comment_count' => 3.
+    ];
+    $column_map = [
+      'nid' => 'nid',
+      'forum_index_sticky' => 'sticky',
+      'forum_index_comment_count' => 'comment_count',
+    ];
+    $this->assertIdenticalResultset($view, $expected_result, $column_map);
+  }
+
+}