View source
<?php
namespace Drupal\Tests\search_api_exclude\Unit\Plugin\Processor;
use Drupal\Core\Entity\Plugin\DataType\EntityAdapter;
use Drupal\Core\Field\EntityReferenceFieldItemList;
use Drupal\Core\Field\FieldItemList;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;
use Drupal\search_api\Datasource\DatasourceInterface;
use Drupal\search_api\IndexInterface;
use Drupal\search_api\Utility\Utility;
use Drupal\search_api_exclude\Plugin\search_api\processor\NodeExclude;
use Drupal\Tests\search_api\Unit\Processor\TestItemsTrait;
use Drupal\Tests\PhpunitCompatibilityTrait;
use Drupal\Tests\UnitTestCase;
class NodeExcludeTest extends UnitTestCase {
use PhpunitCompatibilityTrait;
use TestItemsTrait;
protected $processor;
protected $index;
protected $datasources = [];
protected function setUp() {
parent::setUp();
require_once sprintf('%s/core/modules/system/system.module', $this->root);
$this
->setUpMockContainer();
$this->processor = new NodeExclude([], 'node_exclude', []);
$this->index = $this
->createMock(IndexInterface::class);
foreach ([
'node',
'comment',
'user',
] as $entity_type) {
$datasource = $this
->createMock(DatasourceInterface::class);
$datasource
->expects($this
->any())
->method('getEntityTypeId')
->will($this
->returnValue($entity_type));
$this->datasources[sprintf('entity:%s', $entity_type)] = $datasource;
}
}
public function testSupportsIndex(array $datasource_ids = NULL, $expected) {
if ($datasource_ids !== NULL) {
$datasource_ids = array_flip($datasource_ids);
$this->datasources = array_intersect_key($this->datasources, $datasource_ids);
}
$this->index
->method('getDatasources')
->will($this
->returnValue($this->datasources));
$this
->assertEquals($expected, NodeExclude::supportsIndex($this->index));
}
public function supportsIndexDataProvider() {
return [
'node datasource' => [
[
'entity:node',
],
TRUE,
],
'comment datasource' => [
[
'entity:comment',
],
FALSE,
],
'user datasource' => [
[
'entity:user',
],
FALSE,
],
];
}
public function testAlterItems() {
$datasource_id = 'entity:node';
$fields_helper = \Drupal::service('search_api.fields_helper');
$items = [];
foreach ([
1 => '1',
2 => '0',
3 => NULL,
] as $i => $exclude) {
$item_id = Utility::createCombinedId($datasource_id, sprintf('%d:en', $i));
$item = $fields_helper
->createItem($this->index, $item_id, $this->datasources[$datasource_id]);
$item
->setOriginalObject(EntityAdapter::createFromEntity($this
->createNode($exclude)));
$items[$item_id] = $item;
}
$this->processor
->alterIndexedItems($items);
$expected = [
Utility::createCombinedId($datasource_id, '2:en'),
Utility::createCombinedId($datasource_id, '3:en'),
];
$this
->assertEquals($expected, array_keys($items));
}
private function createNode($exclude) {
$nodeType = $this
->getMockBuilder(NodeType::class)
->disableOriginalConstructor()
->getMock();
$nodeType
->method('getThirdPartySetting')
->with('search_api_exclude', 'enabled', FALSE)
->will($this
->returnValue(TRUE));
$entityReferenceList = $this
->getMockBuilder(EntityReferenceFieldItemList::class)
->disableOriginalConstructor()
->getMock();
$entityReferenceList
->method('__get')
->with('entity')
->will($this
->returnValue($nodeType));
$field_item_list = $this
->getMockBuilder(FieldItemList::class)
->disableOriginalConstructor()
->getMock();
$field_item_list
->method('getString')
->will($this
->returnValue($exclude));
$node = $this
->getMockBuilder(Node::class)
->disableOriginalConstructor()
->getMock();
$node
->method('__get')
->with('type')
->will($this
->returnValue($entityReferenceList));
$node
->method('get')
->with('sae_exclude')
->will($this
->returnValue($field_item_list));
return $node;
}
}