You are here

class ComputedFileUrlTest in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/file/tests/src/Kernel/ComputedFileUrlTest.php \Drupal\Tests\file\Kernel\ComputedFileUrlTest
  2. 9 core/modules/file/tests/src/Kernel/ComputedFileUrlTest.php \Drupal\Tests\file\Kernel\ComputedFileUrlTest

@coversDefaultClass \Drupal\file\ComputedFileUrl

@group file

Hierarchy

Expanded class hierarchy of ComputedFileUrlTest

File

core/modules/file/tests/src/Kernel/ComputedFileUrlTest.php, line 16

Namespace

Drupal\Tests\file\Kernel
View source
class ComputedFileUrlTest extends KernelTestBase {

  /**
   * The test URL to use.
   *
   * @var string
   */
  protected $testUrl = 'public://druplicon.txt';

  /**
   * @covers ::getValue
   */
  public function testGetValue() {
    $entity = $this
      ->prophesize(FileInterface::class);
    $entity
      ->getFileUri()
      ->willReturn($this->testUrl);
    $parent = $this
      ->prophesize(FieldItemInterface::class);
    $parent
      ->getEntity()
      ->shouldBeCalledTimes(2)
      ->willReturn($entity
      ->reveal());
    $definition = $this
      ->prophesize(DataDefinitionInterface::class);
    $typed_data = new ComputedFileUrl($definition
      ->reveal(), $this
      ->randomMachineName(), $parent
      ->reveal());
    $expected = base_path() . $this->siteDirectory . '/files/druplicon.txt';
    $this
      ->assertSame($expected, $typed_data
      ->getValue());

    // Do this a second time to confirm the same value is returned but the value
    // isn't retrieved from the parent entity again.
    $this
      ->assertSame($expected, $typed_data
      ->getValue());
  }

  /**
   * @covers ::setValue
   */
  public function testSetValue() {
    $name = $this
      ->randomMachineName();
    $parent = $this
      ->prophesize(FieldItemInterface::class);
    $parent
      ->onChange($name)
      ->shouldBeCalled();
    $definition = $this
      ->prophesize(DataDefinitionInterface::class);
    $typed_data = new ComputedFileUrl($definition
      ->reveal(), $name, $parent
      ->reveal());

    // Setting the value explicitly should mean the parent entity is never
    // called into.
    $typed_data
      ->setValue($this->testUrl);
    $this
      ->assertSame($this->testUrl, $typed_data
      ->getValue());

    // Do this a second time to confirm the same value is returned but the value
    // isn't retrieved from the parent entity again.
    $this
      ->assertSame($this->testUrl, $typed_data
      ->getValue());
  }

  /**
   * @covers ::setValue
   */
  public function testSetValueNoNotify() {
    $name = $this
      ->randomMachineName();
    $parent = $this
      ->prophesize(FieldItemInterface::class);
    $parent
      ->onChange($name)
      ->shouldNotBeCalled();
    $definition = $this
      ->prophesize(DataDefinitionInterface::class);
    $typed_data = new ComputedFileUrl($definition
      ->reveal(), $name, $parent
      ->reveal());

    // Setting the value should explicitly should mean the parent entity is
    // never called into.
    $typed_data
      ->setValue($this->testUrl, FALSE);
    $this
      ->assertSame($this->testUrl, $typed_data
      ->getValue());
  }

}

Members