You are here

public function CustomBooleanTest::testCustomOptionTemplate in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/views_ui/src/Tests/CustomBooleanTest.php \Drupal\views_ui\Tests\CustomBooleanTest::testCustomOptionTemplate()

Tests the setting and output of custom labels for boolean values.

File

core/modules/views_ui/src/Tests/CustomBooleanTest.php, line 113
Contains \Drupal\views_ui\Tests\CustomBooleanTest.

Class

CustomBooleanTest
Tests the UI and functionality for the Custom boolean field handler options.

Namespace

Drupal\views_ui\Tests

Code

public function testCustomOptionTemplate() {

  // Install theme to test with template system.
  \Drupal::service('theme_handler')
    ->install([
    'views_test_theme',
  ]);

  // Set the default theme for Views preview.
  $this
    ->config('system.theme')
    ->set('default', 'views_test_theme')
    ->save();
  $this
    ->assertEqual($this
    ->config('system.theme')
    ->get('default'), 'views_test_theme');

  // Add the boolean field handler to the test view.
  $view = Views::getView('test_view');
  $view
    ->setDisplay();
  $view->displayHandlers
    ->get('default')
    ->overrideOption('fields', [
    'age' => [
      'id' => 'age',
      'table' => 'views_test_data',
      'field' => 'age',
      'relationship' => 'none',
      'plugin_id' => 'boolean',
    ],
  ]);
  $view
    ->save();
  $this
    ->executeView($view);
  $custom_true = 'Yay';
  $custom_false = 'Nay';

  // Set up some custom value mappings for different types.
  $custom_values = array(
    'plain' => array(
      'true' => $custom_true,
      'false' => $custom_false,
      'test' => 'assertTrue',
    ),
    'allowed tag' => array(
      'true' => '<p>' . $custom_true . '</p>',
      'false' => '<p>' . $custom_false . '</p>',
      'test' => 'assertTrue',
    ),
    'disallowed tag' => array(
      'true' => '<script>' . $custom_true . '</script>',
      'false' => '<script>' . $custom_false . '</script>',
      'test' => 'assertFalse',
    ),
  );

  // Run the same tests on each type.
  foreach ($custom_values as $type => $values) {
    $options = array(
      'options[type]' => 'custom',
      'options[type_custom_true]' => $values['true'],
      'options[type_custom_false]' => $values['false'],
    );
    $this
      ->drupalPostForm('admin/structure/views/nojs/handler/test_view/default/field/age', $options, 'Apply');

    // Save the view.
    $this
      ->drupalPostForm('admin/structure/views/view/test_view', array(), 'Save');
    $view = Views::getView('test_view');
    $output = $view
      ->preview();
    $output = \Drupal::service('renderer')
      ->renderRoot($output);
    $this
      ->{$values['test']}(strpos($output, $values['true']), SafeMarkup::format('Expected custom boolean TRUE value %value in output for %type', [
      '%value' => $values['true'],
      '%type' => $type,
    ]));
    $this
      ->{$values['test']}(strpos($output, $values['false']), SafeMarkup::format('Expected custom boolean FALSE value %value in output for %type', [
      '%value' => $values['false'],
      '%type' => $type,
    ]));

    // Assert that we are using the correct template.
    $this
      ->setRawContent($output);
    $this
      ->assertText('llama', 'Loaded the correct views-view-field.html.twig template');
  }
}