public function AddHierarchyTest::setUp in Search API 8
Performs setup tasks before each individual test method is run.
Installs commonly used schemas and sets up a search server and an index, with the specified processor enabled.
Parameters
string|null $processor: (optional) The plugin ID of the processor that should be set up for testing.
Overrides ProcessorTestBase::setUp
File
- tests/
src/ Kernel/ Processor/ AddHierarchyTest.php, line 80
Class
- AddHierarchyTest
- Tests the "Hierarchy" processor.
Namespace
Drupal\Tests\search_api\Kernel\ProcessorCode
public function setUp($processor = NULL) {
parent::setUp();
$this
->installConfig([
'filter',
]);
$this
->installEntitySchema('taxonomy_term');
$this
->createTaxonomyHierarchy();
// Create a node type for testing.
$type = NodeType::create([
'type' => 'page',
'name' => 'page',
]);
$type
->save();
// Add the taxonomy field to page type.
$this
->createEntityReferenceField('node', 'page', 'term_field', NULL, 'taxonomy_term', 'default', [], FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
// Add a generic entity reference field.
$this
->createEntityReferenceField('node', 'page', 'parent_reference', NULL, 'node', 'default', []);
// Index the taxonomy field.
$term_field = new Field($this->index, 'term_field');
$term_field
->setType('integer');
$term_field
->setPropertyPath('term_field');
$term_field
->setDatasourceId('entity:node');
$term_field
->setLabel('Terms');
$this->index
->addField($term_field);
// Index the entity reference field.
$reference_field = new Field($this->index, 'parent_reference');
$reference_field
->setType('integer');
$reference_field
->setPropertyPath('parent_reference');
$reference_field
->setDatasourceId('entity:node');
$reference_field
->setLabel('Parent page');
$this->index
->addField($reference_field);
// Add the "Index hierarchy" processor only now (not in parent method) since
// it can only be enabled once there are actually hierarchical fields.
$this->processor = \Drupal::getContainer()
->get('search_api.plugin_helper')
->createProcessorPlugin($this->index, 'hierarchy');
$this->index
->addProcessor($this->processor);
// Add the node datasource to the index.
$datasources = \Drupal::getContainer()
->get('search_api.plugin_helper')
->createDatasourcePlugins($this->index, [
'entity:node',
]);
$this->index
->setDatasources($datasources);
$this->index
->save();
$this->container
->get('search_api.index_task_manager')
->addItemsAll($this->index);
$index_storage = $this->container
->get('entity_type.manager')
->getStorage('search_api_index');
$index_storage
->resetCache([
$this->index
->id(),
]);
$this->index = $index_storage
->load($this->index
->id());
}