/**
  * Drupal\simpletest\WebTestBase\setUp().
  */
 protected function setUp()
 {
     parent::setUp();
     // Create user.
     $this->adminUser = $this->drupalCreateUser(array('administer responsive images', 'access content', 'access administration pages', 'administer site configuration', 'administer content types', 'administer node display', 'administer nodes', 'create article content', 'edit any article content', 'delete any article content', 'administer image styles'));
     $this->drupalLogin($this->adminUser);
     // Add responsive image style.
     $this->responsiveImgStyle = ResponsiveImageStyle::create(array('id' => 'style_one', 'label' => 'Style One', 'breakpoint_group' => 'responsive_image_test_module', 'fallback_image_style' => 'large'));
 }
 /**
  * Tests formatter settings.
  */
 function testResponsiveImageFormatterUI()
 {
     $manage_fields = 'admin/structure/types/manage/' . $this->type;
     $manage_display = $manage_fields . '/display';
     // Create a field, and a node with some data for the field.
     $this->fieldUIAddNewField($manage_fields, 'image', 'Image field', 'image');
     // Display the "Manage display".
     $this->drupalGet($manage_display);
     // Change the formatter and check that the summary is updated.
     $edit = array('fields[field_image][type]' => 'responsive_image', 'refresh_rows' => 'field_image');
     $this->drupalPostAjaxForm(NULL, $edit, array('op' => t('Refresh')));
     $this->assertText("Select a responsive image style.", 'The expected summary is displayed.');
     // Submit the form.
     $this->drupalPostForm(NULL, array(), t('Save'));
     $this->assertText("Select a responsive image style.", 'The expected summary is displayed.');
     // Create responsive image styles.
     $responsive_image_style = ResponsiveImageStyle::create(array('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', array('image_mapping_type' => 'image_style', 'image_mapping' => 'thumbnail'))->addImageStyleMapping('responsive_image_test_module.narrow', '1x', array('image_mapping_type' => 'image_style', 'image_mapping' => 'medium'))->addImageStyleMapping('responsive_image_test_module.wide', '1x', array('image_mapping_type' => 'image_style', 'image_mapping' => 'large'))->save();
     \Drupal::entityManager()->clearCachedFieldDefinitions();
     // Refresh the page.
     $this->drupalGet($manage_display);
     $this->assertText("Select a responsive image style.", 'The expected summary is displayed.');
     // Click on the formatter settings button to open the formatter settings
     // form.
     $this->drupalPostAjaxForm(NULL, array(), "field_image_settings_edit");
     // Assert that the correct fields are present.
     $fieldnames = array('fields[field_image][settings_edit_form][settings][responsive_image_style]', 'fields[field_image][settings_edit_form][settings][image_link]');
     foreach ($fieldnames as $fieldname) {
         $this->assertField($fieldname);
     }
     $edit = array('fields[field_image][settings_edit_form][settings][responsive_image_style]' => 'style_one', 'fields[field_image][settings_edit_form][settings][image_link]' => 'content');
     $this->drupalPostAjaxForm(NULL, $edit, "field_image_plugin_settings_update");
     // Save the form to save the settings.
     $this->drupalPostForm(NULL, array(), t('Save'));
     $this->assertText('Responsive image style: Style One');
     $this->assertText('Linked to content');
     // Click on the formatter settings button to open the formatter settings
     // form.
     $this->drupalPostAjaxForm(NULL, array(), "field_image_settings_edit");
     $edit = array('fields[field_image][settings_edit_form][settings][responsive_image_style]' => 'style_one', 'fields[field_image][settings_edit_form][settings][image_link]' => 'file');
     $this->drupalPostAjaxForm(NULL, $edit, "field_image_plugin_settings_update");
     // Save the form to save the third party settings.
     $this->drupalPostForm(NULL, array(), t('Save'));
     $this->assertText('Responsive image style: Style One');
     $this->assertText('Linked to file');
 }
 /**
  * Tests integration with entity view display.
  */
 public function testEntityViewDisplayDependency()
 {
     // Create a responsive image style.
     ResponsiveImageStyle::create(['id' => 'foo', 'label' => 'Foo', 'breakpoint_group' => 'responsive_image_test_module'])->save();
     // Create an image field to be used with a responsive image formatter.
     FieldStorageConfig::create(['type' => 'image', 'entity_type' => 'entity_test', 'field_name' => 'bar'])->save();
     FieldConfig::create(['entity_type' => 'entity_test', 'bundle' => 'entity_test', 'field_name' => 'bar'])->save();
     /** @var \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display */
     $display = EntityViewDisplay::create(['targetEntityType' => 'entity_test', 'bundle' => 'entity_test', 'mode' => 'default']);
     $display->setComponent('bar', ['type' => 'responsive_image', 'label' => 'hidden', 'settings' => ['responsive_image_style' => 'foo', 'image_link' => ''], 'third_party_settings' => []])->save();
     // Check that the 'foo' field is on the display.
     $this->assertNotNull($display = EntityViewDisplay::load('entity_test.entity_test.default'));
     $this->assertTrue($display->getComponent('bar'));
     $this->assertArrayNotHasKey('bar', $display->get('hidden'));
     // Delete the responsive image style.
     ResponsiveImageStyle::load('foo')->delete();
     // Check that the view display was not deleted.
     $this->assertNotNull($display = EntityViewDisplay::load('entity_test.entity_test.default'));
     // Check that the 'foo' field was disabled.
     $this->assertNull($display->getComponent('bar'));
     $this->assertArrayHasKey('bar', $display->get('hidden'));
 }