You are here

protected function RowRenderCacheTest::doTestRenderedOutput in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/views/src/Tests/Plugin/RowRenderCacheTest.php \Drupal\views\Tests\Plugin\RowRenderCacheTest::doTestRenderedOutput()

Check whether the rendered output matches expectations.

Parameters

\Drupal\Core\Session\AccountInterface $account: The user account to tests rendering with.

bool $check_cache: (optional) Whether explicitly test render cache entries.

1 call to RowRenderCacheTest::doTestRenderedOutput()
RowRenderCacheTest::testAdvancedCaching in core/modules/views/src/Tests/Plugin/RowRenderCacheTest.php
Test complex field rewriting and uncacheable field handlers.

File

core/modules/views/src/Tests/Plugin/RowRenderCacheTest.php, line 119
Contains \Drupal\views\Tests\Plugin\RowRenderCacheTest.

Class

RowRenderCacheTest
Tests row render caching.

Namespace

Drupal\views\Tests\Plugin

Code

protected function doTestRenderedOutput(AccountInterface $account, $check_cache = FALSE) {
  $this
    ->setCurrentUser($account);
  $view = Views::getView('test_row_render_cache');
  $view
    ->setDisplay();
  $view
    ->preview();

  /** @var \Drupal\Core\Render\RenderCacheInterface $render_cache */
  $render_cache = $this->container
    ->get('render_cache');

  /** @var \Drupal\views\Plugin\views\cache\CachePluginBase $cache_plugin */
  $cache_plugin = $view->display_handler
    ->getPlugin('cache');

  // Retrieve nodes and sort them in alphabetical order to match view results.
  $nodes = Node::loadMultiple();
  usort($nodes, function (NodeInterface $a, NodeInterface $b) {
    return strcmp($a
      ->label(), $b
      ->label());
  });
  $index = 0;
  foreach ($nodes as $node) {
    $nid = $node
      ->id();
    $access = $node
      ->access('update');
    $counter = $index + 1;
    $expected = "{$nid}: {$counter} (just in case: {$nid})";
    $counter_output = $view->style_plugin
      ->getField($index, 'counter');
    $this
      ->assertEqual($counter_output, $expected);
    $node_url = $node
      ->url();
    $expected = "<a href=\"{$node_url}\"><span class=\"da-title\">{$node->label()}</span> <span class=\"counter\">{$counter_output}</span></a>";
    $output = $view->style_plugin
      ->getField($index, 'title');
    $this
      ->assertEqual($output, $expected);
    $expected = $access ? "<a href=\"{$node_url}/edit?destination=/\" hreflang=\"en\">edit</a>" : "";
    $output = $view->style_plugin
      ->getField($index, 'edit_node');
    $this
      ->assertEqual($output, $expected);
    $expected = $access ? "<a href=\"{$node_url}/delete?destination=/\" hreflang=\"en\">delete</a>" : "";
    $output = $view->style_plugin
      ->getField($index, 'delete_node');
    $this
      ->assertEqual($output, $expected);
    $expected = $access ? "  <div class=\"dropbutton-wrapper\"><div class=\"dropbutton-widget\"><ul class=\"dropbutton\">" . "<li class=\"edit\"><a href=\"{$node_url}/edit?destination=/\" hreflang=\"en\">Edit</a></li>" . "<li class=\"delete\"><a href=\"{$node_url}/delete?destination=/\" hreflang=\"en\">Delete</a></li>" . "</ul></div></div>" : "";
    $output = $view->style_plugin
      ->getField($index, 'operations');
    $this
      ->assertEqual($output, $expected);
    if ($check_cache) {
      $keys = $cache_plugin
        ->getRowCacheKeys($view->result[$index]);
      $user_context = !$account
        ->hasPermission('edit any test content') ? 'user' : 'user.permissions';
      $element = $render_cache
        ->get([
        '#cache' => [
          'keys' => $keys,
          'contexts' => [
            'languages:language_interface',
            'theme',
            $user_context,
          ],
        ],
      ]);
      $this
        ->assertTrue($element);
    }
    $index++;
  }
}