You are here

public function ExifCustomTestCase::testProcess in EXIF Custom 7

Run through the module's normal functionality.

File

tests/ExifCustomTestCase.test, line 57
Test all functionality of EXIF Custom

Class

ExifCustomTestCase
Test all functionality of EXIF Custom.

Code

public function testProcess() {
  $module_path = drupal_get_path('module', 'exif_custom');
  $file1 = $module_path . '/tests/test_image1.jpg';
  $file2 = $module_path . '/tests/test_image2.jpg';
  $expected_values = array(
    1 => array(
      'title' => 'Test image title',
      'caption' => 'Test image caption',
      'description' => 'Test image description.',
    ),
    2 => array(
      'title' => 'Test image title 2',
      'caption' => 'Test image caption 2',
      'description' => 'Test image description 2.',
    ),
  );

  // Before anything else, upload an image to confirm how the module works
  // before it's properly configured.
  $this
    ->drupalGet('file/add');
  $this
    ->assertResponse(200);
  $edit = array(
    'files[upload]' => drupal_realpath($file1),
  );
  $this
    ->drupalPost(NULL, $edit, t('Next'));
  if ($this
    ->xpath('//input[@name="scheme"]')) {
    $this
      ->drupalPost(NULL, array(), t('Next'));
  }

  // Load the edit form and confirm the values are empty.
  $this
    ->drupalGet('file/1/edit');
  $this
    ->assertResponse(200);
  $this
    ->assertFieldByName('field_file_image_title_text[und][0][value]', '');
  $this
    ->assertFieldByName('field_file_image_alt_text[und][0][value]', '');

  // Create a mapping. Use the example image for this.
  $this
    ->drupalGet('admin/config/media/exif_custom/add');
  $this
    ->assertResponse(200);
  $edit = array(
    'name' => 'Test mapping',
    'files[example_file]' => drupal_realpath($file1),
  );
  $this
    ->drupalPost(NULL, $edit, 'Save');
  $this
    ->assertResponse(200);

  // Make sure the mapping was saved.
  $this
    ->assertText('New EXIF mapping has been saved: Test mapping');

  // Confirm the expected values were found.
  // EXIF:COMPUTED:Copyright.
  $this
    ->assertText('Creative Commons Attribute-ShareAlike license 2.0');

  // EXIF:COMPUTED:Width and EXIF:EXIF:ExifImageWidth.
  $this
    ->assertText('236');

  // EXIF:COMPUTED:html
  $this
    ->assertText('width="236" height="185"');

  // EXIF:COMPUTED:Height and EXIF:EXIF:ExifImageLength.
  $this
    ->assertText('185');

  // EXIF:EXIF:DateTimeDigitized, EXIF:EXIF:DateTimeOriginal and
  // EXIF:IFD0:DateTime.
  $this
    ->assertText('2009:01:04 12:00:00');

  // EXIF:FILE:FileName.
  $this
    ->assertText('test_image1.jpg');

  // EXIF:FILE:FileSize.
  $this
    ->assertText('17523');

  // EXIF:FILE:MimeType.
  $this
    ->assertText('image/jpeg');

  // EXIF:FILE:SectionsFound.
  $this
    ->assertText('ANY_TAG, IFD0, EXIF');

  // EXIF:IFD0:Artist.
  $this
    ->assertText('Damien McKenna');

  // EXIF:IFD0:Exif_IFD_Pointer.
  $this
    ->assertText('248');

  // EXIF:IFD0:ImageDescription.
  $this
    ->assertText('Test image description.');

  // EXIF:IFD0:XResolution and EXIF:IFD0:YResolution.
  $this
    ->assertText('180/1');

  // IPTC:2#005.
  $this
    ->assertText('Test image title');

  // IPTC:2#025.
  $this
    ->assertText('Test, image, keywords');

  // IPTC:2#120.
  $this
    ->assertText('Test image caption');

  // Update the definition.
  $edit = array(
    // Description.
    'img_field:EXIF:IFD0:ImageDescription' => 'field_file_image_alt_text',
    // Caption.
    'img_field:IPTC:2#005' => 'field_file_image_title_text',
  );
  $this
    ->drupalPost(NULL, $edit, 'Save');
  $this
    ->assertResponse(200);
  $this
    ->assertText('The mapping has been updated.');

  // Set the global mapping.
  $this
    ->drupalGet('admin/config/media/exif_custom/settings');
  $this
    ->assertResponse(200);
  $this
    ->assertNoText('No mappings have been created yet.');
  $this
    ->assertFieldByName('exif_custom_default');
  $this
    ->assertFieldByName('exif_custom_exclude_paths');
  $edit = array(
    'exif_custom_default' => 1,
  );
  $this
    ->drupalPost(NULL, $edit, 'Save configuration');
  $this
    ->assertResponse(200);

  // Make sure the settings saved.
  $this
    ->assertText('The configuration options have been saved.');
  $this
    ->assertFieldByName('exif_custom_default', 1);

  // Upload an image.
  $this
    ->drupalGet('file/add');
  $this
    ->assertResponse(200);
  $edit = array(
    'files[upload]' => drupal_realpath($file2),
  );
  $this
    ->drupalPost(NULL, $edit, t('Next'));
  if ($this
    ->xpath('//input[@name="scheme"]')) {
    $this
      ->drupalPost(NULL, array(), t('Next'));
  }

  // Verify the values were saved correctly.
  $file = $this
    ->getFileByFilename('test_image2.jpg');
  $this
    ->verbose($file);
  $this
    ->assertTrue(isset($file->field_file_image_title_text[LANGUAGE_NONE][0]['value']));
  if (isset($file->field_file_image_title_text[LANGUAGE_NONE][0]['value'])) {
    $this
      ->assertEqual($file->field_file_image_title_text[LANGUAGE_NONE][0]['value'], $expected_values[2]['title']);
  }
  $this
    ->assertTrue(isset($file->field_file_image_alt_text[LANGUAGE_NONE][0]['value']));
  if (isset($file->field_file_image_alt_text[LANGUAGE_NONE][0]['value'])) {
    $this
      ->assertEqual($file->field_file_image_alt_text[LANGUAGE_NONE][0]['value'], $expected_values[2]['description']);
  }

  // Edit the image.
  $this
    ->drupalGet('file/3/edit');
  $this
    ->assertResponse(200);
  $this
    ->assertFieldByName('field_file_image_title_text[und][0][value]', $expected_values[2]['title']);
  $this
    ->assertFieldByName('field_file_image_alt_text[und][0][value]', $expected_values[2]['description']);

  // Change the fields.
  $title_value = 'Title field';
  $alt_value = 'Alt field';
  $edit = array(
    'field_file_image_title_text[und][0][value]' => $title_value,
    'field_file_image_alt_text[und][0][value]' => $alt_value,
  );
  $this
    ->drupalPost(NULL, $edit, 'Save');
  $this
    ->assertResponse(200);

  // Load the image form again and verify the values changed.
  $this
    ->drupalGet('file/3/edit');
  $this
    ->assertResponse(200);
  $this
    ->assertFieldByName('field_file_image_title_text[und][0][value]', $title_value);
  $this
    ->assertFieldByName('field_file_image_alt_text[und][0][value]', $alt_value);

  // Set the global settings to force reloading EXIF data when images are
  // updated.
  $this
    ->drupalGet('admin/config/media/exif_custom/settings');
  $this
    ->assertResponse(200);
  $edit = array(
    'exif_custom_overwrite_existing' => TRUE,
  );
  $this
    ->drupalPost(NULL, $edit, 'Save configuration');
  $this
    ->assertResponse(200);
  $this
    ->assertText('The configuration options have been saved.');

  // Load the image form again just save it as-is.
  $this
    ->drupalGet('file/3/edit');
  $this
    ->assertResponse(200);
  $this
    ->drupalPost(NULL, array(), 'Save');
  $this
    ->assertResponse(200);

  // Load the image form again and confirm that the values are back to the
  // parsed EXIF values.
  $this
    ->drupalGet('file/3/edit');
  $this
    ->assertResponse(200);
  $this
    ->assertFieldByName('field_file_image_title_text[und][0][value]', $expected_values[2]['title']);
  $this
    ->assertFieldByName('field_file_image_alt_text[und][0][value]', $expected_values[2]['description']);
}