You are here

public function CustomBooleanTest::testCustomOptionTemplate in Drupal 8

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

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

File

core/modules/views_ui/tests/src/Functional/CustomBooleanTest.php, line 113

Class

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

Namespace

Drupal\Tests\views_ui\Functional

Code

public function testCustomOptionTemplate() {

  // Install theme to test with template system.
  \Drupal::service('theme_installer')
    ->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 = [
    'plain' => [
      'true' => $custom_true,
      'false' => $custom_false,
      'test' => 'assertStringContainsString',
    ],
    'allowed tag' => [
      'true' => '<p>' . $custom_true . '</p>',
      'false' => '<p>' . $custom_false . '</p>',
      'test' => 'assertStringContainsString',
    ],
    'disallowed tag' => [
      'true' => '<script>' . $custom_true . '</script>',
      'false' => '<script>' . $custom_false . '</script>',
      'test' => 'assertStringNotContainsString',
    ],
  ];

  // Run the same tests on each type.
  foreach ($custom_values as $type => $values) {
    $options = [
      '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', [], 'Save');
    $view = Views::getView('test_view');
    $output = $view
      ->preview();
    $output = \Drupal::service('renderer')
      ->renderRoot($output);
    $this
      ->{$values['test']}($values['true'], (string) $output, new FormattableMarkup('Expected custom boolean TRUE value %value in output for %type', [
      '%value' => $values['true'],
      '%type' => $type,
    ]));
    $this
      ->{$values['test']}($values['false'], (string) $output, new FormattableMarkup('Expected custom boolean FALSE value %value in output for %type', [
      '%value' => $values['false'],
      '%type' => $type,
    ]));

    // Assert that we are using the correct template.
    $this
      ->assertStringContainsString('llama', (string) $output);
  }
}