1.20.x image.test ImageFieldDefaultImagesTestCase::testDefaultImages()

Tests CRUD for fields and fields instances with default images.

File

modules/image/tests/image.test, line 1541
Tests for image.module.

Class

ImageFieldDefaultImagesTestCase
Tests default image settings.

Code

function testDefaultImages() {
  // Create files to use as the default images.
  $files = $this->backdropGetTestFiles('image');
  $default_images = array();
  foreach (array('field', 'instance', 'instance2', 'field_new', 'instance_new') as $image_target) {
    $file = (array) array_pop($files);
    $default_images[$image_target] = $file['uri'];
  }

  // Create an image field and add an instance to the post content type.
  $field_name = strtolower($this->randomName());
  $field_settings = array(
    'default_image' => $default_images['field'],
  );
  $instance_settings = array(
    'default_image' => $default_images['instance'],
  );
  $widget_settings = array(
    'preview_image_style' => 'medium',
  );
  $this->createImageField($field_name, 'post', $field_settings, $instance_settings, $widget_settings);
  $field = field_info_field($field_name);
  $instance = field_info_instance('node', $field_name, 'post');

  // Add another instance with another default image to the page content type.
  $instance2 = array_merge($instance, array(
    'bundle' => 'page',
    'settings' => array(
      'default_image' => $default_images['instance2'],
    ),
  ));
  field_create_instance($instance2);
  $instance2 = field_info_instance('node', $field_name, 'page');


  // Confirm the defaults are present on the post field admin form.
  $this->backdropGet("admin/structure/types/manage/post/fields/$field_name");

  // Post instance settings.
  $xpath = $this->xpath('//*[@id="edit-instance"]//div[contains(@class, "form-type-file")]//a[@href=:path]', array(':path' => file_create_url($default_images['instance'])));
  $this->assertEqual(count($xpath), 1, format_string('Post image field instance default references expected file uri of @uri.', array('@uri' => $default_images['instance'])));

  // Global field settings.
  $xpath = $this->xpath('//*[@id="edit-field"]//div[contains(@class, "form-type-file")]//a[@href=:path]', array(':path' => file_create_url($default_images['field'])));
  $this->assertEqual(count($xpath), 1, format_string('Post image field default references expected file uri of @uri.', array('@uri' => $default_images['field'])));

  // Confirm the defaults are present on the page field admin form.
  $this->backdropGet("admin/structure/types/manage/page/fields/$field_name");

  // Page instance settings.
  $xpath = $this->xpath('//*[@id="edit-instance"]//div[contains(@class, "form-type-file")]//a[@href=:path]', array(':path' => file_create_url($default_images['instance2'])));
  $this->assertEqual(count($xpath), 1, format_string('Page image field instance default references expected file uri of @uri.', array('@uri' => $default_images['instance2'])));

  // Global field settings.
  $xpath = $this->xpath('//*[@id="edit-field"]//div[contains(@class, "form-type-file")]//a[@href=:path]', array(':path' => file_create_url($default_images['field'])));
  $this->assertEqual(count($xpath), 1, format_string('Page image field default references expected file uri of @uri.', array('@uri' => $default_images['field'])));

  // Confirm that the image default is shown for a new post node.
  $post = $this->backdropCreateNode(array('type' => 'post'));
  $post_built = node_view($post);
  $this->assertEqual(
  $post_built[$field_name]['#items'][0]['uri'], 
  $default_images['instance'], 
  format_string(
  'A new post node without an image has the expected default image file URI of @uri.', 
  array('@uri' => $default_images['instance'])
  )
  );

  // Confirm that the image default is shown for a new page node.
  $page = $this->backdropCreateNode(array('type' => 'page'));
  $page_built = node_view($page);
  $this->assertEqual(
  $page_built[$field_name]['#items'][0]['uri'], 
  $default_images['instance2'], 
  format_string(
  'A new page node without an image has the expected default image file ID of @uri.', 
  array('@uri' => $default_images['instance2'])
  )
  );

  // Upload a new default for the field.
  $field['settings']['default_image'] = $default_images['field_new'];
  field_update_field($field);

  // Confirm that the new field default is used on the post admin form.
  $this->backdropGet("admin/structure/types/manage/post/fields/$field_name");
  $xpath = $this->xpath('//*[@id="edit-field"]//div[contains(@class, "form-type-file")]//a[@href=:path]', array(':path' => file_create_url($default_images['field_new'])));
  $this->assertEqual(count($xpath), 1, format_string('Updated image field default references expected file uri of @uri.', array('@uri' => $default_images['field_new'])));

  // Reload the nodes and confirm the field instance defaults are used.
  $post_built = node_view($post = node_load($post->nid, NULL, $reset = TRUE));
  $page_built = node_view($page = node_load($page->nid, NULL, $reset = TRUE));
  $this->assertEqual(
  $post_built[$field_name]['#items'][0]['uri'], 
  $default_images['instance'], 
  format_string(
  'An existing post node without an image has the expected default image file URI of @uri.', 
  array('@uri' => $default_images['instance'])
  )
  );
  $this->assertEqual(
  $page_built[$field_name]['#items'][0]['uri'], 
  $default_images['instance2'], 
  format_string(
  'An existing page node without an image has the expected default image file URI of @uri.', 
  array('@uri' => $default_images['instance2'])
  )
  );

  // Upload a new default for the post's field instance.
  $instance['settings']['default_image'] = $default_images['instance_new'];
  field_update_instance($instance);

  // Confirm the new field instance default is used on the post field
  // admin form.
  $this->backdropGet("admin/structure/types/manage/post/fields/$field_name");
  $xpath = $this->xpath('//*[@id="edit-instance"]//div[contains(@class, "form-type-file")]//a[@href=:path]', array(':path' => file_create_url($default_images['instance_new'])));
  $this->assertEqual(count($xpath), 1, format_string('Updated image field default references expected file uri of @uri.', array('@uri' => $default_images['instance_new'])));

  // Reload the nodes.
  $post_built = node_view($post = node_load($post->nid, NULL, $reset = TRUE));
  $page_built = node_view($page = node_load($page->nid, NULL, $reset = TRUE));

  // Confirm the post uses the new default.
  $this->assertEqual(
  $post_built[$field_name]['#items'][0]['uri'], 
  $default_images['instance_new'], 
  format_string(
  'An existing post node without an image has the expected default image file URI of @uri.', 
  array('@uri' => $default_images['instance_new'])
  )
  );
  // Confirm the page remains unchanged.
  $this->assertEqual(
  $page_built[$field_name]['#items'][0]['uri'], 
  $default_images['instance2'], 
  format_string(
  'An existing page node without an image has the expected default image file URI of @uri.', 
  array('@uri' => $default_images['instance2'])
  )
  );

  // Remove the instance default from posts.
  $instance['settings']['default_image'] = NULL;
  field_update_instance($instance);

  // Confirm the post field instance default has been removed.
  $this->backdropGet("admin/structure/types/manage/post/fields/$field_name");
  $xpath = $this->xpath('//*[@id="edit-instance"]//div[contains(@class, "form-type-file")]//a[@href=:path]', array(':path' => file_create_url($default_images['instance_new'])));
  $this->assertEqual(count($xpath), 0, format_string('Updated post image field instance default has been successfully removed.'));

  // Reload the nodes.
  $post_built = node_view($post = node_load($post->nid, NULL, $reset = TRUE));
  $page_built = node_view($page = node_load($page->nid, NULL, $reset = TRUE));
  // Confirm the post uses the new field (not instance) default.
  $this->assertEqual(
  $post_built[$field_name]['#items'][0]['uri'], 
  $default_images['field_new'], 
  format_string(
  'An existing post node without an image has the expected default image file URI of @uri.', 
  array('@uri' => $default_images['field_new'])
  )
  );
  // Confirm the page remains unchanged.
  $this->assertEqual(
  $page_built[$field_name]['#items'][0]['uri'], 
  $default_images['instance2'], 
  format_string(
  'An existing page node without an image has the expected default image file URI of @uri.', 
  array('@uri' => $default_images['instance2'])
  )
  );
}