twig_tweak-8.x-2.8/tests/src/Kernel/UrlExtractorTest.php

tests/src/Kernel/UrlExtractorTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\twig_tweak\Kernel;

use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\File\FileUrlGeneratorInterface;
use Drupal\file\FileInterface;
use Drupal\KernelTests\KernelTestBase;
use Drupal\node\NodeInterface;
use Drupal\Tests\TestFileCreationTrait;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * A test for URL Extractor service.
 *
 * @group twig_tweak
 */
final class UrlExtractorTest extends KernelTestBase {

  use TestFileCreationTrait;

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'twig_tweak',
    'twig_tweak_test',
    'system',
    'views',
    'node',
    'block',
    'image',
    'field',
    'text',
    'media',
    'file',
    'user',
    'filter',
  ];

  /**
   * {@inheritdoc}
   */
  public function setUp(): void {
    parent::setUp();
    $this->installEntitySchema('node');
    $this->installEntitySchema('media');
    $this->installEntitySchema('user');
    $this->installEntitySchema('file');
    $this->installSchema('file', 'file_usage');
    $this->installConfig(['node', 'twig_tweak_test']);
  }

  /**
   * Test callback.
   */
  public function testUrlExtractor(): void {
    $node = $this->createNode();

    $extractor = $this->container->get('twig_tweak.url_extractor');
    $base_url = $this->container->get(FileUrlGeneratorInterface::class)->generateAbsoluteString('');

    $request = $this->container->get(RequestStack::class)->getCurrentRequest();
    $absolute_url = "{$request->getScheme()}://{$request->getHost()}/foo/bar.txt";

    $url = $extractor->extractUrl($absolute_url);
    self::assertSame('/foo/bar.txt', $url);

    $url = $extractor->extractUrl($absolute_url, FALSE);
    self::assertSame($base_url . 'foo/bar.txt', $url);

    $url = $extractor->extractUrl('foo/bar.jpg');
    self::assertSame('/foo/bar.jpg', $url);

    $url = $extractor->extractUrl('foo/bar.jpg', FALSE);
    self::assertSame($base_url . 'foo/bar.jpg', $url);

    $url = $extractor->extractUrl('');
    self::assertSame('/', $url);

    $url = $extractor->extractUrl('', FALSE);
    self::assertSame($base_url, $url);

    $url = $extractor->extractUrl($node);
    self::assertNull($url);

    $url = $extractor->extractUrl($node->get('title'));
    self::assertNull($url);

    $url = $extractor->extractUrl($node->get('field_image')[0]);
    self::assertStringEndsWith('/files/image-test.png', $url);
    self::assertStringNotContainsString($base_url, $url);

    $url = $extractor->extractUrl($node->get('field_image')[0], FALSE);
    self::assertStringStartsWith($base_url, $url);
    self::assertStringEndsWith('/files/image-test.png', $url);

    $url = $extractor->extractUrl($node->get('field_image')[1]);
    self::assertNull($url);

    $url = $extractor->extractUrl($node->get('field_image'));
    self::assertStringEndsWith('/files/image-test.png', $url);

    $url = $extractor->extractUrl($node->get('field_image')->entity);
    self::assertStringEndsWith('/files/image-test.png', $url);

    $node->get('field_image')->removeItem(0);
    $url = $extractor->extractUrl($node->get('field_image'));
    self::assertNull($url);

    $url = $extractor->extractUrl($node->get('field_media')[0]);
    self::assertStringEndsWith('/files/image-test.gif', $url);

    $url = $extractor->extractUrl($node->get('field_media')[1]);
    self::assertNull($url);

    $url = $extractor->extractUrl($node->get('field_media'));
    self::assertStringEndsWith('/files/image-test.gif', $url);

    $url = $extractor->extractUrl($node->get('field_media')->entity);
    self::assertStringEndsWith('/files/image-test.gif', $url);

    $node->get('field_media')->removeItem(0);
    $url = $extractor->extractUrl($node->get('field_media'));
    self::assertNull($url);
  }

  /**
   * {@selfdoc}
   */
  private function createNode(): NodeInterface {
    $test_files = $this->getTestFiles('image');

    $entity_type_manager = $this->container->get(EntityTypeManagerInterface::class);

    $file_storage = $entity_type_manager->getStorage('file');
    $image_file = $file_storage->create([
      'uri' => $test_files[0]->uri,
      'uuid' => 'a2cb2b6f-7bf8-4da4-9de5-316e93487518',
      'status' => FileInterface::STATUS_PERMANENT,
    ]);
    $file_storage->save($image_file);

    $media_file = $file_storage->create([
      'uri' => $test_files[2]->uri,
      'uuid' => '5dd794d0-cb75-4130-9296-838aebc1fe74',
      'status' => FileInterface::STATUS_PERMANENT,
    ]);
    $file_storage->save($media_file);

    $media_storage = $entity_type_manager->getStorage('media');
    $media = $media_storage->create([
      'bundle' => 'image',
      'name' => 'Image 1',
      'field_media_image' => ['target_id' => $media_file->id()],
    ]);
    $media_storage->save($media);

    $node_storage = $entity_type_manager->getStorage('node');
    $node_values = [
      'title' => 'Alpha',
      'type' => 'page',
      'field_image' => ['target_id' => $image_file->id()],
      'field_media' => ['target_id' => $media->id()],
    ];
    return $node_storage->create($node_values);
  }

}

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

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