function HandlerAggregatorTest::testHandlers

Tests most of the handlers.

File

core/modules/aggregator/tests/src/Functional/Views/Handler/HandlerAggregatorTest.php, line 38

Class

HandlerAggregatorTest
Tests instances of the aggregator related view handlers.

Namespace

Drupal\Tests\aggregator\Functional\Views\Handler

Code

public function testHandlers() {
  $this->drupalCreateContentType([
    'type' => 'article',
  ]);
  $object_types = array_keys(ViewExecutable::getHandlerTypes());
  foreach ($this->container
    ->get('views.views_data')
    ->getAll() as $base_table => $info) {
    if (!isset($info['table']['base'])) {
      continue;
    }
    $view = View::create([
      'base_table' => $base_table,
    ]);
    $view = $view->getExecutable();
    // @todo The groupwise relationship is currently broken.
    $exclude[] = 'users_field_data:uid_representative';
    // Go through all fields and there through all handler types.
    foreach ($info as $field => $field_info) {
      // Table is a reserved key for the meta-information.
      if ($field !== 'table' && !in_array("{$base_table}:{$field}", $exclude)) {
        $item = [
          'table' => $base_table,
          'field' => $field,
        ];
        foreach ($object_types as $type) {
          if (isset($field_info[$type]['id'])) {
            $options = [];
            if ($type === 'filter') {
              $handler = $this->container
                ->get("plugin.manager.views.{$type}")
                ->getHandler($item);
              // Set the value to use for the filter based on the filter type.
              if ($handler instanceof InOperator) {
                $options['value'] = [
                  1,
                ];
              }
              elseif ($handler instanceof NumericFilter) {
                $options['value'] = [
                  'value' => 1,
                ];
              }
              else {
                $options['value'] = 1;
              }
            }
            $view->addHandler('default', $type, $base_table, $field, $options);
          }
        }
      }
    }
    // Go through each step individually to see whether some parts are
    // failing.
    $view->build();
    $view->preExecute();
    $view->execute();
    $view->render();
    // Make sure all handlers extend the HandlerBase.
    foreach ($object_types as $type) {
      if (isset($view->{$type})) {
        foreach ($view->{$type} as $handler) {
          $this->assertInstanceOf(HandlerBase::class, $handler);
        }
      }
    }
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.