--- /dev/null
+<?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);
+ }
+
+}