View source
<?php
namespace Drupal\Tests\facets\Kernel\Entity;
use Drupal\Core\Plugin\PluginBase;
use Drupal\facets\Entity\Facet;
use Drupal\facets\Exception\Exception;
use Drupal\facets\Exception\InvalidProcessorException;
use Drupal\facets\Hierarchy\HierarchyPluginManager;
use Drupal\facets\Plugin\facets\hierarchy\Taxonomy;
use Drupal\facets\Plugin\facets\processor\HideNonNarrowingResultProcessor;
use Drupal\facets\Plugin\facets\widget\LinksWidget;
use Drupal\facets\Processor\ProcessorInterface;
use Drupal\facets\Result\Result;
use Drupal\facets\Widget\WidgetPluginManager;
use Drupal\KernelTests\KernelTestBase;
class FacetTest extends KernelTestBase {
public static $modules = [
'facets',
'taxonomy',
];
public function setUp() {
parent::setUp();
$this
->installEntitySchema('facets_facet');
}
public function testDescription() {
$entity = new Facet([
'description' => 'Owls',
], 'facets_facet');
$this
->assertEquals('Owls', $entity
->getDescription());
$entity = new Facet([
'description' => 'Owls',
'name' => 'owl',
], 'facets_facet');
$this
->assertEquals('owl', $entity
->getName());
}
public function testWidget() {
$entity = new Facet([], 'facets_facet');
$entity
->setWidget('links');
$manager = $entity
->getWidgetManager();
$this
->assertInstanceOf(WidgetPluginManager::class, $manager);
$config = [
'soft_limit' => 0,
'show_numbers' => FALSE,
'soft_limit_settings' => [
'show_less_label' => 'Show less',
'show_more_label' => 'Show more',
],
'show_reset_link' => FALSE,
'hide_reset_when_no_selection' => FALSE,
'reset_text' => 'Show all',
];
$this
->assertEquals([
'type' => 'links',
'config' => $config,
], $entity
->getWidget());
$this
->assertInstanceOf(LinksWidget::class, $entity
->getWidgetInstance());
$this
->assertFalse($entity
->getWidgetInstance()
->getConfiguration()['show_numbers']);
$config['show_numbers'] = TRUE;
$entity
->setWidget('links', $config);
$this
->assertEquals([
'type' => 'links',
'config' => $config,
], $entity
->getWidget());
$this
->assertInstanceOf(LinksWidget::class, $entity
->getWidgetInstance());
$this
->assertTrue($entity
->getWidgetInstance()
->getConfiguration()['show_numbers']);
}
public function testEmptyWidget() {
$entity = new Facet([], 'facets_facet');
$this
->assertNull($entity
->getWidget());
$this
->expectException(InvalidProcessorException::class);
$entity
->getWidgetInstance();
}
public function testProcessor() {
$entity = new Facet([], 'facets_facet');
$this
->assertEmpty($entity
->getProcessorConfigs());
$this
->assertEmpty($entity
->getProcessors());
$this
->assertEmpty($entity
->getProcessorsByStage(ProcessorInterface::STAGE_PRE_QUERY));
$this
->assertEmpty($entity
->getProcessorsByStage(ProcessorInterface::STAGE_POST_QUERY));
$this
->assertEmpty($entity
->getProcessorsByStage(ProcessorInterface::STAGE_BUILD));
$this
->assertEmpty($entity
->getProcessorsByStage(ProcessorInterface::STAGE_SORT));
$id = 'hide_non_narrowing_result_processor';
$config = [
'processor_id' => $id,
'weights' => [],
'settings' => [],
];
$entity
->addProcessor($config);
$this
->assertEquals([
$id => $config,
], $entity
->getProcessorConfigs());
$this
->assertNotEmpty($entity
->getProcessorsByStage(ProcessorInterface::STAGE_BUILD));
$this
->assertEmpty($entity
->getProcessorsByStage(ProcessorInterface::STAGE_SORT));
$processors = $entity
->getProcessors();
$this
->assertArrayHasKey('hide_non_narrowing_result_processor', $processors);
$this
->assertInstanceOf(HideNonNarrowingResultProcessor::class, $processors['hide_non_narrowing_result_processor']);
$entity
->removeProcessor($id);
$this
->assertEmpty($entity
->getProcessorsByStage(ProcessorInterface::STAGE_BUILD));
$this
->assertEmpty($entity
->getProcessorsByStage(ProcessorInterface::STAGE_SORT));
}
public function testGetQueryTypeWithNoFacetSource() {
$entity = new Facet([], 'facets_facet');
$this
->expectException(Exception::class);
$this
->expectExceptionMessage('No facet source defined for facet.');
$entity
->getQueryType();
}
public function testQueryOperator() {
$entity = new Facet([], 'facets_facet');
$this
->assertEquals('or', $entity
->getQueryOperator());
$entity
->setQueryOperator('and');
$this
->assertEquals('and', $entity
->getQueryOperator());
}
public function testExclude() {
$entity = new Facet([], 'facets_facet');
$this
->assertFalse($entity
->getExclude());
$entity
->setExclude(TRUE);
$this
->assertTrue($entity
->getExclude());
}
public function testWeight() {
$entity = new Facet([], 'facets_facet');
$this
->assertNull($entity
->getWeight());
$entity
->setWeight(12);
$this
->assertEquals(12, $entity
->getWeight());
}
public function testOnlyVisible() {
$entity = new Facet([], 'facets_facet');
$this
->assertNull($entity
->getOnlyVisibleWhenFacetSourceIsVisible());
$entity
->setOnlyVisibleWhenFacetSourceIsVisible(TRUE);
$this
->assertTrue($entity
->getOnlyVisibleWhenFacetSourceIsVisible());
}
public function testOnlyOneResult() {
$entity = new Facet([], 'facets_facet');
$this
->assertFalse($entity
->getShowOnlyOneResult());
$entity
->setShowOnlyOneResult(TRUE);
$this
->assertTrue($entity
->getShowOnlyOneResult());
}
public function testUrlAlias() {
$entity = new Facet([], 'facets_facet');
$this
->assertNull($entity
->getUrlAlias());
$entity
->setUrlAlias('owl');
$this
->assertEquals('owl', $entity
->getUrlAlias());
$entity = new Facet([
'url_alias' => 'llama',
], 'facets_facet');
$this
->assertEquals('llama', $entity
->getUrlAlias());
}
public function testResults() {
$entity = new Facet([], 'facets_facet');
$results = [
new Result($entity, 'llama', 'llama', 10),
new Result($entity, 'badger', 'badger', 15),
new Result($entity, 'owl', 'owl', 5),
];
$this
->assertEmpty($entity
->getResults());
$entity
->setResults($results);
$this
->assertEquals($results, $entity
->getResults());
$this
->assertEmpty($entity
->getActiveItems());
$this
->assertFalse($entity
->isActiveValue('llama'));
$entity
->setActiveItem('llama');
$this
->assertEquals([
'llama',
], $entity
->getActiveItems());
$this
->assertTrue($entity
->isActiveValue('llama'));
$this
->assertFalse($entity
->isActiveValue('owl'));
$this
->assertFalse($entity
->getResults()[0]
->isActive());
$entity
->setResults($results);
$this
->assertTrue($entity
->getResults()[0]
->isActive());
$this
->assertTrue($entity
->isActiveValue('llama'));
$this
->assertFalse($entity
->isActiveValue('badger'));
$this
->assertFalse($entity
->isActiveValue('owl'));
$entity
->setActiveItems([
'badger',
'owl',
]);
$this
->assertFalse($entity
->isActiveValue('llama'));
$this
->assertTrue($entity
->isActiveValue('badger'));
$this
->assertTrue($entity
->isActiveValue('owl'));
}
public function testFieldIdentifier() {
$entity = new Facet([], 'facets_facet');
$this
->assertEmpty($entity
->getFieldIdentifier());
$entity
->setFieldIdentifier('field_owl');
$this
->assertEquals('field_owl', $entity
->getFieldIdentifier());
$this
->assertEquals('field_owl', $entity
->getFieldAlias());
}
public function testEmptyBehavior() {
$entity = new Facet([], 'facets_facet');
$this
->assertEmpty($entity
->getEmptyBehavior());
$entity
->setEmptyBehavior([
'behavior' => 'none',
]);
$this
->assertEquals([
'behavior' => 'none',
], $entity
->getEmptyBehavior());
}
public function testHardLimit() {
$entity = new Facet([], 'facets_facet');
$this
->assertEquals(0, $entity
->getHardLimit());
$entity
->setHardLimit(50);
$this
->assertEquals(50, $entity
->getHardLimit());
}
public function testMinCount() {
$entity = new Facet([], 'facets_facet');
$this
->assertEquals(1, $entity
->getMinCount());
$entity
->setMinCount(50);
$this
->assertEquals(50, $entity
->getMinCount());
}
public function testHierarchySettings() {
$entity = Facet::create();
$entity
->setUseHierarchy(FALSE);
$this
->assertFalse($entity
->getUseHierarchy());
$entity
->setUseHierarchy(TRUE);
$this
->assertTrue($entity
->getUseHierarchy());
$entity
->setExpandHierarchy(FALSE);
$this
->assertFalse($entity
->getExpandHierarchy());
$entity
->setExpandHierarchy(TRUE);
$this
->assertTrue($entity
->getExpandHierarchy());
$entity
->setEnableParentWhenChildGetsDisabled(FALSE);
$this
->assertFalse($entity
->getEnableParentWhenChildGetsDisabled());
$entity
->setEnableParentWhenChildGetsDisabled(TRUE);
$this
->assertTrue($entity
->getEnableParentWhenChildGetsDisabled());
$manager = $entity
->getHierarchyManager();
$this
->assertInstanceOf(HierarchyPluginManager::class, $manager);
$this
->assertInstanceOf(Taxonomy::class, $entity
->getHierarchyInstance());
$this
->assertEquals([
'type' => 'taxonomy',
'config' => [],
], $entity
->getHierarchy());
}
public function testBlockCache() {
$this
->enableModules([
'system',
]);
$entity = Facet::create([
'id' => 'test_facet',
'name' => 'Test facet',
]);
$entity
->setWidget('links');
$entity
->setEmptyBehavior([
'behavior' => 'none',
]);
$block_id = 'facet_block' . PluginBase::DERIVATIVE_SEPARATOR . $entity
->id();
$this
->assertFalse($this->container
->get('plugin.manager.block')
->hasDefinition($block_id));
$entity
->save();
$this
->assertTrue($this->container
->get('plugin.manager.block')
->hasDefinition($block_id));
$entity
->delete();
$this
->assertFalse($this->container
->get('plugin.manager.block')
->hasDefinition($block_id));
}
}