entity_reference_uuid-8.x-1.x-dev/tests/src/Kernel/Views/NodeChemicalContainerConstituents.php
tests/src/Kernel/Views/NodeChemicalContainerConstituents.php
<?php
namespace Drupal\Tests\entity_reference_uuid\Kernel\Views;
use Drupal\views\Views;
/**
* A test.
*
* @group entity_reference_uuid
*/
class NodeChemicalContainerConstituents extends UuidViewsKernelTestBase {
/**
* Views to be enabled.
*
* @var array
*/
public static $testViews = [
'node_forward_container_constituents',
'node_forward_entity_reverse_constituents',
];
/**
* Tests constituent view.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
public function testConstituentView() {
// Validate the presave hook fixed all the test_nodetype_chemical values
// where needed.
/** @var \Drupal\node\NodeInterface $chemicals */
$chemicals = $this->entityTypeManager->getStorage('node')->loadByProperties(['type' => 'test_nodetype_chemical']);
foreach ($chemicals as $node) {
$this->assertEquals($node->uuid(), $node->field_chemical_constituents->first()->target_uuid);
if (count($node->field_chemical_constituents) == 1) {
$this->assertEmpty($node->field_chemical_mixture_flag->value);
}
else {
$this->assertNotEmpty($node->field_chemical_mixture_flag->value);
}
}
$view = Views::getView('node_forward_container_constituents');
$this->executeView($view);
// There are 4 test_nodetype_two nodes that relate to 3 chemical nodes
// that have 1, 2, 3, and 1 constituent which sums to 7 results.
$this->assertCount(7, $view->result);
// Create a test_nodetype_two that relates to "Ethanol".
$test_nodetype_two = [
[
'uuid' => '0bc3f7f2-6dcd-4475-8d4c-e1acf8d0f75b',
'title' => 'Container of Ethanol',
'field_node_one_ref' => [
[
'target_uuid' => '2bbc790c-d3be-45c3-988c-660c4216be52',
],
],
],
];
$this->createNodes('test_nodetype_two', $test_nodetype_two);
$view = Views::getView('node_forward_container_constituents');
$this->executeView($view);
// There should be one more result.
$this->assertCount(8, $view->result);
$expected_uuids = [
'29f515b1-90aa-4cec-8aeb-9798aa9afb46',
'cea1815d-b027-48ea-810c-e79edbad75c0',
'cea1815d-b027-48ea-810c-e79edbad75c0',
'84ac71d4-fbbf-460b-b8a3-2d93e6191e46',
'84ac71d4-fbbf-460b-b8a3-2d93e6191e46',
'84ac71d4-fbbf-460b-b8a3-2d93e6191e46',
'd46a21c5-8cb3-4d3e-9d24-8c0136b4d0eb',
'0bc3f7f2-6dcd-4475-8d4c-e1acf8d0f75b',
];
foreach ($view->result as $index => $row) {
$this->assertEquals($expected_uuids[$index], $row->_entity->uuid());
}
}
/**
* Tests recursive view.
*/
public function testReverseConstituentView() {
$view = Views::getView('node_forward_entity_reverse_constituents');
$this->executeView($view);
// In the chemical fixtures "Acetone" and "Ammonium Nitrate" are related
// from a test_entity_two. The "Container of Acetone" and
// "Container of Acetone in Water" have "Acetone" as a constituent and the
// "Container of Cold packs" and "Container of Ammonium Nitrate" have
// "Ammonium Nitrate" as a constituent. Thus 4 results are expected.
$this->assertCount(4, $view->result);
// Create a test_nodetype_two that relates to "Ethanol".
$test_nodetype_two = [
[
'uuid' => '0bc3f7f2-6dcd-4475-8d4c-e1acf8d0f75b',
'title' => 'Container of Ethanol',
'field_node_one_ref' => [
[
'target_uuid' => '2bbc790c-d3be-45c3-988c-660c4216be52',
],
],
],
];
$this->createNodes('test_nodetype_two', $test_nodetype_two);
$view = Views::getView('node_forward_entity_reverse_constituents');
$this->executeView($view);
// The results should be unchanged since there is no relationship from
// a test_entity_two to "Ethanol".
$this->assertCount(4, $view->result);
// Make a relationship between "Ethanol" and "Safety data one one".
$test_entity_two = [
[
'uuid' => 'd7655fea-1654-49d5-aebd-5d829e69287a',
'name' => 'Safety data related one',
'entity_one_ref' => [
[
'target_uuid' => 'bdd04085-3a7e-4334-9bd1-4ce9ce650152',
],
],
'node_one_ref' => [
[
'target_uuid' => '2bbc790c-d3be-45c3-988c-660c4216be52',
],
],
],
];
$this->createEntities('test_entity_two', $test_entity_two);
$view = Views::getView('node_forward_entity_reverse_constituents');
$this->executeView($view);
$this->assertCount(5, $view->result);
// Filter down to "Acetone" and "Ethanol" constituents based on the
// related test_entity_one.
$view = Views::getView('node_forward_entity_reverse_constituents');
$view->setExposedInput(['entity_one_ref' => 'bdd04085-3a7e-4334-9bd1-4ce9ce650152']);
$this->executeView($view);
$this->assertCount(3, $view->result);
$expected_uuids = [
'29f515b1-90aa-4cec-8aeb-9798aa9afb46',
'cea1815d-b027-48ea-810c-e79edbad75c0',
'0bc3f7f2-6dcd-4475-8d4c-e1acf8d0f75b',
];
foreach ($view->result as $index => $row) {
$this->assertEquals($expected_uuids[$index], $row->_entity->uuid());
}
}
/**
* We want some different fixtures for these tests.
*/
protected function setUpFixtures() {
$test_nodetype_chemical = [
[
'uuid' => '825f0d30-23e1-4cb8-a9a3-d2266c0e6e65',
'title' => 'Acetone',
'field_chemical_cas_number' => '67-64-1',
],
[
'uuid' => '73b92228-fd2d-4b50-8578-31cc7aec7355',
'title' => 'Acetone in Water',
'field_chemical_constituents' => [
[
'target_uuid' => '825f0d30-23e1-4cb8-a9a3-d2266c0e6e65',
],
],
],
[
'uuid' => '2d88d540-7efd-47b0-9ac8-aa111cfc5f6c',
'title' => 'Ammonium Nitrate',
'field_chemical_cas_number' => '6484-52-2',
],
[
'uuid' => '92dcba07-4966-46e1-ab99-4e20d6674eb7',
'title' => 'Dihydrogen oxide',
'body' => [
'value' => 'Water!',
'summary' => '',
'format' => 'plain_text',
],
'field_chemical_cas_number' => '7732-18-5',
// This should be fixed by the presave hook.
'field_chemical_mixture_flag' => TRUE,
],
[
'uuid' => 'fa9c7f46-4b31-4f3c-987f-ad7b0fea0365',
'title' => 'Instant cold pack',
'body' => [
'value' => 'https://en.wikipedia.org/wiki/Ice_pack',
'summary' => '',
'format' => 'plain_text',
],
'field_chemical_constituents' => [
[
'target_uuid' => '2d88d540-7efd-47b0-9ac8-aa111cfc5f6c',
],
[
'target_uuid' => '92dcba07-4966-46e1-ab99-4e20d6674eb7',
],
],
// This should be fixed by the presave hook.
'field_chemical_mixture_flag' => FALSE,
],
[
'uuid' => '2bbc790c-d3be-45c3-988c-660c4216be52',
'title' => 'Ethanol',
'body' => [
'value' => 'Essential nutrient for Drupal developers.
CH3CH2OH',
'summary' => '',
'format' => 'plain_text',
],
'field_chemical_cas_number' => '64-17-5',
],
];
$this->createNodes('test_nodetype_chemical', $test_nodetype_chemical);
$test_nodetype_two = [
[
'uuid' => '29f515b1-90aa-4cec-8aeb-9798aa9afb46',
'title' => 'Container of Acetone',
'field_node_one_ref' => [
[
'target_uuid' => '825f0d30-23e1-4cb8-a9a3-d2266c0e6e65',
],
],
],
[
'uuid' => 'cea1815d-b027-48ea-810c-e79edbad75c0',
'title' => 'Container of Acetone in Water',
'field_node_one_ref' => [
[
'target_uuid' => '73b92228-fd2d-4b50-8578-31cc7aec7355',
],
],
],
[
'uuid' => '84ac71d4-fbbf-460b-b8a3-2d93e6191e46',
'title' => 'Container of Cold packs',
'field_node_one_ref' => [
[
'target_uuid' => 'fa9c7f46-4b31-4f3c-987f-ad7b0fea0365',
],
],
],
[
'uuid' => 'd46a21c5-8cb3-4d3e-9d24-8c0136b4d0eb',
'title' => 'Container of Ammonium Nitrate',
'field_node_one_ref' => [
[
'target_uuid' => '2d88d540-7efd-47b0-9ac8-aa111cfc5f6c',
],
],
],
];
$this->createNodes('test_nodetype_two', $test_nodetype_two);
$test_entity_one = [
[
'uuid' => 'bdd04085-3a7e-4334-9bd1-4ce9ce650152',
'name' => 'Safety data one one',
],
[
'uuid' => '320f956d-b8d8-457b-a6d1-33976d5d4a14',
'name' => 'Safety data one two',
],
[
'uuid' => '9632d9ef-1904-4394-b28e-20fa045dbea3',
'name' => 'Safety data one three',
],
];
$this->createEntities('test_entity_one', $test_entity_one);
// For this test, we use test_nodetype_two to define a relationship between
// a chemical constituent and a safety data record represented by a
// test_entity_one.
$test_entity_two = [
[
'uuid' => '964325bd-122e-4b24-b792-cd47a3b56596',
'name' => 'Safety data related one',
'entity_one_ref' => [
[
'target_uuid' => 'bdd04085-3a7e-4334-9bd1-4ce9ce650152',
],
],
'node_one_ref' => [
[
'target_uuid' => '825f0d30-23e1-4cb8-a9a3-d2266c0e6e65',
],
],
],
[
'uuid' => 'b8017142-a58f-4e6a-a29b-ce120f4dae4b',
'name' => 'Safety data related two',
'entity_one_ref' => [
[
'target_uuid' => '320f956d-b8d8-457b-a6d1-33976d5d4a14',
],
],
'node_one_ref' => [
[
'target_uuid' => '2d88d540-7efd-47b0-9ac8-aa111cfc5f6c',
],
],
],
];
$this->createEntities('test_entity_two', $test_entity_two);
}
}
