entity_to_text-1.0.x-dev/tests/src/Unit/NodeToTextTest.php

tests/src/Unit/NodeToTextTest.php
<?php

namespace Drupal\Tests\entity_to_text\Unit;

use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\Field\FieldTypePluginManagerInterface;
use Drupal\Core\Render\Markup;
use Drupal\Core\Render\RendererInterface;
use Drupal\entity_to_text\Extractor\NodeToText;
use Drupal\entity_to_text\HtmlPurifier;
use Drupal\node\NodeInterface;
use Drupal\Tests\UnitTestCase;
use Prophecy\Prophet;

/**
 * Tests the Node to Text Extractor.
 *
 * @coversDefaultClass \Drupal\entity_to_text\Extractor\NodeToText
 *
 * @group entity_to_text
 *
 * @internal
 */
final class NodeToTextTest 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 field type manager to define field.
   *
   * @var \Prophecy\Prophecy\ObjectProphecy|\Drupal\Core\Field\FieldTypePluginManagerInterface
   */
  protected $fieldTypeManager;

  /**
   * The prophecy object.
   *
   * @var \Prophecy\Prophet
   */
  private $prophet;

  /**
   * The Node to Text extractor.
   *
   * @var \Drupal\entity_to_text\Extractor\NodeToText
   */
  private NodeToText $nodeToText;

  /**
   * {@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->fieldTypeManager = $this->prophet->prophesize(FieldTypePluginManagerInterface::class);

    $this->nodeToText = new NodetoText($this->htmlPurifier->reveal(), $this->renderer->reveal(), $this->fieldTypeManager->reveal());
  }

  /**
   * {@inheritdoc}
   */
  protected function tearDown(): void {
    parent::tearDown();

    $this->prophet->checkPredictions();
  }

  /**
   * @covers ::fromFieldtoText
   */
  public function testFromFieldtoTextWithoutDefinition(): void {
    // Create a test node object.
    $node = $this->prophet->prophesize(NodeInterface::class);

    self::assertEmpty($this->nodeToText->fromFieldtoText('field_foo', $node->reveal()));
  }

  /**
   * @covers ::fromFieldtoText
   */
  public function testFromFieldtoTextFieldEmpty(): void {
    $node_field_type_definition = ['default_formatter' => 'default'];
    $node_field_definition = $this->prophet->prophesize(FieldDefinitionInterface::class);
    $node_field_definition->getType()
      ->willReturn('node')
      ->shouldBeCalled();

    // Create a test node object.
    $node = $this->prophet->prophesize(NodeInterface::class);
    $node
      ->getFieldDefinition('field_foo')
      ->willReturn($node_field_definition->reveal())
      ->shouldBeCalled();

    $this->fieldTypeManager
      ->getDefinition('node')
      ->willReturn($node_field_type_definition)
      ->shouldBeCalled();

    $field = $this->prophet->prophesize(FieldItemList::class);
    $node->get('field_foo')
      ->willReturn($field->reveal())
      ->shouldBeCalled();

    $field->isEmpty()
      ->willReturn(TRUE)
      ->shouldBeCalled();

    self::assertEmpty($this->nodeToText->fromFieldtoText('field_foo', $node->reveal()));
  }

  /**
   * @covers ::fromFieldtoText
   */
  public function testFromFieldtoText(): void {
    $node_field_type_definition = ['default_formatter' => 'default'];
    $node_field_definition = $this->prophet->prophesize(FieldDefinitionInterface::class);
    $node_field_definition->getType()
      ->willReturn('node')
      ->shouldBeCalled();

    // Create a test node object.
    $node = $this->prophet->prophesize(NodeInterface::class);
    $node
      ->getFieldDefinition('field_foo')
      ->willReturn($node_field_definition->reveal())
      ->shouldBeCalled();

    $this->fieldTypeManager
      ->getDefinition('node')
      ->willReturn($node_field_type_definition)
      ->shouldBeCalled();

    $field = $this->prophet->prophesize(FieldItemList::class);
    $node->get('field_foo')
      ->willReturn($field->reveal())
      ->shouldBeCalled();

    $field->isEmpty()
      ->willReturn(FALSE)
      ->shouldBeCalled();

    $render = [];
    $field->view(['label' => 'hidden', 'type' => 'default'])
      ->willReturn($render)
      ->shouldBeCalled();

    $markup_html = ' Quisque dolor vehicula egestas morbi commodo diam   . ';
    $this->renderer
      ->renderRoot($render)
      ->willReturn($markup_html)
      ->shouldBeCalled();

    $htmlPurifier = $this->prophet->prophesize(\HTMLPurifier::class);
    $this->htmlPurifier->init()
      ->willReturn($htmlPurifier->reveal())
      ->shouldBeCalled();

    $htmlPurifier->purify($markup_html)
      ->willReturn($markup_html)
      ->shouldBeCalled();

    self::assertEquals('Quisque dolor vehicula egestas morbi commodo diam   .',
      $this->nodeToText->fromFieldtoText('field_foo', $node->reveal()));
  }

  /**
   * @covers ::fromFieldtoText
   */
  public function testFromFieldtoTextMarkupObject(): void {
    $node_field_type_definition = ['default_formatter' => 'default'];
    $node_field_definition = $this->prophet->prophesize(FieldDefinitionInterface::class);
    $node_field_definition->getType()
      ->willReturn('node')
      ->shouldBeCalled();

    // Create a test node object.
    $node = $this->prophet->prophesize(NodeInterface::class);
    $node
      ->getFieldDefinition('field_foo')
      ->willReturn($node_field_definition->reveal())
      ->shouldBeCalled();

    $this->fieldTypeManager
      ->getDefinition('node')
      ->willReturn($node_field_type_definition)
      ->shouldBeCalled();

    $field = $this->prophet->prophesize(FieldItemList::class);
    $node->get('field_foo')
      ->willReturn($field->reveal())
      ->shouldBeCalled();

    $field->isEmpty()
      ->willReturn(FALSE)
      ->shouldBeCalled();

    $render = [];
    $field->view(['label' => 'hidden', 'type' => 'default'])
      ->willReturn($render)
      ->shouldBeCalled();

    $markup = Markup::create('  Quisque dolor vehicula egestas morbi commodo diam   . ');
    $this->renderer
      ->renderRoot($render)
      ->willReturn($markup)
      ->shouldBeCalled();

    $htmlPurifier = $this->prophet->prophesize(\HTMLPurifier::class);
    $this->htmlPurifier->init()
      ->willReturn($htmlPurifier->reveal())
      ->shouldBeCalled();

    $htmlPurifier->purify($markup->__toString())
      ->willReturn('Quisque dolor vehicula egestas morbi commodo diam   .')
      ->shouldBeCalled();

    self::assertEquals('Quisque dolor vehicula egestas morbi commodo diam   .',
      $this->nodeToText->fromFieldtoText('field_foo', $node->reveal()));
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc