diff --git a/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php b/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php index 7bb815e..db8ba5c 100644 --- a/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php +++ b/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php @@ -358,7 +358,7 @@ public function calculateDependencies() { /** * {@inheritdoc} */ - public function getFieldDefinitions() { + public function getDataDefinitions() { // Get and return an array field definitions. } diff --git a/src/FacetSource/FacetSourcePluginBase.php b/src/FacetSource/FacetSourcePluginBase.php index f64f021..2d24cb5 100644 --- a/src/FacetSource/FacetSourcePluginBase.php +++ b/src/FacetSource/FacetSourcePluginBase.php @@ -150,9 +150,10 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s /** * {@inheritdoc} */ - public function getFieldDefinition($field_name) { - if (isset($this->getFieldDefinitions()[$field_name])) { - return $this->getFieldDefinitions()[$field_name]; + public function getDataDefinition($field_name) { + $dataDefinitions = $this->getDataDefinitions(); + if (isset($dataDefinitions[$field_name])) { + return $dataDefinitions[$field_name]; } throw new Exception("Field with name {$field_name} does not have a definition"); diff --git a/src/FacetSource/FacetSourcePluginInterface.php b/src/FacetSource/FacetSourcePluginInterface.php index 1f52f2f..9c3cc86 100644 --- a/src/FacetSource/FacetSourcePluginInterface.php +++ b/src/FacetSource/FacetSourcePluginInterface.php @@ -103,13 +103,13 @@ public function getSearchKeys(); * * @return \Drupal\Core\TypedData\DataDefinitionInterface[] */ - public function getFieldDefinitions(); + public function getDataDefinitions(); /** * Returns one defined field from the facet source. * * @return \Drupal\Core\TypedData\DataDefinitionInterface */ - public function getFieldDefinition($field_name); + public function getDataDefinition($field_name); } diff --git a/src/Plugin/facets/facet_source/SearchApiDisplay.php b/src/Plugin/facets/facet_source/SearchApiDisplay.php index 57fd912..c6f395f 100644 --- a/src/Plugin/facets/facet_source/SearchApiDisplay.php +++ b/src/Plugin/facets/facet_source/SearchApiDisplay.php @@ -323,7 +323,7 @@ public function getDisplay() { /** * {@inheritdoc} */ - public function getFieldDefinitions() { + public function getDataDefinitions() { return array_map(function ($item) { /** @var \Drupal\search_api\Item\FieldInterface $item */ return $item->getDataDefinition(); diff --git a/src/Plugin/facets/processor/TranslateEntityProcessor.php b/src/Plugin/facets/processor/TranslateEntityProcessor.php index 410f302..dd48d6c 100644 --- a/src/Plugin/facets/processor/TranslateEntityProcessor.php +++ b/src/Plugin/facets/processor/TranslateEntityProcessor.php @@ -83,7 +83,7 @@ public function build(FacetInterface $facet, array $results) { /** @var \Drupal\Core\TypedData\DataDefinitionInterface $field_definition */ $field_definition = $facet->getFacetSource() - ->getFieldDefinition($facet->getFieldIdentifier()); + ->getDataDefinition($facet->getFieldIdentifier()); if ($field_definition->getPropertyDefinition('entity') === NULL) { throw new InvalidProcessorException("Field doesn't have an entity definition, so this processor doesn't work."); } diff --git a/tests/src/Kernel/Entity/FacetFacetSourceTest.php b/tests/src/Kernel/Entity/FacetFacetSourceTest.php index 004a251..feb62d2 100644 --- a/tests/src/Kernel/Entity/FacetFacetSourceTest.php +++ b/tests/src/Kernel/Entity/FacetFacetSourceTest.php @@ -2,10 +2,12 @@ namespace Drupal\Tests\facets\Kernel\Entity; +use Drupal\Core\TypedData\DataDefinitionInterface; use Drupal\facets\Entity\Facet; use Drupal\facets\FacetSourceInterface; use Drupal\facets\Plugin\facets\facet_source\SearchApiDisplay; use Drupal\KernelTests\Core\Entity\EntityKernelTestBase; +use Drupal\facets\Exception\Exception; /** * Class FacetFacetSourceTest. @@ -129,4 +131,29 @@ public function testQueryType() { $this->assertEquals('search_api_string', $aa); } + /** + * Test the data definitions. + * + * @covers \Drupal\facets\FacetSource\FacetSourcePluginInterface::getDataDefinitions + * @covers \Drupal\facets\FacetSource\FacetSourcePluginInterface::getDataDefinition + */ + public function testDataDefinitions() { + // Create and configure facet. + $entity = new Facet([], 'facets_facet'); + $display_name = 'search_api:views_page__search_api_test_view__page_1'; + $entity->setFacetSourceId($display_name); + + $dataDefinitions = $entity->getFacetSource()->getDataDefinitions(); + $this->assertInternalType('array', $dataDefinitions); + $this->assertArrayHasKey('name', $dataDefinitions); + $this->assertArrayHasKey('type', $dataDefinitions); + $this->assertArrayHasKey('category', $dataDefinitions); + + $this->assertInstanceOf(DataDefinitionInterface::class, $entity->getFacetSource()->getDataDefinition('id')); + + // When giving a field that doesn't exist, we should throw an error. + $this->setExpectedException(Exception::class); + $entity->getFacetSource()->getDataDefinition('llama'); + } + } diff --git a/tests/src/Unit/Plugin/processor/TranslateEntityProcessorTest.php b/tests/src/Unit/Plugin/processor/TranslateEntityProcessorTest.php index 373c3f0..4670b03 100644 --- a/tests/src/Unit/Plugin/processor/TranslateEntityProcessorTest.php +++ b/tests/src/Unit/Plugin/processor/TranslateEntityProcessorTest.php @@ -75,25 +75,13 @@ protected function setUp() { ->method('getPropertyDefinition') ->willReturn($property_definition); - // Add the typed data definition to the search api field. - $field = $this->getMock(FieldInterface::class); - $field->expects($this->any()) - ->method('getDataDefinition') - ->willReturn($data_definition); - - // Add the search api field to the index. - $index = $this->getMock(IndexInterface::class); - $index->expects($this->any()) - ->method('getField') - ->willReturn($field); - // Create a search api based facet source and link the index to it. $facet_source = $this->getMockBuilder(SearchApiDisplay::class) ->disableOriginalConstructor() ->getMock(); $facet_source->expects($this->any()) - ->method('getIndex') - ->willReturn($index); + ->method('getDataDefinition') + ->willReturn($data_definition); // Create the actual facet. $this->facet = $this->getMockBuilder(Facet::class)