diff --git a/src/Plugin/facets/processor/TranslateNodeProcessor.php b/src/Plugin/facets/processor/TranslateNodeProcessor.php new file mode 100644 index 0000000..b8006f2 --- /dev/null +++ b/src/Plugin/facets/processor/TranslateNodeProcessor.php @@ -0,0 +1,43 @@ +getCurrentLanguage(); + + /** @var \Drupal\facets\Result\ResultInterface $result */ + foreach ($results as $result) { + /** @var \Drupal\node\Entity\Node $node */ + $node = Node::load($result->getRawValue()); + + $result->setDisplayValue($node->getTitle()); + if ($node->hasTranslation($language_interface->getId())) { + $node_trans = $node->getTranslation($language_interface->getId()); + $result->setDisplayValue($node_trans->getTitle()); + } + } + + return $results; + } + +} diff --git a/tests/src/Unit/Plugin/processor/TranslateNodeProcessorTest.php b/tests/src/Unit/Plugin/processor/TranslateNodeProcessorTest.php new file mode 100644 index 0000000..b40eba3 --- /dev/null +++ b/tests/src/Unit/Plugin/processor/TranslateNodeProcessorTest.php @@ -0,0 +1,110 @@ +processor = new TranslateNodeProcessor([], 'translate_node', []); + + $this->createMocks(); + } + + /** + * Tests that results were correctly changed. + */ + public function testResultsChanged() { + /** @var \Drupal\facets\Result\ResultInterface[] $original_results */ + $original_results = [ + new Result(2, 2, 6), + ]; + + $facet = new Facet([], 'facet'); + $facet->setResults($original_results); + + $expected_results = [ + ['nid' => 2, 'title' => 'shaken not stirred'] + ]; + + foreach ($expected_results as $key => $expected) { + $this->assertEquals($expected['nid'], $original_results[$key]->getRawValue()); + $this->assertEquals($expected['nid'], $original_results[$key]->getDisplayValue()); + } + + /** @var \Drupal\facets\Result\ResultInterface[] $filtered_results */ + $filtered_results = $this->processor->build($facet, $original_results); + + foreach ($expected_results as $key => $expected) { + $this->assertEquals($expected['nid'], $filtered_results[$key]->getRawValue()); + $this->assertEquals($expected['title'], $filtered_results[$key]->getDisplayValue()); + } + } + + /** + * Creates and sets up the container to be used in tests. + */ + protected function createMocks() { + $node = $this->getMockBuilder(Node::class) + ->disableOriginalConstructor() + ->getMock(); + $node->expects($this->any()) + ->method('getTitle') + ->willReturn('shaken not stirred'); + + $node_storage = $this->getMock(EntityStorageInterface::class); + $node->expects($this->any()) + ->method('load') + ->willReturn($node); + $entity_manager = $this->getMock(EntityManagerInterface::class); + $entity_manager->expects($this->any()) + ->method('getStorage') + ->willReturn($node_storage); + + $language_manager = $this->getMock(LanguageManagerInterface::class); + $language = new Language(['langcode' => 'en']); + $language_manager->expects($this->any()) + ->method('getCurrentLanguage') + ->will($this->returnValue($language)); + + $container = new ContainerBuilder(); + $container->set('entity.manager', $entity_manager); + $container->set('language_manager', $language_manager); + \Drupal::setContainer($container); + } + + /** + * Tests configuration. + */ + public function testConfiguration() { + $config = $this->processor->defaultConfiguration(); + $this->assertEquals([], $config); + } + +}