View source
<?php
namespace Drupal\Tests\entity_hierarchy\Kernel;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\views\Tests\ViewResultAssertionTrait;
use Drupal\views\Views;
class ViewsIntegrationTest extends EntityHierarchyKernelTestBase {
use ViewResultAssertionTrait;
protected $testViewModule = 'entity_hierarchy_test_views';
protected static $modules = [
'entity_hierarchy',
'entity_test',
'system',
'user',
'dbal',
'field',
'views',
'entity_hierarchy_test_views',
];
protected function additionalSetup() {
parent::additionalSetup();
$this
->installConfig($this->testViewModule);
$this
->installConfig('system');
$this
->installSchema('system', [
'key_value_expire',
]);
}
protected function getArgumentFromEntity(ContentEntityInterface $entity) : int {
return $entity
->id();
}
public function testViewsIntegrationDirectChildren() {
$children = $this
->createChildEntities($this->parent
->id(), 3);
$child = reset($children);
$this
->createChildEntities($child
->id(), 5);
$expected = [
[
'name' => 'Child 3',
'id' => 4,
],
[
'name' => 'Child 2',
'id' => 3,
],
[
'name' => 'Child 1',
'id' => 2,
],
];
$executable = Views::getView('entity_hierarchy_test_children_view');
$executable
->preview('block_1', [
$this
->getArgumentFromEntity($this->parent),
]);
$this
->assertCount(3, $executable->result);
$this
->assertIdenticalResultset($executable, $expected, [
'name' => 'name',
'id' => 'id',
]);
}
public function testViewsIntegrationIncludingGrandChildren() {
$children = $this
->createChildEntities($this->parent
->id(), 3);
$child = reset($children);
$this
->createChildEntities($child
->id(), 5);
$expected = [
[
'name' => 'Child 3',
'id' => 4,
],
[
'name' => 'Child 2',
'id' => 3,
],
[
'name' => 'Child 1',
'id' => 2,
],
[
'name' => 'Child 5',
'id' => 9,
],
[
'name' => 'Child 4',
'id' => 8,
],
[
'name' => 'Child 3',
'id' => 7,
],
[
'name' => 'Child 2',
'id' => 6,
],
[
'name' => 'Child 1',
'id' => 5,
],
];
$executable = Views::getView('entity_hierarchy_test_children_view');
$executable
->preview('block_2', [
$this
->getArgumentFromEntity($this->parent),
]);
$this
->assertCount(8, $executable->result);
$this
->assertIdenticalResultset($executable, $expected, [
'name' => 'name',
'id' => 'id',
]);
}
public function testViewsIntegrationParents() {
$children = $this
->createChildEntities($this->parent
->id(), 1);
$child = reset($children);
$grandchildren = $this
->createChildEntities($child
->id(), 1);
$expected = [
[
'name' => 'Parent',
'id' => 1,
],
[
'name' => 'Child 1',
'id' => 2,
],
];
$executable = Views::getView('entity_hierarchy_test_children_view');
$executable
->preview('block_3', [
$this
->getArgumentFromEntity(reset($grandchildren)),
]);
$this
->assertCount(2, $executable->result);
$this
->assertIdenticalResultset($executable, $expected, [
'name' => 'name',
'id' => 'id',
]);
}
public function testViewsIntegrationSiblings() {
$children = $this
->createChildEntities($this->parent
->id(), 3);
$child = reset($children);
$this
->createChildEntities($child
->id(), 5);
$expected = [
[
'name' => 'Child 3',
'id' => 4,
],
[
'name' => 'Child 2',
'id' => 3,
],
];
$executable = Views::getView('entity_hierarchy_test_children_view');
$executable
->preview('block_4', [
$this
->getArgumentFromEntity($child),
]);
$this
->assertCount(2, $executable->result);
$this
->assertIdenticalResultset($executable, $expected, [
'name' => 'name',
'id' => 'id',
]);
}
public function testViewsIntegrationSiblingsShowSelf() {
$children = $this
->createChildEntities($this->parent
->id(), 3);
$child = reset($children);
$this
->createChildEntities($child
->id(), 5);
$expected = [
[
'name' => 'Child 3',
'id' => 4,
],
[
'name' => 'Child 2',
'id' => 3,
],
[
'name' => 'Child 1',
'id' => 2,
],
];
$executable = Views::getView('entity_hierarchy_test_children_view');
$executable
->preview('block_5', [
$this
->getArgumentFromEntity($child),
]);
$this
->assertCount(3, $executable->result);
$this
->assertIdenticalResultset($executable, $expected, [
'name' => 'name',
'id' => 'id',
]);
}
public function testDepthField() {
$children = $this
->createChildEntities($this->parent
->id(), 1);
$child = reset($children);
$this
->createChildEntities($child
->id(), 1);
$executable = Views::getView('entity_hierarchy_test_fields_view');
$output = $executable
->preview('field_depth');
$output = \Drupal::service('renderer')
->renderRoot($output);
$this
->assertStringContainsString('Parent at depth 0', $output);
$this
->assertStringContainsString('Child 1 at depth 2', $output);
}
public function testChildrenSummaryField() {
$children = $this
->createChildEntities($this->parent
->id(), 1, 'First');
$child = reset($children);
$children = $this
->createChildEntities($child
->id(), 2, 'Second');
foreach ($children as $key => $child) {
$children = $this
->createChildEntities($child
->id(), 3, "Third-{$key}");
}
$child = reset($children);
$this
->createChildEntities($child
->id(), 1, 'Fourth');
$this
->createChildEntities($this->parent
->id(), 1, 'Other');
$executable = Views::getView('entity_hierarchy_test_fields_view');
$output = $executable
->preview('summary_child_counts');
$output = \Drupal::service('renderer')
->renderRoot($output);
$this
->assertStringContainsString('Parent child counts are 2 / 2 / 6 / 1', $output);
$this
->assertStringContainsString('Child First1 child counts are 2 / 6 / 1', $output);
$this
->assertStringContainsString('Child Second2 child counts are 3 / 1', $output);
$this
->assertStringContainsString('Child Third-Child Second21 child counts are 1', $output);
$this
->assertStringContainsString('Child Second1 child counts are 3', $output);
}
public function testRelationshipRoot() {
$children = $this
->createChildEntities($this->parent
->id(), 1, 'First');
$child = reset($children);
$children = $this
->createChildEntities($child
->id(), 2, 'Second');
$child = reset($children);
$children = $this
->createChildEntities($child
->id(), 1, 'Third');
$child = reset($children);
$children = $this
->createChildEntities($child
->id(), 1, 'Fourth');
$executable = Views::getView('entity_hierarchy_test_relationships_view');
$output = $executable
->preview('root');
$output = trim(\Drupal::service('renderer')
->renderRoot($output));
$this
->assertStringContainsString('Parent is root of Child First1', $output);
$this
->assertStringContainsString('Parent is root of Child Third1', $output);
$this
->assertStringContainsString('Parent is root of Child Fourth1', $output);
$this
->assertStringNotContainsString('1 is root', $output);
$this
->assertEquals(6, substr_count($output, ' is root of'));
}
public function testRelationshipParent() {
$children = $this
->createChildEntities($this->parent
->id(), 1, 'First');
$child = reset($children);
$children = $this
->createChildEntities($child
->id(), 2, 'Second');
$child = reset($children);
$children = $this
->createChildEntities($child
->id(), 1, 'Third');
$child = reset($children);
$children = $this
->createChildEntities($child
->id(), 1, 'Fourth');
$executable = Views::getView('entity_hierarchy_test_relationships_view');
$output = $executable
->preview('parent');
$output = \Drupal::service('renderer')
->renderRoot($output);
$this
->assertStringContainsString('Child First1 is parent of Child Second2', $output);
$this
->assertStringContainsString('Child Second1 is parent of Child Third1', $output);
$this
->assertStringContainsString('Child Third1 is parent of Child Fourth1', $output);
$this
->assertStringNotContainsString('Child Fourth1 is parent of', $output);
$this
->assertEquals(5, substr_count($output, ' is parent of Child'));
}
public function testRelationshipChildren() {
$children = $this
->createChildEntities($this->parent
->id(), 1, 'First');
$child = reset($children);
$children = $this
->createChildEntities($child
->id(), 2, 'Second');
$child = reset($children);
$children = $this
->createChildEntities($child
->id(), 1, 'Third');
$child = reset($children);
$children = $this
->createChildEntities($child
->id(), 1, 'Fourth');
$executable = Views::getView('entity_hierarchy_test_relationships_view');
$output = $executable
->preview('children');
$output = trim(\Drupal::service('renderer')
->renderRoot($output));
$this
->assertStringContainsString('Child Second1 is child of Child First1', $output);
$this
->assertStringContainsString('Child Third1 is child of Child Second1', $output);
$this
->assertStringContainsString('Child Fourth1 is child of Child Third1', $output);
$this
->assertStringNotContainsString('child of Child Fourth1', $output);
$this
->assertEquals(5, substr_count($output, ' is child of'));
}
}