Newer
Older
<?php
/**
* @file
* Definition of Drupal\image\Tests\ImageFieldDefaultImagesTest.
*/
namespace Drupal\image\Tests;
/**
* Tests default image settings.
*/
class ImageFieldDefaultImagesTest extends ImageFieldTestBase {
/**
* Modules to enable.
*
* @var array
*/
public static $modules = array('field_ui');
public static function getInfo() {
return array(
'name' => 'Image field default images tests',
'description' => 'Tests setting up default images both to the field and field instance.',
'group' => 'Image',
);
}
/**
* Tests CRUD for fields and fields instances with default images.
*/
function testDefaultImages() {
// Create files to use as the default images.
$files = $this->drupalGetTestFiles('image');
$default_images = array();
foreach (array('field', 'instance', 'instance2', 'field_new', 'instance_new') as $image_target) {
$file = entity_create('file', (array) array_pop($files));
$file->save();
$default_images[$image_target] = $file;
}
// Create an image field and add an instance to the article content type.
$field_name = strtolower($this->randomName());
$field_settings = array(
Alex Pott
committed
'default_image' => $default_images['field']->fid,
);
$instance_settings = array(
Alex Pott
committed
'default_image' => $default_images['instance']->fid,
);
$widget_settings = array(
'preview_image_style' => 'medium',
);
$this->createImageField($field_name, 'article', $field_settings, $instance_settings, $widget_settings);
$field = field_info_field($field_name);
$instance = field_info_instance('node', $field_name, 'article');
// Add another instance with another default image to the page content type.
$instance2 = array(
'field_name' => $field['field_name'],
'entity_type' => 'node',
'label' => $instance['label'],
'required' => $instance['required'],
'settings' => array(
Alex Pott
committed
'default_image' => $default_images['instance2']->fid,
);
field_create_instance($instance2);
$instance2 = field_info_instance('node', $field_name, 'page');
Alex Pott
committed
$widget_settings = entity_get_form_display($instance['entity_type'], $instance['bundle'], 'default')->getComponent($field['field_name']);
entity_get_form_display('node', 'page', 'default')
->setComponent($field['field_name'], $widget_settings)
->save();
entity_get_display('node', 'page', 'default')
->setComponent($field['field_name'])
->save();
// Confirm the defaults are present on the article field settings form.
Alex Pott
committed
$this->drupalGet("admin/structure/types/manage/article/fields/$instance->id/field");
$this->assertFieldByXpath(
Angie Byron
committed
'//input[@name="field[settings][default_image][fids]"]',
$default_images['field']->fid,
format_string(
'Article image field default equals expected file ID of @fid.',
array('@fid' => $default_images['field']->fid)
)
);
// Confirm the defaults are present on the article field edit form.
$this->drupalGet("admin/structure/types/manage/article/fields/$instance->id");
$this->assertFieldByXpath(
Angie Byron
committed
'//input[@name="instance[settings][default_image][fids]"]',
$default_images['instance']->fid,
format_string(
'Article image field instance default equals expected file ID of @fid.',
array('@fid' => $default_images['instance']->fid)
)
);
// Confirm the defaults are present on the page field settings form.
Alex Pott
committed
$this->drupalGet("admin/structure/types/manage/page/fields/$instance->id/field");
$this->assertFieldByXpath(
Angie Byron
committed
'//input[@name="field[settings][default_image][fids]"]',
$default_images['field']->fid,
format_string(
'Page image field default equals expected file ID of @fid.',
array('@fid' => $default_images['field']->fid)
)
);
// Confirm the defaults are present on the page field edit form.
$this->drupalGet("admin/structure/types/manage/page/fields/$instance2->id");
$this->assertFieldByXpath(
Angie Byron
committed
'//input[@name="instance[settings][default_image][fids]"]',
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
$default_images['instance2']->fid,
format_string(
'Page image field instance default equals expected file ID of @fid.',
array('@fid' => $default_images['instance2']->fid)
)
);
// Confirm that the image default is shown for a new article node.
$article = $this->drupalCreateNode(array('type' => 'article'));
$article_built = node_view($article);
$this->assertEqual(
$article_built[$field_name]['#items'][0]['fid'],
$default_images['instance']->fid,
format_string(
'A new article node without an image has the expected default image file ID of @fid.',
array('@fid' => $default_images['instance']->fid)
)
);
// Confirm that the image default is shown for a new page node.
$page = $this->drupalCreateNode(array('type' => 'page'));
$page_built = node_view($page);
$this->assertEqual(
$page_built[$field_name]['#items'][0]['fid'],
$default_images['instance2']->fid,
format_string(
'A new page node without an image has the expected default image file ID of @fid.',
array('@fid' => $default_images['instance2']->fid)
)
);
// Upload a new default for the field.
Angie Byron
committed
$field['settings']['default_image'] = array($default_images['field_new']->fid);
field_update_field($field);
// Confirm that the new default is used on the article field settings form.
Alex Pott
committed
$this->drupalGet("admin/structure/types/manage/article/fields/$instance->id/field");
$this->assertFieldByXpath(
Angie Byron
committed
'//input[@name="field[settings][default_image][fids]"]',
$default_images['field_new']->fid,
format_string(
'Updated image field default equals expected file ID of @fid.',
array('@fid' => $default_images['field_new']->fid)
)
);
// Reload the nodes and confirm the field instance defaults are used.
$article_built = node_view($article = node_load($article->nid, TRUE));
$page_built = node_view($page = node_load($page->nid, TRUE));
$this->assertEqual(
$article_built[$field_name]['#items'][0]['fid'],
$default_images['instance']->fid,
format_string(
'An existing article node without an image has the expected default image file ID of @fid.',
array('@fid' => $default_images['instance']->fid)
)
);
$this->assertEqual(
$page_built[$field_name]['#items'][0]['fid'],
$default_images['instance2']->fid,
format_string(
'An existing page node without an image has the expected default image file ID of @fid.',
array('@fid' => $default_images['instance2']->fid)
)
);
// Upload a new default for the article's field instance.
Alex Pott
committed
$instance['settings']['default_image'] = $default_images['instance_new']->fid;
field_update_instance($instance);
// Confirm the new field instance default is used on the article field
// admin form.
$this->drupalGet("admin/structure/types/manage/article/fields/$instance->id");
$this->assertFieldByXpath(
Angie Byron
committed
'//input[@name="instance[settings][default_image][fids]"]',
$default_images['instance_new']->fid,
format_string(
'Updated article image field instance default equals expected file ID of @fid.',
array('@fid' => $default_images['instance_new']->fid)
)
);
// Reload the nodes.
$article_built = node_view($article = node_load($article->nid, TRUE));
$page_built = node_view($page = node_load($page->nid, TRUE));
// Confirm the article uses the new default.
$this->assertEqual(
$article_built[$field_name]['#items'][0]['fid'],
$default_images['instance_new']->fid,
format_string(
'An existing article node without an image has the expected default image file ID of @fid.',
array('@fid' => $default_images['instance_new']->fid)
)
);
// Confirm the page remains unchanged.
$this->assertEqual(
$page_built[$field_name]['#items'][0]['fid'],
$default_images['instance2']->fid,
format_string(
'An existing page node without an image has the expected default image file ID of @fid.',
array('@fid' => $default_images['instance2']->fid)
)
);
// Remove the instance default from articles.
Alex Pott
committed
$instance['settings']['default_image'] = 0;
field_update_instance($instance);
// Confirm the article field instance default has been removed.
$this->drupalGet("admin/structure/types/manage/article/fields/$instance->id");
$this->assertFieldByXpath(
Angie Byron
committed
'//input[@name="instance[settings][default_image][fids]"]',
'',
'Updated article image field instance default has been successfully removed.'
);
// Reload the nodes.
$article_built = node_view($article = node_load($article->nid, TRUE));
$page_built = node_view($page = node_load($page->nid, TRUE));
// Confirm the article uses the new field (not instance) default.
$this->assertEqual(
$article_built[$field_name]['#items'][0]['fid'],
$default_images['field_new']->fid,
format_string(
'An existing article node without an image has the expected default image file ID of @fid.',
array('@fid' => $default_images['field_new']->fid)
)
);
// Confirm the page remains unchanged.
$this->assertEqual(
$page_built[$field_name]['#items'][0]['fid'],
$default_images['instance2']->fid,
format_string(
'An existing page node without an image has the expected default image file ID of @fid.',
array('@fid' => $default_images['instance2']->fid)
)
);
}
}