ResponsiveImageFieldUiTest.php

Same filename and directory in other branches
  1. 9 core/modules/responsive_image/tests/src/FunctionalJavascript/ResponsiveImageFieldUiTest.php
  2. 8.9.x core/modules/responsive_image/src/FunctionalJavascript/ResponsiveImageFieldUiTest.php
  3. 10 core/modules/responsive_image/tests/src/FunctionalJavascript/ResponsiveImageFieldUiTest.php

Namespace

Drupal\Tests\responsive_image\FunctionalJavascript

File

core/modules/responsive_image/tests/src/FunctionalJavascript/ResponsiveImageFieldUiTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\responsive_image\FunctionalJavascript;

use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\responsive_image\Entity\ResponsiveImageStyle;
use Drupal\Tests\field_ui\Traits\FieldUiJSTestTrait;

/**
 * Tests the responsive image field UI.
 *
 * @group responsive_image
 */
class ResponsiveImageFieldUiTest extends WebDriverTestBase {
  use FieldUiJSTestTrait;
  
  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'node',
    'field_ui',
    'image',
    'responsive_image',
    'responsive_image_test_module',
    'block',
  ];
  
  /**
   * The content type id.
   *
   * @var string
   */
  protected string $type;
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $this->drupalPlaceBlock('system_breadcrumb_block');
    $this->drupalPlaceBlock('local_actions_block');
    // Create a test user.
    $admin_user = $this->drupalCreateUser([
      'access content',
      'administer content types',
      'administer node fields',
      'administer node form display',
      'administer node display',
      'bypass node access',
    ]);
    $this->drupalLogin($admin_user);
    // Create content type, with underscores.
    $type_name = $this->randomMachineName(8) . '_test';
    $type = $this->drupalCreateContentType([
      'name' => $type_name,
      'type' => $type_name,
    ]);
    $this->type = $type->id();
  }
  
  /**
   * Tests formatter settings.
   */
  public function testResponsiveImageFormatterUi() : void {
    $manage = 'admin/structure/types/manage/' . $this->type;
    $manage_display = $manage . '/display';
    /** @var \Drupal\FunctionalJavascriptTests\JSWebAssert $assert_session */
    $assert_session = $this->assertSession();
    $this->fieldUIAddNewFieldJS('admin/structure/types/manage/' . $this->type, 'image', 'Image', 'image');
    // Display the "Manage display" page.
    $this->drupalGet($manage_display);
    // Change the formatter and check that the summary is updated.
    $page = $this->getSession()
      ->getPage();
    $field_image_type = $page->findField('fields[field_image][type]');
    $field_image_type->setValue('responsive_image');
    $summary_text = $assert_session->waitForElement('xpath', $this->cssSelectToXpath('#field-image .ajax-new-content .field-plugin-summary'));
    $this->assertEquals('Select a responsive image style. Loading attribute: lazy', $summary_text->getText());
    $page->pressButton('Save');
    $assert_session->responseContains("Select a responsive image style.");
    // Create responsive image styles.
    $responsive_image_style = ResponsiveImageStyle::create([
      'id' => 'style_one',
      'label' => 'Style One',
      'breakpoint_group' => 'responsive_image_test_module',
      'fallback_image_style' => 'thumbnail',
    ]);
    $responsive_image_style->addImageStyleMapping('responsive_image_test_module.mobile', '1x', [
      'image_mapping_type' => 'image_style',
      'image_mapping' => 'thumbnail',
    ])
      ->addImageStyleMapping('responsive_image_test_module.narrow', '1x', [
      'image_mapping_type' => 'image_style',
      'image_mapping' => 'medium',
    ])
      ->addImageStyleMapping('responsive_image_test_module.wide', '1x', [
      'image_mapping_type' => 'image_style',
      'image_mapping' => 'large',
    ])
      ->save();
    \Drupal::service('entity_field.manager')->clearCachedFieldDefinitions();
    // Refresh the page.
    $this->drupalGet($manage_display);
    $assert_session->responseContains("Select a responsive image style.");
    // Click on the formatter settings button to open the formatter settings
    // form.
    $field_image_type = $page->findField('fields[field_image][type]');
    $field_image_type->setValue('responsive_image');
    $page->find('css', '#edit-fields-field-image-settings-edit')
      ->click();
    $assert_session->waitForField('fields[field_image][settings_edit_form][settings][responsive_image_style]');
    // Assert that the correct fields are present.
    $fieldnames = [
      'fields[field_image][settings_edit_form][settings][responsive_image_style]',
      'fields[field_image][settings_edit_form][settings][image_link]',
    ];
    foreach ($fieldnames as $fieldname) {
      $assert_session->fieldExists($fieldname);
    }
    $page->findField('fields[field_image][settings_edit_form][settings][responsive_image_style]')
      ->setValue('style_one');
    $page->findField('fields[field_image][settings_edit_form][settings][image_link]')
      ->setValue('content');
    // Save the form to save the settings.
    $page->pressButton('Save');
    $this->assertTrue($assert_session->waitForText('Responsive image style: Style One'));
    $this->assertTrue($assert_session->waitForText('Linked to content'));
    $page->find('css', '#edit-fields-field-image-settings-edit')
      ->click();
    $assert_session->waitForField('fields[field_image][settings_edit_form][settings][responsive_image_style]');
    $page->findField('fields[field_image][settings_edit_form][settings][image_link]')
      ->setValue('file');
    // Save the form to save the settings.
    $page->pressButton('Save');
    $this->assertTrue($assert_session->waitForText('Responsive image style: Style One'));
    $this->assertTrue($assert_session->waitForText('Linked to file'));
  }

}

Classes

Title Deprecated Summary
ResponsiveImageFieldUiTest Tests the responsive image field UI.

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