2069f61368f14f8804da50c7e39a523fb8e6afd5
[yaffs-website] / web / core / modules / responsive_image / src / Tests / ResponsiveImageFieldUiTest.php
1 <?php
2
3 namespace Drupal\responsive_image\Tests;
4
5 use Drupal\field_ui\Tests\FieldUiTestTrait;
6 use Drupal\simpletest\WebTestBase;
7 use Drupal\responsive_image\Entity\ResponsiveImageStyle;
8
9 /**
10  * Tests the "Responsive Image" formatter settings form.
11  *
12  * @group responsive_image
13  */
14 class ResponsiveImageFieldUiTest extends WebTestBase {
15
16   use FieldUiTestTrait;
17
18   /**
19    * Modules to install.
20    *
21    * @var array
22    */
23   public static $modules = ['node', 'field_ui', 'image', 'responsive_image', 'responsive_image_test_module', 'block'];
24
25   /**
26    * {@inheritdoc}
27    */
28   protected function setUp() {
29     parent::setUp();
30     $this->drupalPlaceBlock('system_breadcrumb_block');
31     // Create a test user.
32     $admin_user = $this->drupalCreateUser(['access content', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'bypass node access']);
33     $this->drupalLogin($admin_user);
34
35     // Create content type, with underscores.
36     $type_name = strtolower($this->randomMachineName(8)) . '_test';
37     $type = $this->drupalCreateContentType(['name' => $type_name, 'type' => $type_name]);
38     $this->type = $type->id();
39   }
40
41   /**
42    * Tests formatter settings.
43    */
44   public function testResponsiveImageFormatterUI() {
45     $manage_fields = 'admin/structure/types/manage/' . $this->type;
46     $manage_display = $manage_fields . '/display';
47
48     // Create a field, and a node with some data for the field.
49     $this->fieldUIAddNewField($manage_fields, 'image', 'Image field', 'image');
50     // Display the "Manage display".
51     $this->drupalGet($manage_display);
52
53     // Change the formatter and check that the summary is updated.
54     $edit = [
55       'fields[field_image][type]' => 'responsive_image',
56       'fields[field_image][region]' => 'content',
57       'refresh_rows' => 'field_image',
58     ];
59     $this->drupalPostAjaxForm(NULL, $edit, ['op' => t('Refresh')]);
60     $this->assertText("Select a responsive image style.", 'The expected summary is displayed.');
61
62     // Submit the form.
63     $this->drupalPostForm(NULL, [], t('Save'));
64     $this->assertText("Select a responsive image style.", 'The expected summary is displayed.');
65
66     // Create responsive image styles.
67     $responsive_image_style = ResponsiveImageStyle::create([
68       'id' => 'style_one',
69       'label' => 'Style One',
70       'breakpoint_group' => 'responsive_image_test_module',
71       'fallback_image_style' => 'thumbnail',
72     ]);
73     $responsive_image_style
74       ->addImageStyleMapping('responsive_image_test_module.mobile', '1x', [
75         'image_mapping_type' => 'image_style',
76         'image_mapping' => 'thumbnail',
77       ])
78       ->addImageStyleMapping('responsive_image_test_module.narrow', '1x', [
79         'image_mapping_type' => 'image_style',
80         'image_mapping' => 'medium',
81       ])
82       // Test the normal output of mapping to an image style.
83       ->addImageStyleMapping('responsive_image_test_module.wide', '1x', [
84         'image_mapping_type' => 'image_style',
85         'image_mapping' => 'large',
86       ])
87       ->save();
88     \Drupal::entityManager()->clearCachedFieldDefinitions();
89     // Refresh the page.
90     $this->drupalGet($manage_display);
91     $this->assertText("Select a responsive image style.", 'The expected summary is displayed.');
92
93     // Click on the formatter settings button to open the formatter settings
94     // form.
95     $this->drupalPostAjaxForm(NULL, [], "field_image_settings_edit");
96
97     // Assert that the correct fields are present.
98     $fieldnames = [
99       'fields[field_image][settings_edit_form][settings][responsive_image_style]',
100       'fields[field_image][settings_edit_form][settings][image_link]',
101     ];
102     foreach ($fieldnames as $fieldname) {
103       $this->assertField($fieldname);
104     }
105     $edit = [
106       'fields[field_image][settings_edit_form][settings][responsive_image_style]' => 'style_one',
107       'fields[field_image][settings_edit_form][settings][image_link]' => 'content',
108     ];
109     $this->drupalPostAjaxForm(NULL, $edit, "field_image_plugin_settings_update");
110
111     // Save the form to save the settings.
112     $this->drupalPostForm(NULL, [], t('Save'));
113     $this->assertText('Responsive image style: Style One');
114     $this->assertText('Linked to content');
115
116     // Click on the formatter settings button to open the formatter settings
117     // form.
118     $this->drupalPostAjaxForm(NULL, [], "field_image_settings_edit");
119     $edit = [
120       'fields[field_image][settings_edit_form][settings][responsive_image_style]' => 'style_one',
121       'fields[field_image][settings_edit_form][settings][image_link]' => 'file',
122     ];
123     $this->drupalPostAjaxForm(NULL, $edit, "field_image_plugin_settings_update");
124
125     // Save the form to save the third party settings.
126     $this->drupalPostForm(NULL, [], t('Save'));
127     $this->assertText('Responsive image style: Style One');
128     $this->assertText('Linked to file');
129   }
130
131 }