You are here

public function BlazyFormatterTest::testBlazyFormatterMethods in Blazy 8

Same name and namespace in other branches
  1. 8.2 tests/src/Kernel/BlazyFormatterTest.php \Drupal\Tests\blazy\Kernel\BlazyFormatterTest::testBlazyFormatterMethods()

Tests the Blazy formatter methods.

File

tests/src/Kernel/BlazyFormatterTest.php, line 46

Class

BlazyFormatterTest
Tests the Blazy image formatter.

Namespace

Drupal\Tests\blazy\Kernel

Code

public function testBlazyFormatterMethods() {

  // Tests type definition.
  $this->typeDefinition = $this->blazyAdminFormatter
    ->getTypedConfig()
    ->getDefinition('blazy.settings');
  $this
    ->assertEquals('Blazy settings', $this->typeDefinition['label']);

  // Tests cache.
  $entity = $this->entity;
  $build = $this->display
    ->build($entity);
  $this
    ->assertInstanceOf('\\Drupal\\Core\\Field\\FieldItemListInterface', $this->testItems, 'Field implements interface.');
  $this
    ->assertInstanceOf('\\Drupal\\blazy\\BlazyManagerInterface', $this->formatterInstance
    ->blazyManager(), 'BlazyManager implements interface.');

  // Tests cache tags matching entity ::getCacheTags().
  $item = $entity->{$this->testFieldName};
  $this
    ->assertEquals($item[0]->entity
    ->getCacheTags(), $build[$this->testFieldName][0]['#build']['settings']['file_tags'], 'First image cache tags is as expected');
  $this
    ->assertEquals($item[1]->entity
    ->getCacheTags(), $build[$this->testFieldName][1]['#build']['settings']['file_tags'], 'Second image cache tags is as expected');
  $render = $this->blazyManager
    ->getRenderer()
    ->renderRoot($build);
  $this
    ->assertNotEmpty($render);

  // Tests ::settingsForm.
  $form = [];

  // Check for setttings form.
  $form_state = new FormState();
  $elements = $this->formatterInstance
    ->settingsForm($form, $form_state);
  $this
    ->assertArrayHasKey('closing', $elements);
  $formatter_settings = $this->formatterInstance
    ->buildSettings();
  $this
    ->assertArrayHasKey('plugin_id', $formatter_settings);

  // Tests formatter settings.
  $build = $this->display
    ->build($this->entity);
  $result = $this->entity->{$this->testFieldName}
    ->view([
    'type' => 'blazy',
  ]);
  $this
    ->assertEquals('blazy', $result[0]['#theme']);
  $component = $this->display
    ->getComponent($this->testFieldName);
  $this
    ->assertEquals($this->testPluginId, $component['type']);
  $this
    ->assertEquals($this->testPluginId, $build[$this->testFieldName]['#formatter']);
  $format['settings'] = $this
    ->getFormatterSettings();
  $settings =& $format['settings'];
  $settings['breakpoints'] = $this
    ->getDataBreakpoints(TRUE);
  $settings['bundle'] = $this->bundle;
  $settings['blazy'] = TRUE;
  $settings['grid'] = 0;
  $settings['lazy'] = 'blazy';
  $settings['background'] = TRUE;
  $settings['thumbnail_style'] = 'thumbnail';
  $settings['ratio'] = 'enforced';
  $settings['image_style'] = 'blazy_crop';
  try {
    $settings['vanilla'] = TRUE;
    $this->blazyFormatterManager
      ->buildSettings($format, $this->testItems);
  } catch (\PHPUnit_Framework_Exception $e) {
  }
  $this
    ->assertEquals($this->testFieldName, $settings['field_name']);
  $settings['vanilla'] = FALSE;
  $this->blazyFormatterManager
    ->buildSettings($format, $this->testItems);
  $this
    ->assertEquals($this->testFieldName, $settings['field_name']);
  $this
    ->assertArrayHasKey('#blazy', $build[$this->testFieldName]);

  // Tests options.
  // Verify no optionsets without a defined function paramater.
  try {
    $options_1a = $this->blazyAdminFormatter
      ->getOptionsetOptions();
  } catch (\PHPUnit_Framework_Exception $e) {
  }
  $this
    ->assertEmpty($options_1a);
  $options_1b = $this->blazyAdminFormatter
    ->getOptionsetOptions('image_style');
  $this
    ->assertArrayHasKey('large', $options_1b);

  // Tests grid.
  $new_settings = $this
    ->getFormatterSettings();
  $new_settings['grid'] = 4;
  $new_settings['grid_medium'] = 3;
  $new_settings['grid_small'] = 2;
  $new_settings['media_switch'] = 'blazy_test';
  $new_settings['style'] = 'column';
  $new_settings['image_style'] = 'blazy_crop';
  $this->display
    ->setComponent($this->testFieldName, [
    'type' => $this->testPluginId,
    'settings' => $new_settings,
    'label' => 'hidden',
  ]);
  $build = $this->display
    ->build($this->entity);

  // Verify theme_field() is taken over by BlazyGrid::build().
  $this
    ->assertArrayNotHasKey('#blazy', $build[$this->testFieldName]);
}