drupalCreateContentType()->id(); $node1 = $this->drupalCreateNode(['type' => $type]); $node2 = $this->drupalCreateNode(['type' => $type]); $node3 = $this->drupalCreateNode(); foreach ([$node1, $node2, $node3] as $node) { $this->nodes[$node->getType()][$node->id()] = $node->label(); } // Create a field. $field_storage = FieldStorageConfig::create([ 'field_name' => 'test_field', 'entity_type' => 'entity_test', 'translatable' => FALSE, 'settings' => [ 'target_type' => 'node', ], 'type' => 'entity_reference', 'cardinality' => '1', ]); $field_storage->save(); $field = FieldConfig::create([ 'field_storage' => $field_storage, 'bundle' => 'test_bundle', 'settings' => [ 'handler' => 'views', 'handler_settings' => [ 'view' => [ 'view_name' => 'test_entity_reference', 'display_name' => 'entity_reference_1', 'arguments' => [], ], ], ], ]); $field->save(); $this->field = $field; } /** * Confirm the expected results are returned. * * @param array $result * Query results keyed by node type and nid. */ protected function assertResults(array $result) { $success = FALSE; foreach ($result as $node_type => $values) { foreach ($values as $nid => $label) { if (!$success = $this->nodes[$node_type][$nid] == trim(strip_tags($label))) { // There was some error, so break. break; } } } $this->assertTrue($success, 'Views selection handler returned expected values.'); } /** * Tests the selection handler. */ public function testSelectionHandler() { // Get values from selection handler. $handler = $this->container->get('plugin.manager.entity_reference_selection')->getSelectionHandler($this->field); $result = $handler->getReferenceableEntities(); $this->assertResults($result); } /** * Tests the selection handler with a relationship. */ public function testSelectionHandlerRelationship() { // Add a relationship to the view. $view = Views::getView('test_entity_reference'); $view->setDisplay(); $view->displayHandlers->get('default')->setOption('relationships', [ 'test_relationship' => [ 'id' => 'uid', 'table' => 'node_field_data', 'field' => 'uid', ], ]); // Add a filter depending on the relationship to the test view. $view->displayHandlers->get('default')->setOption('filters', [ 'uid' => [ 'id' => 'uid', 'table' => 'users_field_data', 'field' => 'uid', 'relationship' => 'test_relationship', ], ]); // Set view to distinct so only one row per node is returned. $query_options = $view->display_handler->getOption('query'); $query_options['options']['distinct'] = TRUE; $view->display_handler->setOption('query', $query_options); $view->save(); // Get values from the selection handler. $handler = $this->container->get('plugin.manager.entity_reference_selection')->getSelectionHandler($this->field); $result = $handler->getReferenceableEntities(); $this->assertResults($result); } }