tester-1.0.0/tests/src/Unit/Plugin/Tester/NodeTesterTest.php

tests/src/Unit/Plugin/Tester/NodeTesterTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\tester\Unit\Plugin\Tester;

use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\node\NodeInterface;
use Drupal\node\NodeTypeInterface;
use Drupal\tester\Plugin\Tester\NodeTester;
use Drupal\Tests\UnitTestCase;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Tests the NodeTester plugin.
 *
 * @group tester
 * @coversDefaultClass \Drupal\tester\Plugin\Tester\NodeTester
 */
class NodeTesterTest extends UnitTestCase {

  /**
   * The node tester plugin.
   *
   * @var \Drupal\tester\Plugin\Tester\NodeTester
   */
  protected $nodeTester;

  /**
   * Mock entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $entityTypeManager;

  /**
   * Mock node storage.
   *
   * @var \Drupal\Core\Entity\EntityStorageInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $nodeStorage;

  /**
   * Mock node type storage.
   *
   * @var \Drupal\Core\Entity\EntityStorageInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $nodeTypeStorage;

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

    $this->entityTypeManager = $this->createMock(EntityTypeManagerInterface::class);
    $this->nodeStorage = $this->createMock(EntityStorageInterface::class);
    $this->nodeTypeStorage = $this->createMock(EntityStorageInterface::class);

    $this->entityTypeManager
      ->method('getStorage')
      ->willReturnMap([
        ['node_type', $this->nodeTypeStorage],
        ['node', $this->nodeStorage],
      ]);

    $configuration = [];
    $plugin_id = 'node';
    $plugin_definition = [];

    $this->nodeTester = new NodeTester(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $this->entityTypeManager
    );
  }

  /**
   * Tests the create method.
   *
   * @covers ::create
   */
  public function testCreate(): void {
    $container = $this->createMock(ContainerInterface::class);
    $container
      ->method('get')
      ->with('entity_type.manager')
      ->willReturn($this->entityTypeManager);

    $instance = NodeTester::create(
      $container,
      [],
      'node',
      []
    );

    $this->assertInstanceOf(NodeTester::class, $instance);
  }

  /**
   * Tests urls method with no limit.
   *
   * @covers ::urls
   */
  public function testUrlsWithNoLimit(): void {
    $options = ['limit' => 0];

    // Mock node types.
    $nodeType1 = $this->createMock(NodeTypeInterface::class);
    $nodeType1->method('id')->willReturn('article');

    $nodeType2 = $this->createMock(NodeTypeInterface::class);
    $nodeType2->method('id')->willReturn('page');

    $nodeTypes = ['article' => $nodeType1, 'page' => $nodeType2];

    $this->nodeTypeStorage
      ->method('loadMultiple')
      ->willReturn($nodeTypes);

    // Mock nodes.
    $node1 = $this->createMock(NodeInterface::class);
    $node1->method('toUrl')->willReturn($this->getMockUrl('/node/1'));

    $node2 = $this->createMock(NodeInterface::class);
    $node2->method('toUrl')->willReturn($this->getMockUrl('/node/2'));

    $nodes = [1 => $node1, 2 => $node2];

    $this->nodeStorage
      ->method('loadMultiple')
      ->willReturn($nodes);

    $urls = $this->nodeTester->urls($options);

    $expected = ['/node/add/article', '/node/add/page', '/node/1', '/node/2'];
    $this->assertEquals($expected, $urls);
  }

  /**
   * Tests urls method with limit.
   *
   * @covers ::urls
   */
  public function testUrlsWithLimit(): void {
    $options = ['limit' => 2];

    // Mock node types.
    $nodeType1 = $this->createMock(NodeTypeInterface::class);
    $nodeType1->method('id')->willReturn('article');

    $nodeType2 = $this->createMock(NodeTypeInterface::class);
    $nodeType2->method('id')->willReturn('page');

    $nodeTypes = ['article' => $nodeType1, 'page' => $nodeType2];

    $this->nodeTypeStorage
      ->method('loadMultiple')
      ->willReturn($nodeTypes);

    // Mock nodes.
    $node1 = $this->createMock(NodeInterface::class);
    $node1->method('toUrl')->willReturn($this->getMockUrl('/node/1'));

    $node2 = $this->createMock(NodeInterface::class);
    $node2->method('toUrl')->willReturn($this->getMockUrl('/node/2'));

    $nodes = [1 => $node1, 2 => $node2];

    $this->nodeStorage
      ->method('loadMultiple')
      ->willReturn($nodes);

    $urls = $this->nodeTester->urls($options);

    // Should be limited to 2 URLs.
    $expected = ['/node/add/article', '/node/add/page'];
    $this->assertEquals($expected, $urls);
  }

  /**
   * Tests dependencies method.
   *
   * @covers ::dependencies
   */
  public function testDependencies(): void {
    $dependencies = $this->nodeTester->dependencies();

    $expected = [
      'modules' => ['node', 'user'],
    ];

    $this->assertEquals($expected, $dependencies);
  }

  /**
   * Helper to create a mock URL.
   *
   * @param string $path
   *   The URL path.
   *
   * @return \Drupal\Core\Url|\PHPUnit\Framework\MockObject\MockObject
   *   Mock URL object.
   */
  protected function getMockUrl(string $path) {
    $url = $this->createMock('\Drupal\Core\Url');
    $url->method('toString')->willReturn($path);
    return $url;
  }

}

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

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