Compare commits

...

6 Commits
3.x ... 3.1.x

  1. 12
      src/TwigTweakExtension.php
  2. 5
      src/View/BlockViewBuilder.php
  3. 2
      src/View/MenuViewBuilder.php
  4. 45
      tests/src/Kernel/AbstractTestCase.php
  5. 15
      tests/src/Kernel/BlockViewBuilderTest.php
  6. 5
      tests/src/Kernel/CacheMetadataExtractorTest.php
  7. 11
      tests/src/Kernel/EntityFormViewBuilderTest.php
  8. 11
      tests/src/Kernel/EntityViewBuilderTest.php
  9. 9
      tests/src/Kernel/FieldViewBuilderTest.php
  10. 13
      tests/src/Kernel/ImageViewBuilderTest.php
  11. 9
      tests/src/Kernel/RegionViewBuilderTest.php

12
src/TwigTweakExtension.php

@ -192,7 +192,7 @@ class TwigTweakExtension extends AbstractExtension {
/**
* Returns the render array for a single entity field.
*/
public static function drupalField(string $field_name, string $entity_type, string $id, string $view_mode = 'full', string $langcode = NULL, bool $check_access = TRUE): array {
public static function drupalField(string $field_name, string $entity_type, string $id, $view_mode = 'full', string $langcode = NULL, bool $check_access = TRUE): array {
$entity = \Drupal::entityTypeManager()->getStorage($entity_type)->load($id);
if ($entity) {
return \Drupal::service('twig_tweak.field_view_builder')
@ -312,12 +312,14 @@ class TwigTweakExtension extends AbstractExtension {
/**
* Returns a title for the current route.
*
* @todo Test it with NullRouteMatch
*/
public static function drupalTitle(): array {
$title = \Drupal::service('title_resolver')->getTitle(
\Drupal::request(),
\Drupal::routeMatch()->getRouteObject()
);
$title = NULL;
if ($route = \Drupal::routeMatch()->getRouteObject()) {
$title = \Drupal::service('title_resolver')->getTitle(\Drupal::request(), $route);
}
$build['#markup'] = render($title);
$build['#cache']['contexts'] = ['url'];
return $build;

5
src/View/BlockViewBuilder.php

@ -135,8 +135,9 @@ class BlockViewBuilder {
if ($block_plugin instanceof TitleBlockPluginInterface) {
$build['content']['#cache']['contexts'][] = 'url';
}
if ($wrapper && !Element::isEmpty($build['content'])) {
// Some blocks returns NULL instead of array when empty.
// @see https://www.drupal.org/project/drupal/issues/3212354
if ($wrapper && is_array($build['content']) && !Element::isEmpty($build['content'])) {
$build += [
'#theme' => 'block',
'#id' => $configuration['id'] ?? NULL,

2
src/View/MenuViewBuilder.php

@ -76,6 +76,8 @@ class MenuViewBuilder {
];
}
$build['#cache']['contexts'][] = 'route.menu_active_trails:' . $menu_name;
return $build;
}

45
tests/src/Kernel/AbstractTestCase.php

@ -0,0 +1,45 @@
<?php
namespace Drupal\Tests\twig_tweak\Kernel;
use Drupal\KernelTests\KernelTestBase;
use PHPUnit\Framework\Assert as PHPUnitAssert;
/**
* A base class for Twig Tweak kernel tests.
*/
abstract class AbstractTestCase extends KernelTestBase {
/**
* Asserts cache metadata.
*/
protected static function assertCache(array $expected_cache, array $actual_cache): void {
self::sortCache($expected_cache);
self::sortCache($actual_cache);
PHPUnitAssert::assertSame($expected_cache, $actual_cache);
}
/**
* Asserts render array.
*/
protected static function assertRenderArray(array $expected_build, array $actual_build): void {
self::sortCache($expected_build['#cache']);
self::sortCache($actual_build['#cache']);
PHPUnitAssert::assertSame($expected_build, $actual_build);
}
/**
* Sort cache metadata.
*
* @see https://www.drupal.org/node/3230171
*/
private static function sortCache(array &$cache): void {
if (\array_key_exists('tags', $cache)) {
sort($cache['tags']);
}
if (\array_key_exists('contexts', $cache)) {
sort($cache['contexts']);
}
}
}

15
tests/src/Kernel/BlockViewBuilderTest.php

@ -54,8 +54,8 @@ final class BlockViewBuilderTest extends KernelTestBase {
'#configuration' => [
'id' => 'twig_tweak_test_foo',
'label' => '',
'provider' => 'twig_tweak_test',
'label_display' => 'visible',
'provider' => 'twig_tweak_test',
'content' => 'Foo',
],
'#plugin_id' => 'twig_tweak_test_foo',
@ -73,6 +73,19 @@ final class BlockViewBuilderTest extends KernelTestBase {
],
],
];
// @todo Remove this once we drop support for Drupal 9.2.
// @see https://www.drupal.org/node/3230199
if (\version_compare(\Drupal::VERSION, '9.3.0-dev', '<')) {
$expected_build['#configuration'] = [
'id' => 'twig_tweak_test_foo',
'label' => '',
'provider' => 'twig_tweak_test',
'label_display' => 'visible',
'content' => 'Foo',
];
}
self::assertSame($expected_build, $build);
self::assertSame('<div id="foo">Foo</div>', $this->renderPlain($build));

5
tests/src/Kernel/CacheMetadataExtractorTest.php

@ -3,14 +3,13 @@
namespace Drupal\Tests\twig_tweak\Kernel;
use Drupal\Core\Cache\CacheableMetadata;
use Drupal\KernelTests\KernelTestBase;
/**
* A test for Cache Metadata Extractor service.
*
* @group twig_tweak
*/
final class CacheMetadataExtractorTest extends KernelTestBase {
final class CacheMetadataExtractorTest extends AbstractTestCase {
/**
* {@inheritdoc}
@ -88,7 +87,7 @@ final class CacheMetadataExtractorTest extends KernelTestBase {
'max-age' => 10,
],
];
self::assertSame($expected_build, $build);
self::assertRenderArray($expected_build, $build);
// -- Wrong type.
self::expectErrorMessage('The input should be either instance of Drupal\Core\Cache\CacheableDependencyInterface or array. stdClass was given.');

11
tests/src/Kernel/EntityFormViewBuilderTest.php

@ -3,7 +3,6 @@
namespace Drupal\Tests\twig_tweak\Kernel;
use Drupal\Core\Cache\Cache;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;
@ -13,7 +12,7 @@ use Drupal\node\Entity\NodeType;
*
* @group twig_tweak
*/
final class EntityFormViewBuilderTest extends KernelTestBase {
final class EntityFormViewBuilderTest extends AbstractTestCase {
use UserCreationTrait;
@ -47,7 +46,7 @@ final class EntityFormViewBuilderTest extends KernelTestBase {
/**
* Test callback.
*/
public function testEntityViewBuilder(): void {
public function testEntityFormViewBuilder(): void {
$view_builder = $this->container->get('twig_tweak.entity_form_view_builder');
@ -82,7 +81,7 @@ final class EntityFormViewBuilderTest extends KernelTestBase {
],
'max-age' => 50,
];
self::assertSame($expected_cache, $build['#cache']);
self::assertCache($expected_cache, $build['#cache']);
self::assertStringContainsString('<form class="node-article-form node-form" ', $this->renderPlain($build));
// -- Private node with access check.
@ -100,7 +99,7 @@ final class EntityFormViewBuilderTest extends KernelTestBase {
],
'max-age' => 50,
];
self::assertSame($expected_cache, $build['#cache']);
self::assertCache($expected_cache, $build['#cache']);
self::assertSame('', $this->renderPlain($build));
// -- Private node without access check.
@ -117,7 +116,7 @@ final class EntityFormViewBuilderTest extends KernelTestBase {
],
'max-age' => Cache::PERMANENT,
];
self::assertSame($expected_cache, $build['#cache']);
self::assertCache($expected_cache, $build['#cache']);
self::assertStringContainsString('<form class="node-article-form node-form" ', $this->renderPlain($build));
}

11
tests/src/Kernel/EntityViewBuilderTest.php

@ -3,7 +3,6 @@
namespace Drupal\Tests\twig_tweak\Kernel;
use Drupal\Core\Cache\Cache;
use Drupal\KernelTests\KernelTestBase;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;
use Drupal\Tests\user\Traits\UserCreationTrait;
@ -13,7 +12,7 @@ use Drupal\Tests\user\Traits\UserCreationTrait;
*
* @group twig_tweak
*/
final class EntityViewBuilderTest extends KernelTestBase {
final class EntityViewBuilderTest extends AbstractTestCase {
use UserCreationTrait;
@ -84,7 +83,7 @@ final class EntityViewBuilderTest extends KernelTestBase {
],
'bin' => 'render',
];
self::assertSame($expected_cache, $build['#cache']);
self::assertCache($expected_cache, $build['#cache']);
$expected_html = <<< 'HTML'
<article role="article">
@ -117,7 +116,7 @@ final class EntityViewBuilderTest extends KernelTestBase {
],
'bin' => 'render',
];
self::assertSame($expected_cache, $build['#cache']);
self::assertCache($expected_cache, $build['#cache']);
$expected_html = <<< 'HTML'
<article role="article">
@ -150,7 +149,7 @@ final class EntityViewBuilderTest extends KernelTestBase {
],
'max-age' => 50,
];
self::assertSame($expected_cache, $build['#cache']);
self::assertCache($expected_cache, $build['#cache']);
self::assertSame('', $this->renderPlain($build));
@ -172,7 +171,7 @@ final class EntityViewBuilderTest extends KernelTestBase {
],
'bin' => 'render',
];
self::assertSame($expected_cache, $build['#cache']);
self::assertCache($expected_cache, $build['#cache']);
$expected_html = <<< 'HTML'
<article role="article">

9
tests/src/Kernel/FieldViewBuilderTest.php

@ -3,7 +3,6 @@
namespace Drupal\Tests\twig_tweak\Kernel;
use Drupal\Core\Cache\Cache;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;
@ -13,7 +12,7 @@ use Drupal\node\Entity\NodeType;
*
* @group twig_tweak
*/
final class FieldViewBuilderTest extends KernelTestBase {
final class FieldViewBuilderTest extends AbstractTestCase {
use UserCreationTrait;
@ -74,7 +73,7 @@ final class FieldViewBuilderTest extends KernelTestBase {
],
'max-age' => 50,
];
self::assertSame($expected_cache, $build['#cache']);
self::assertCache($expected_cache, $build['#cache']);
self::assertSame('<span>Public node</span>', $this->renderPlain($build));
@ -93,7 +92,7 @@ final class FieldViewBuilderTest extends KernelTestBase {
],
'max-age' => 50,
];
self::assertSame($expected_cache, $build['#cache']);
self::assertCache($expected_cache, $build['#cache']);
$expected_html = '<span><a href="/node/1" hreflang="en">Public node</a></span>';
self::assertSame($expected_html, $this->renderPlain($build));
@ -112,7 +111,7 @@ final class FieldViewBuilderTest extends KernelTestBase {
],
'max-age' => 50,
];
self::assertSame($expected_cache, $build['#cache']);
self::assertCache($expected_cache, $build['#cache']);
self::assertSame('', $this->renderPlain($build));
// -- Private node without access check.

13
tests/src/Kernel/ImageViewBuilderTest.php

@ -6,7 +6,6 @@ use Drupal\Core\Cache\Cache;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\file\Entity\File;
use Drupal\image\Entity\ImageStyle;
use Drupal\KernelTests\KernelTestBase;
use Drupal\responsive_image\Entity\ResponsiveImageStyle;
/**
@ -14,7 +13,7 @@ use Drupal\responsive_image\Entity\ResponsiveImageStyle;
*
* @group twig_tweak
*/
final class ImageViewBuilderTest extends KernelTestBase {
final class ImageViewBuilderTest extends AbstractTestCase {
/**
* {@inheritdoc}
@ -80,7 +79,7 @@ final class ImageViewBuilderTest extends KernelTestBase {
'max-age' => 70,
],
];
self::assertSame($expected_build, $build);
self::assertRenderArray($expected_build, $build);
self::assertSame('<img src="/files/ocean.jpg" alt="" />', $this->renderPlain($build));
// -- With style.
@ -99,7 +98,7 @@ final class ImageViewBuilderTest extends KernelTestBase {
'max-age' => 70,
],
];
self::assertSame($expected_build, $build);
self::assertRenderArray($expected_build, $build);
self::assertSame('<img alt="Ocean" src="/files/styles/large/public/ocean.jpg?itok=abc" />', $this->renderPlain($build));
// -- With responsive style.
@ -118,7 +117,7 @@ final class ImageViewBuilderTest extends KernelTestBase {
'max-age' => 70,
],
];
self::assertSame($expected_build, $build);
self::assertRenderArray($expected_build, $build);
self::assertSame('<picture><img src="/files/ocean.jpg" alt="Ocean" /></picture>', $this->renderPlain($build));
// -- Private image with access check.
@ -130,7 +129,7 @@ final class ImageViewBuilderTest extends KernelTestBase {
'max-age' => 70,
],
];
self::assertSame($expected_build, $build);
self::assertRenderArray($expected_build, $build);
self::assertSame('', $this->renderPlain($build));
// -- Private image without access check.
@ -145,7 +144,7 @@ final class ImageViewBuilderTest extends KernelTestBase {
'max-age' => Cache::PERMANENT,
],
];
self::assertSame($expected_build, $build);
self::assertRenderArray($expected_build, $build);
self::assertSame('<img src="/files/sea.jpg" alt="" />', $this->renderPlain($build));
}

9
tests/src/Kernel/RegionViewBuilderTest.php

@ -5,7 +5,6 @@ namespace Drupal\Tests\twig_tweak\Kernel;
use Drupal\block\Entity\Block;
use Drupal\Component\Utility\Html;
use Drupal\Core\Cache\Cache;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;
/**
@ -13,7 +12,7 @@ use Drupal\Tests\user\Traits\UserCreationTrait;
*
* @group twig_tweak
*/
final class RegionViewBuilderTest extends KernelTestBase {
final class RegionViewBuilderTest extends AbstractTestCase {
use UserCreationTrait;
@ -117,7 +116,8 @@ final class RegionViewBuilderTest extends KernelTestBase {
'max-age' => 123,
],
];
self::assertSame($expected_build, $build);
self::assertRenderArray($expected_build, $build);
$expected_html = <<< 'HTML'
<div>
@ -137,7 +137,8 @@ final class RegionViewBuilderTest extends KernelTestBase {
->save();
$build = $view_builder->build('sidebar_first');
self::assertSame($expected_build, $build);
self::assertRenderArray($expected_build, $build);
Html::resetSeenIds();
$actual_html = $renderer->renderPlain($expected_build);
self::assertSame(self::normalizeHtml($expected_html), self::normalizeHtml($actual_html));

Loading…
Cancel
Save