entity_to_text-1.0.x-dev/modules/entity_to_text_paragraphs/tests/src/Unit/ParagraphsToTextTest.php
modules/entity_to_text_paragraphs/tests/src/Unit/ParagraphsToTextTest.php
<?php namespace Drupal\Tests\entity_to_text_paragraphs\Unit; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\EntityViewBuilderInterface; use Drupal\Core\Render\Markup; use Drupal\Core\Render\RendererInterface; use Drupal\entity_reference_revisions\EntityReferenceRevisionsFieldItemList; use Drupal\entity_to_text\HtmlPurifier; use Drupal\entity_to_text_paragraphs\Extractor\ParagraphsToText; use Drupal\paragraphs\Entity\Paragraph; use Drupal\Tests\UnitTestCase; use Prophecy\Prophecy\ObjectProphecy; use Prophecy\Prophet; /** * Tests the Paragraphs to Text Extractor. * * @coversDefaultClass \Drupal\entity_to_text_paragraphs\Extractor\ParagraphsToText * * @group entity_to_text * @group entity_to_text_paragraphs * * @requires module paragraphs * * @internal */ final class ParagraphsToTextTest extends UnitTestCase { /** * A mocked instance of the HTML Purifier service. * * @var \Prophecy\Prophecy\ObjectProphecy|\Drupal\entity_to_text\HtmlPurifier */ protected $htmlPurifier; /** * A mocked instance of the renderer service. * * @var \Prophecy\Prophecy\ObjectProphecy|\Drupal\Core\Render\RendererInterface */ protected $renderer; /** * A mocked instance of the entity type manager service. * * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\Prophecy\Prophecy\ObjectProphecy */ private EntityTypeManagerInterface|ObjectProphecy $entityTypeManager; /** * The prophecy object. * * @var \Prophecy\Prophet */ private $prophet; /** * The Paragraph to Text extractor. * * @var \Drupal\entity_to_text_paragraphs\Extractor\ParagraphsToText */ private ParagraphsToText $paragraphsToText; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->prophet = new Prophet(); $this->htmlPurifier = $this->prophet->prophesize(HtmlPurifier::class); $this->renderer = $this->prophet->prophesize(RendererInterface::class); $this->entityTypeManager = $this->prophet->prophesize(EntityTypeManagerInterface::class); $this->paragraphsToText = new ParagraphsToText($this->htmlPurifier->reveal(), $this->renderer->reveal(), $this->entityTypeManager->reveal()); } /** * {@inheritdoc} */ protected function tearDown(): void { parent::tearDown(); $this->prophet->checkPredictions(); } /** * @covers ::fromParagraphToText() */ public function testFromParagraphToTextEmpty(): void { // Create an empty test Paragraphs collection object list. $entityReferences = $this->prophet->prophesize(EntityReferenceRevisionsFieldItemList::class); $entityReferences->getIterator()->willReturn(new \ArrayIterator([]))->shouldBeCalled(); self::assertEquals([], $this->paragraphsToText->fromParagraphToText($entityReferences->reveal())); } /** * @covers ::fromParagraphToText() */ public function testFromParagraphToText(): void { $paragraph1 = $this->prophet->prophesize(Paragraph::class); $paragraph1->getEntityTypeId()->willReturn('foo')->shouldBeCalled(); $paragraph2 = $this->prophet->prophesize(Paragraph::class); $paragraph2->getEntityTypeId()->willReturn('bar')->shouldBeCalled(); $fieldRevision1 = new class($paragraph1->reveal()) { /** * The related paragraph entity. * * @var \Drupal\paragraphs\Entity\Paragraph */ public $entity; /** * Construct a new anonymous mimic EntityReferenceRevisionsItem. */ public function __construct($entity) { $this->entity = $entity; } /** * Mock of EntityReferenceRevisionsItem::getLangcode. */ public function getLangcode(): string { return 'en'; } }; $fieldRevision2 = new class($paragraph2->reveal()) { /** * The related paragraph entity. * * @var \Drupal\paragraphs\Entity\Paragraph */ public $entity; /** * Construct a new anonymous mimic EntityReferenceRevisionsItem. */ public function __construct($entity) { $this->entity = $entity; } /** * Construct a new anonymous mimic EntityReferenceRevisionsItem. */ public function getLangcode(): string { return 'en'; } }; // Create a test Paragraphs collection object list. $entityReferences = $this->prophet->prophesize(EntityReferenceRevisionsFieldItemList::class); $entityReferences->getIterator() ->willReturn(new \ArrayIterator([ $fieldRevision1, $fieldRevision2, ])) ->shouldBeCalled(); $view_builder_interface = $this->prophet->prophesize(EntityViewBuilderInterface::class); $this->entityTypeManager->getViewBuilder('foo') ->willReturn($view_builder_interface->reveal()) ->shouldBeCalled(); $this->entityTypeManager->getViewBuilder('bar') ->willReturn($view_builder_interface->reveal()) ->shouldBeCalled(); $render1 = ['markup' => 'paragraph1']; $view_builder_interface ->view($paragraph1, 'full', 'en') ->willReturn($render1) ->shouldBeCalled(); $render2 = ['markup' => 'paragraph2']; $view_builder_interface ->view($paragraph2, 'full', 'en') ->willReturn($render2) ->shouldBeCalled(); $markup1 = Markup::create(' Quisque dolor vehicula egestas morbi commodo diam . '); $this->renderer ->renderRoot($render1) ->willReturn($markup1) ->shouldBeCalled(); $markup2 = Markup::create('Facilisi risus. '); $this->renderer ->renderRoot($render2) ->willReturn($markup2) ->shouldBeCalled(); $htmlPurifier = $this->prophet->prophesize(\HTMLPurifier::class); $this->htmlPurifier->init() ->willReturn($htmlPurifier) ->shouldBeCalled(); $htmlPurifier->purify(' Quisque dolor vehicula egestas morbi commodo diam . ') ->willReturn(' Quisque dolor vehicula egestas morbi commodo diam . ') ->shouldBeCalled(); $htmlPurifier->purify('Facilisi risus. ') ->willReturn('Facilisi risus. ') ->shouldBeCalled(); self::assertEquals([ 'Quisque dolor vehicula egestas morbi commodo diam .', 'Facilisi risus.', ], $this->paragraphsToText->fromParagraphToText($entityReferences->reveal())); } }