You are here

function Double_fieldTestCase::testAdminUI in Double Field 7

Test admin UI.

File

tests/double_field.test, line 44
Tests for double_field.module.

Class

Double_fieldTestCase
Tests for double field types.

Code

function testAdminUI() {
  $field_name = strtolower($this
    ->randomName(8)) . '_test';
  $field_UI_path = "admin/structure/types/manage/{$this->type}/";
  $this
    ->drupalGet($field_UI_path . 'fields');
  $subfields = array(
    'first',
    'second',
  );

  // Check whether double field type is accessible.
  $this
    ->assertFieldByXPath('//select[@id="edit-fields-add-new-field-type"]/option', 'double_field', t('Element «edit-fields-add-new-field-type» exists.'));
  $this
    ->assertFieldByXPath('//select[@id="edit-fields-add-new-field-widget-type"]/optgroup[@label="Double field"]/option', 'double_textfield', t('Element «add new field widget type» exists.'));
  $this
    ->assertFieldByXPath('//select[@id="edit-fields-add-existing-field-widget-type"]/optgroup[@label="Double field"]/option', 'double_textfield', t('Element «add existing field widget type» exists.'));

  // Add new field via admin UI.
  $edit = array(
    'fields[_add_new_field][label]' => 'Test',
    'fields[_add_new_field][field_name]' => $field_name,
    'fields[_add_new_field][type]' => 'double_field',
    'fields[_add_new_field][widget_type]' => 'double_textfield',
  );
  $this
    ->drupalPost($field_UI_path . 'fields', $edit, t('Save'));

  // Drupal adds «field» prefix to all custom fields.
  $field_name = 'field_' . $field_name;

  // Check widget settings.
  foreach ($subfields as $subfield) {
    $settings['field[settings][' . $subfield . '_maxlength]'] = mt_rand(1, 255);
    $settings['instance[widget][settings][' . $subfield . '][size]'] = mt_rand(1, 50);
    $settings['instance[widget][settings][' . $subfield . '][prefix]'] = $this
      ->randomName(mt_rand(1, 50));
    $settings['instance[widget][settings][' . $subfield . '][suffix]'] = $this
      ->randomName(mt_rand(1, 50));
  }
  $this
    ->drupalPost($field_UI_path . 'fields/' . $field_name, $settings, t('Save settings'));
  $this
    ->drupalGet($field_UI_path . 'fields/' . $field_name);
  foreach ($settings as $name => $value) {
    $real_value = $this
      ->xpath('//input[@name="' . $name . '"]/@value');
    $this
      ->assertTrue(isset($real_value[0]) && $value == $real_value[0], t('Element «%name» has correct value.', array(
      '%name' => $name,
    )));
  }

  // Check formatter settings.
  $this
    ->drupalGet($field_UI_path . 'display');
  foreach (array_keys(double_field_field_formatter_info()) as $formatter) {
    $this
      ->assertFieldByXPath('//select[@name="fields[' . $field_name . '][type]"]/option', $formatter, t('Formatter «!formatter» exists.', array(
      '!formatter' => $formatter,
    )));
  }
  $instance = field_info_instance('node', $field_name, $this->type);

  // Check default formatter settings.
  $this
    ->assertText('First suffix', t('Default_summary is displayed.'));

  // Change formatter settings.
  $instance['display']['default']['settings'] = array(
    'first' => array(
      'prefix' => $this
        ->randomName(8),
      'suffix' => $this
        ->randomName(8),
    ),
    'second' => array(
      'prefix' => $this
        ->randomName(8),
      'suffix' => $this
        ->randomName(8),
    ),
  );
  field_update_instance($instance);

  // Check formatter settings again.
  $this
    ->drupalGet($field_UI_path . 'display');
  foreach ($subfields as $subfield) {
    $this
      ->assertText(ucfirst($subfield) . ' prefix: ' . $instance['display']['default']['settings'][$subfield]['prefix'], t('The expected summary is displayed.'));
  }
}