EntityFieldBlockTest.php

Same filename in other branches
  1. 8.x-3.x modules/ctools_block/tests/src/Functional/EntityFieldBlockTest.php

Namespace

Drupal\Tests\ctools_block\Functional

File

modules/ctools_block/tests/src/Functional/EntityFieldBlockTest.php

View source
<?php

namespace Drupal\Tests\ctools_block\Functional;

use Drupal\Tests\BrowserTestBase;

/**
 * Tests the entity field block.
 *
 * @group ctools_block
 */
class EntityFieldBlockTest extends BrowserTestBase {
    
    /**
     * {@inheritdoc}
     */
    protected static $modules = [
        'block',
        'ctools_block',
        'ctools_block_field_test',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected $defaultTheme = 'stark';
    
    /**
     * Tests using the node body field in a block.
     */
    public function testBodyField() {
        $block = $this->drupalPlaceBlock('entity_field:node:body', [
            'formatter' => [
                'type' => 'text_default',
            ],
            'context_mapping' => [
                'entity' => '@node.node_route_context:node',
            ],
        ]);
        $node = $this->drupalCreateNode([
            'type' => 'ctools_block_field_test',
        ]);
        $this->drupalGet('node/' . $node->id());
        $assert = $this->assertSession();
        $assert->pageTextContains($block->label());
        $assert->pageTextContains($node->body->value);
        $node->set('body', NULL)
            ->save();
        $this->getSession()
            ->reload();
        // The block should not appear if there is no value in the field.
        $assert->pageTextNotContains($block->label());
    }
    
    /**
     * Tests that empty image fields will still render their default value.
     */
    public function testEmptyImageField() {
        $entityTypeManager = $this->container
            ->get('entity_type.manager');
        $source = $this->container
            ->get('module_handler')
            ->getModule('image')
            ->getPath() . '/sample.png';
        
        /** @var \Drupal\Core\File\FileSystemInterface $file_system */
        $file_system = $this->container
            ->get('file_system');
        $file_system->copy($source, 'public://sample.png');
        
        /** @var \Drupal\file\FileInterface $file */
        $file = $entityTypeManager->getStorage('file')
            ->create([
            'uri' => 'public://sample.png',
        ]);
        $file->save();
        
        /** @var \Drupal\field\FieldConfigInterface $field */
        $field = $entityTypeManager->getStorage('field_config')
            ->load('node.ctools_block_field_test.field_image');
        $settings = $field->getSettings();
        $settings['default_image']['uuid'] = $file->uuid();
        $field->set('settings', $settings)
            ->save();
        $this->drupalPlaceBlock('entity_field:node:field_image', [
            'formatter' => [
                'type' => 'image_image',
            ],
            'context_mapping' => [
                'entity' => '@node.node_route_context:node',
            ],
        ]);
        $node = $this->drupalCreateNode([
            'type' => 'ctools_block_field_test',
        ]);
        $this->drupalGet('node/' . $node->id());
        $url = $file->getFileUri();
        $url = $this->container
            ->get('file_url_generator')
            ->generateAbsoluteString($url);
        $url = $this->container
            ->get('file_url_generator')
            ->transformRelative($url);
        $this->assertSession()
            ->responseContains('src="' . $url . '"');
    }
    
    /**
     * Tests using the node uid base field in a block.
     */
    public function testNodeBaseFields() {
        $block = $this->drupalPlaceBlock('entity_field:node:title', [
            'formatter' => [
                'type' => 'string',
            ],
            'context_mapping' => [
                'entity' => '@node.node_route_context:node',
            ],
        ]);
        $node = $this->drupalCreateNode([
            'type' => 'ctools_block_field_test',
            'uid' => 1,
        ]);
        $this->drupalGet('node/' . $node->id());
        $assert = $this->assertSession();
        $assert->pageTextContains($block->label());
        $assert->pageTextContains($node->getTitle());
    }
    
    /**
     * Tests that we are setting the render cache metadata correctly.
     */
    public function testRenderCache() {
        $this->drupalPlaceBlock('entity_field:node:body', [
            'formatter' => [
                'type' => 'text_default',
            ],
            'context_mapping' => [
                'entity' => '@node.node_route_context:node',
            ],
        ]);
        $a = $this->drupalCreateNode([
            'type' => 'ctools_block_field_test',
        ]);
        $b = $this->drupalCreateNode([
            'type' => 'ctools_block_field_test',
        ]);
        $assert = $this->assertSession();
        $this->drupalGet('node/' . $a->id());
        $assert->pageTextContains($a->body->value);
        $this->drupalGet('node/' . $b->id());
        $assert->pageTextNotContains($a->body->value);
        $assert->pageTextContains($b->body->value);
        $text = 'This is my text. Are you not entertained?';
        $a->body->value = $text;
        $a->save();
        $this->drupalGet('node/' . $a->id());
        $assert->pageTextContains($text);
    }

}

Classes

Title Deprecated Summary
EntityFieldBlockTest Tests the entity field block.