You are here

content_migrate.test in Content Construction Kit (CCK) 7.3

Content Migrate Test Cases

File

modules/content_migrate/tests/content_migrate.test
View source
<?php

/**
 * @file Content Migrate Test Cases
 */

/**
 * @class Content Migrate Test Case. You should use this as the parent
 * class for your content migrate tests.
 */
class ContentMigrateTestCase extends DrupalWebTestCase {
  public $content_type;

  /**
   * In the base setUp() method we need to create a content type, and
   * Drupal 6 tables relating to CCK: content_node_field,
   * content_node_field_instance, and content_type_TYPENAME. It is up
   * to a child class to make the proper inserts into these tables.
   */
  function setUp() {
    parent::setUp('field', 'field_ui', 'content_migrate');

    // We need a content type. We don't need nodes. We'll leave that
    // to actual tests.
    $this->content_type = $this
      ->drupalCreateContentType(array());

    // We need to setup Drupal 6 CCK tables.
    $schema = $this
      ->contentDrupal6Schema();
    _drupal_schema_initialize($schema, 'content_migrate', TRUE);
    foreach ($schema as $name => $table) {
      db_create_table($name, $table);

      // Whoopie~
      $this
        ->assertTrue(db_table_exists($name), t('Table %table exists.', array(
        '%table' => $name,
      )));
    }

    // Create an admin user.
    $this->admin_user = $this
      ->drupalCreateUser(array(
      'bypass node access',
      'administer content types',
      'administer nodes',
    ));
  }
  protected function contentDrupal6Schema() {
    $schema = array(
      'content_node_field' => array(
        'fields' => array(
          'field_name' => array(
            'type' => 'varchar',
            'length' => 32,
            'not null' => TRUE,
            'default' => '',
          ),
          'type' => array(
            'type' => 'varchar',
            'length' => 127,
            'not null' => TRUE,
            'default' => '',
          ),
          'global_settings' => array(
            'type' => 'text',
            'size' => 'medium',
            'not null' => TRUE,
            'serialize' => TRUE,
          ),
          'required' => array(
            'type' => 'int',
            'size' => 'tiny',
            'not null' => TRUE,
            'default' => 0,
          ),
          'multiple' => array(
            'type' => 'int',
            'size' => 'tiny',
            'not null' => TRUE,
            'default' => 0,
          ),
          'db_storage' => array(
            'type' => 'int',
            'size' => 'tiny',
            'not null' => TRUE,
            'default' => 1,
          ),
          'module' => array(
            'type' => 'varchar',
            'length' => 127,
            'not null' => TRUE,
            'default' => '',
          ),
          'db_columns' => array(
            'type' => 'text',
            'size' => 'medium',
            'not null' => TRUE,
            'serialize' => TRUE,
          ),
          'active' => array(
            'type' => 'int',
            'size' => 'tiny',
            'not null' => TRUE,
            'default' => 0,
          ),
          'locked' => array(
            'type' => 'int',
            'size' => 'tiny',
            'not null' => TRUE,
            'default' => 0,
          ),
        ),
        'primary key' => array(
          'field_name',
        ),
      ),
      'content_node_field_instance' => array(
        'fields' => array(
          'field_name' => array(
            'type' => 'varchar',
            'length' => 32,
            'not null' => TRUE,
            'default' => '',
          ),
          'type_name' => array(
            'type' => 'varchar',
            'length' => 32,
            'not null' => TRUE,
            'default' => '',
          ),
          'weight' => array(
            'type' => 'int',
            'not null' => TRUE,
            'default' => 0,
          ),
          'label' => array(
            'type' => 'varchar',
            'length' => 255,
            'not null' => TRUE,
            'default' => '',
          ),
          'widget_type' => array(
            'type' => 'varchar',
            'length' => 32,
            'not null' => TRUE,
            'default' => '',
          ),
          'widget_settings' => array(
            'type' => 'text',
            'size' => 'medium',
            'not null' => TRUE,
            'serialize' => TRUE,
          ),
          'display_settings' => array(
            'type' => 'text',
            'size' => 'medium',
            'not null' => TRUE,
            'serialize' => TRUE,
          ),
          'description' => array(
            'type' => 'text',
            'size' => 'medium',
            'not null' => TRUE,
          ),
          'widget_module' => array(
            'type' => 'varchar',
            'length' => 127,
            'not null' => TRUE,
            'default' => '',
          ),
          'widget_active' => array(
            'type' => 'int',
            'size' => 'tiny',
            'not null' => TRUE,
            'default' => 0,
          ),
        ),
        'primary key' => array(
          'field_name',
          'type_name',
        ),
      ),
      'content_type_' . $this->content_type->type => array(
        'fields' => array(
          'vid' => array(
            'type' => 'int',
            'not null' => TRUE,
            'default' => 0,
          ),
          'nid' => array(
            'type' => 'int',
            'not null' => TRUE,
            'default' => 0,
          ),
        ),
        'primary key' => array(
          'vid',
        ),
      ),
    );
    return $schema;
  }

  /**
   * Setup a field definition array based on parameters.
   * @param $type the field type.
   * @param $widget the widget type.
   * @param $multiple an integer referring to the field setting of that name.
   * @param $required should the field be required?
   * @param $default the default value to use.
   * @return $field field definition array
   */
  function setupField($type, $widget, $multiple = 0, $required = 0, $default = '') {

    // This is going to look a little different from exported CCK
    // fields. I want to be pretty efficient in the insert phase.
    // Apologies for any confusion this might cause.
    $field = array(
      'label' => $this
        ->randomName(8),
      'field_name' => 'field_' . strtolower($this
        ->randomName(4)),
      'type' => $type,
      'widget_type' => $widget,
      'change' => 'Change basic information',
      'op' => 'Save field settings',
      'description' => $this
        ->randomName(25),
      'module' => $type,
      'widget_module' => '',
      // fill in later
      'weight' => '0',
      'required' => $required,
      'multiple' => $multiple,
      'db_storage' => 1,
      'global_settings' => array(),
      'widget_settings' => array(
        'default_value' => array(),
        // fill in later
        'default_value_php' => '',
        // fill in later
        'default_value_widget' => NULL,
      ),
      'db_columns' => array(
        'value' => array(),
      ),
      'display_settings' => array(
        'label' => array(
          'format' => 'inline',
          'exclude' => 0,
        ),
        'teaser' => array(
          'format' => 'default',
          'exclude' => 0,
        ),
        'full' => array(
          'format' => 'default',
          'exclude' => 0,
        ),
      ),
    );
    for ($i = 0; $i <= $multiple; $i++) {
      $field['widget_settings']['default_value'][] = array(
        'value' => $default,
      );
    }
    return $field;
  }

  /**
   * Create a field, field_instance, and alter content_type table based on
   * the field definition input.
   * @param $field field definition array
   */
  public function createField($field, $shared = FALSE) {

    // Insert field
    $new_field = array(
      'field_name' => $field['field_name'],
      'type' => $field['type'],
      'global_settings' => serialize($field['global_settings']),
      'multiple' => $field['multiple'],
      'required' => $field['required'],
      'db_storage' => $field['db_storage'],
      'module' => $field['module'],
      'db_columns' => serialize($field['db_columns']),
      'active' => 1,
      'locked' => 0,
    );
    $options = array(
      'return' => Database::RETURN_INSERT_ID,
    );
    $query = db_insert('content_node_field', $options)
      ->fields($new_field);
    $ret = $query
      ->execute();
    $this
      ->assertNotIdentical($ret, FALSE, t('Successfully inserted field, %field, into content_node_field.', array(
      '%field' => $new_field['field_name'],
    )));

    // @todo Insert field_instance
    $new_instance = array(
      'field_name' => $field['field_name'],
      'type_name' => $this->content_type->type,
      'weight' => $field['weight'],
      'label' => $field['label'],
      'widget_type' => $field['widget_type'],
      'widget_settings' => serialize($field['widget_settings']),
      'display_settings' => serialize($field['display_settings']),
      'description' => $field['description'],
      'widget_module' => $field['widget_module'],
      'widget_active' => 1,
    );
    $query = db_insert('content_node_field_instance', $options)
      ->fields($new_instance);
    $ret = $query
      ->execute();
    $this
      ->assertNotIdentical($ret, FALSE, t('Successfully inserted field instance, %field %type, into content_node_field_instance.', array(
      '%field' => $new_field['field_name'],
      '%type' => $this->content_type->type,
    )));
    $table = 'content_type_' . $this->content_type->type;
    if ($field['multiple'] != 0 || $shared) {
      $table = 'content_' . $field['field_name'];
      $schema = array(
        'fields' => array(
          'vid' => array(
            'type' => 'int',
            'not null' => TRUE,
            'default' => 0,
          ),
          'nid' => array(
            'type' => 'int',
            'not null' => TRUE,
            'default' => 0,
          ),
        ),
        'primary key' => array(
          'vid',
          'delta',
        ),
        'indexes' => array(
          'nid' => array(
            'nid',
          ),
        ),
      );
      if ($field['multiple'] != 0) {
        $schema['fields']['delta'] = array(
          'type' => 'int',
          'not null' => TRUE,
          'default' => 0,
        );
      }
      db_create_table($table, $schema);
      $this
        ->assertTrue(db_table_exists($table), t('Successfully added field table %table.', array(
        '%table' => $table,
      )));
    }
    foreach ($field['db_columns'] as $key => $value) {
      $db_columns = $field['db_columns'][$key];
      foreach (array(
        'views',
        'sortable',
      ) as $item) {
        if (isset($db_columns[$item])) {
          unset($item);
        }
      }
      db_add_field($table, $field['field_name'] . '_' . $key, $db_columns);
      $this
        ->assertTrue(db_field_exists($table, $field['field_name'] . '_' . $key), t('Successfully added field %field to table %table.', array(
        '%field' => $field['field_name'],
        '%table' => $table,
      )));
    }
  }

  /**
   * Insert field data into database for a field. This will work for
   * basic fields like text, but anything more complex will require
   * it to be overridden. Multiple values should work with the delta
   * parameter and if $field is setup correctly for it from createField().
   *
   * @param $data data to insert.
   * @param $field a field definition array.
   * @param $node the node that the field data is attached to.
   * @param $table just in case, we'll include the table name
   * @param $delta defaults to NULL
   */
  public function createFieldData($data, $field, $node, $table, $delta = NULL, $shared = FALSE) {
    $fields = array(
      'vid' => $node->vid,
      'nid' => $node->nid,
    );
    foreach ($data as $key => $value) {
      $fields[$field['field_name'] . '_' . $key] = $value;
    }
    if ($field['multiple'] != 0 || $shared) {
      $table = 'content_' . $field['field_name'];
    }
    if ($field['multiple'] != 0) {
      $fields['delta'] = $delta;
    }
    $options = array(
      'return' => Database::RETURN_INSERT_ID,
    );
    $query = db_insert($table, $options)
      ->fields($fields);
    $ret = $query
      ->execute();
    $this
      ->assertNotIdentical($ret, FALSE, t('Successfully inserted %data into field %field for node %node', array(
      '%data' => serialize($data),
      '%field' => $field['field_name'],
      '%node' => $node->title,
    )));
  }

}

/**
 * @class Content Migrate Text Test Case.
 */
class ContentMigrateTextTestCase extends ContentMigrateTestCase {
  public $test_node = NULL;
  public static function getInfo() {
    return array(
      'name' => t('Content Migrate Text'),
      'description' => t('Functional tests for migrating text fields to Drupal 7.'),
      'group' => t('CCK'),
    );
  }
  function setUp() {
    parent::setUp();
  }
  function setupField($type, $widget, $multiple, $required, $default) {
    $field = parent::setupField($type, $widget, $multiple, $required, $default);
    $field['widget_module'] = 'text';
    $field['widget_settings']['rows'] = 5;
    $field['widget_settings']['size'] = '60';
    $field['global_settings']['text_processing'] = '0';
    $field['global_settings']['max_length'] = '';
    $field['global_settings']['allowed_values'] = '';
    $field['global_settings']['allowed_values_php'] = '';
    $field['db_columns']['value']['type'] = 'text';
    $field['db_columns']['value']['size'] = 'big';
    $field['db_columns']['value']['not null'] = false;
    $field['db_columns']['value']['sortable'] = true;
    $field['db_columns']['value']['views'] = true;
    if ($multiple != 0) {
      $field['db_storage'] = 0;
    }
    return $field;
  }

  /**
   * Test text field migration to Drupal 7.
   */
  function testTextFieldMigration() {

    // We need a field to migrate.
    $test_field = $this
      ->setupField('text', 'text_textfield', 0, 0, '');

    // Save the field and field_instance to the database. And alter table.
    $this
      ->createField($test_field);

    // Create a node to work with.
    $settings = array(
      'type' => $this->content_type->type,
    );
    $test_node = $this
      ->drupalCreateNode($settings);

    // Add arbitrary field data to the node.
    $value = array(
      'value' => $this
        ->randomName(10),
    );
    $this
      ->createFieldData($value, $test_field, $test_node, 'content_type_' . $settings['type']);

    // Okay, let's login.
    $this
      ->drupalLogin($this->admin_user);
    $id = str_replace('_', '-', $test_field['field_name']);
    $this
      ->drupalGet('admin/structure/content_migrate');
    $this
      ->assertNoFieldChecked('edit-available-data-' . $id, t('Found form field for CCK field %field.', array(
      '%field' => $test_field['field_name'],
    )));
    $edit = array(
      'available[data][' . $test_field['field_name'] . ']' => $test_field['field_name'],
    );
    $this
      ->drupalPost('admin/structure/content_migrate', $edit, t('Migrate selected fields'));

    // Check to see if the node has the field label on it.
    $this
      ->drupalGet('node/' . $test_node->nid);
    $this
      ->assertText($test_field['label'], t('Found field, %field, on node %node.', array(
      '%field' => $test_field['field_name'],
      '%node' => $test_node->title,
    )));

    // Check data integrity.
    $node = node_load($test_node->nid);
    $field_name = $test_field['field_name'];
    $this
      ->assertEqual($node->{$field_name}[LANGUAGE_NONE][0]['value'], $value['value'], t('Field value, %value, is equal to original value, %old.', array(
      '%value' => $node->{$test_field['field_name']}[LANGUAGE_NONE][0]['value'],
      '%old' => $value['value'],
    )));

    // Check the node edit form.
    $this
      ->drupalGet('node/' . $test_node->nid . '/edit');
    $this
      ->assertFieldById('edit-' . $id . '-' . LANGUAGE_NONE . '-0-value', $value['value'], t('Found form field on the node edit page.'));

    // Check to make sure field instance is displayed on the manage fields page.
    $this
      ->drupalGet('admin/structure/types/manage/' . $this->content_type->type . '/fields');
    $this
      ->assertText($test_field['label'], t('Found label, %label, for field, %field, on content type field administration page.', array(
      '%field' => $test_field['field_name'],
      '%label' => $test_field['label'],
    )));

    // @todo Do we want to confirm every setting?
    $this
      ->drupalGet('admin/structure/types/manage/' . $this->content_type->type . '/fields/' . $test_field['field_name']);
    $this
      ->drupalLogout();
  }

  /**
   * Test multiple revision text field migration to Drupal 7.
   */
  function testMultiRevisionTextFieldMigration() {

    // We need a field to migrate.
    $test_field = $this
      ->setupField('text', 'text_textfield', 0, 0, '');

    // Save the field and field_instance to the database. And alter table.
    $this
      ->createField($test_field);

    // Create a node with a field value.
    $settings = array(
      'type' => $this->content_type->type,
    );
    $test_node = $this
      ->drupalCreateNode($settings);
    $value = array(
      'value' => $this
        ->randomName(10),
    );
    $this
      ->createFieldData($value, $test_field, $test_node, 'content_type_' . $settings['type']);

    // Revise the node and the field value.
    $test_node2 = $this
      ->drupalCreateNode(get_object_vars($test_node));
    $value2 = array(
      'value' => $this
        ->randomName(10),
    );
    $this
      ->createFieldData($value2, $test_field, $test_node2, 'content_type_' . $settings['type']);

    // Okay, let's login.
    $this
      ->drupalLogin($this->admin_user);
    $id = str_replace('_', '-', $test_field['field_name']);
    $this
      ->drupalGet('admin/structure/content_migrate');
    $this
      ->assertNoFieldChecked('edit-available-data-' . $id, t('Found form field for CCK field %field.', array(
      '%field' => $test_field['field_name'],
    )));
    $edit = array(
      'available[data][' . $test_field['field_name'] . ']' => $test_field['field_name'],
    );
    $this
      ->drupalPost('admin/structure/content_migrate', $edit, t('Migrate selected fields'));

    // Check to see if the node has the field label on it.
    $this
      ->drupalGet('node/' . $test_node2->nid);
    $this
      ->assertText($test_field['label'], t('Found field, %field, on node %node.', array(
      '%field' => $test_field['field_name'],
      '%node' => $test_node2->title,
    )));
    $this
      ->assertText($value2['value'], t('Found field value, %value, on node %node.', array(
      '%value' => $value2['value'],
      '%node' => $test_node2->title,
    )));

    // Get previous revision
    $this
      ->drupalGet("node/{$test_node->nid}/revisions/{$test_node->vid}/view");
    $this
      ->assertText($test_field['label'], t('Found field, %field, on node %node.', array(
      '%field' => $test_field['field_name'],
      '%node' => $test_node->title,
    )));
    $this
      ->assertText($value['value'], t('Found field value, %value, on node %node.', array(
      '%value' => $value['value'],
      '%node' => $test_node->title,
    )));

    // Check data integrity.
    $node = node_load($test_node2->nid);
    $field_name = $test_field['field_name'];
    $this
      ->assertEqual($node->{$field_name}[LANGUAGE_NONE][0]['value'], $value2['value'], t('Field value, %value, is equal to original value, %old.', array(
      '%value' => $node->{$test_field['field_name']}[LANGUAGE_NONE][0]['value'],
      '%old' => $value2['value'],
    )));

    // Check the node edit form.
    $this
      ->drupalGet('node/' . $test_node2->nid . '/edit');
    $this
      ->assertFieldById('edit-' . $id . '-' . LANGUAGE_NONE . '-0-value', $value2['value'], t('Found form field on the node edit page.'));

    // Check to make sure field instance is displayed on the manage fields page.
    $this
      ->drupalGet('admin/structure/types/manage/' . $this->content_type->type . '/fields');
    $this
      ->assertText($test_field['label'], t('Found label, %label, for field, %field, on content type field administration page.', array(
      '%field' => $test_field['field_name'],
      '%label' => $test_field['label'],
    )));

    // @todo Do we want to confirm every setting?
    $this
      ->drupalGet('admin/structure/types/manage/' . $this->content_type->type . '/fields/' . $test_field['field_name']);
    $this
      ->drupalLogout();
  }

  /**
   * Test multiple valued text fields.
   */
  function testMultiValueTextFieldMigration() {

    // We need a field to migrate.
    $test_field = $this
      ->setupField('text', 'text_textfield', 3, 0, '');

    // Save the field and field_instance to the database. And alter table.
    $this
      ->createField($test_field);

    // Create a node to work with.
    $settings = array(
      'type' => $this->content_type->type,
    );
    $test_node = $this
      ->drupalCreateNode($settings);
    $values = array();

    // Add arbitrary field data to the node.
    for ($i = 0; $i < 3; $i++) {
      $values[$i] = array(
        'value' => $this
          ->randomName(10),
      );
      $this
        ->createFieldData($values[$i], $test_field, $test_node, 'content_type_' . $settings['type'], $i);
    }

    // Okay let's do the work.
    $this
      ->drupalLogin($this->admin_user);
    $id = str_replace('_', '-', $test_field['field_name']);
    $this
      ->drupalGet('admin/structure/content_migrate');
    $this
      ->assertNoFieldChecked('edit-available-data-' . $id, t('Found form field for CCK field %field.', array(
      '%field' => $test_field['field_name'],
    )));
    $edit = array(
      'available[data][' . $test_field['field_name'] . ']' => $test_field['field_name'],
    );
    $this
      ->drupalPost('admin/structure/content_migrate', $edit, t('Migrate selected fields'));

    // Check to see if the node has the field label on it.
    // @todo Check data integrity instead?
    $this
      ->drupalGet('node/' . $test_node->nid);
    $this
      ->assertText($test_field['label'], t('Found field, %field, on node %node.', array(
      '%field' => $test_field['field_name'],
      '%node' => $test_node->title,
    )));

    // Check to make sure field instance is displayed on the manage fields page.
    $this
      ->drupalGet('admin/structure/types/manage/' . $this->content_type->type . '/fields');
    $this
      ->assertText($test_field['label'], t('Found label, %label, for field, %field, on content type field administration page.', array(
      '%field' => $test_field['field_name'],
      '%label' => $test_field['label'],
    )));

    // Test the most important setting, number of values, for this test.
    $this
      ->drupalGet('admin/structure/types/manage/' . $this->content_type->type . '/fields/' . $test_field['field_name']);
    $this
      ->assertOptionSelected('edit-field-cardinality', 3, t('Number of values set to 3.'));
    $this
      ->drupalLogout();
  }

  /**
   * Test multiple node import of a text field.
   */
  function testMultiNodeTextMigrate() {

    // We need a field to migrate.
    $test_field = $this
      ->setupField('text', 'text_textfield', 0, 0, '');

    // Save the field and field_instance to the database. And alter table.
    $this
      ->createField($test_field);

    // Create a node to work with.
    $settings = array(
      'type' => $this->content_type->type,
    );
    $nodes = array();
    for ($i = 0; $i < 3; $i++) {
      $nodes[$i] = $this
        ->drupalCreateNode($settings);

      // Add arbitrary field data to the node.
      $value = array(
        'value' => $this
          ->randomName(10),
      );
      $this
        ->createFieldData($value, $test_field, $nodes[$i], 'content_type_' . $settings['type']);
    }

    // Okay let's do the work.
    $this
      ->drupalLogin($this->admin_user);
    $id = str_replace('_', '-', $test_field['field_name']);
    $this
      ->drupalGet('admin/structure/content_migrate');
    $this
      ->assertNoFieldChecked('edit-available-data-' . $id, t('Found form field for CCK field %field.', array(
      '%field' => $test_field['field_name'],
    )));
    $edit = array(
      'available[data][' . $test_field['field_name'] . ']' => $test_field['field_name'],
    );
    $this
      ->drupalPost('admin/structure/content_migrate', $edit, t('Migrate selected fields'));
    for ($i = 0; $i < 3; $i++) {

      // Check to see if the node has the field label on it.
      // @todo Check data integrity instead?
      $this
        ->drupalGet('node/' . $nodes[$i]->nid);
      $this
        ->assertText($test_field['label'], t('Found field, %field, on node %node.', array(
        '%field' => $test_field['field_name'],
        '%node' => $nodes[$i]->title,
      )));
    }

    // Check to make sure field instance is displayed on the manage fields page.
    $this
      ->drupalGet('admin/structure/types/manage/' . $this->content_type->type . '/fields');
    $this
      ->assertText($test_field['label'], t('Found label, %label, for field, %field, on content type field administration page.', array(
      '%field' => $test_field['field_name'],
      '%label' => $test_field['label'],
    )));
    $this
      ->drupalLogout();
  }

}

/**
 * @class List widget functional test case
 */
class ContentMigrateListTestCase extends ContentMigrateTestCase {
  public static function getInfo() {
    return array(
      'name' => t('Content Migrate List'),
      'description' => t('Functional tests for list widget.'),
      'group' => t('CCK'),
    );
  }
  function setUp() {
    parent::setUp();
  }

  /**
   * Slightly different from setupField in text case.
   */
  function setupField($type, $widget, $multiple, $required, $default, $values) {
    $field = parent::setupField($type, $widget, $multiple, $required, $default);
    $field['widget_module'] = 'optionwidgets';
    $field['widget_settings']['rows'] = 5;
    $field['widget_settings']['size'] = '60';
    $field['global_settings']['text_processing'] = '0';
    $field['global_settings']['max_length'] = '';
    $field['global_settings']['allowed_values'] = '';
    $i = 0;
    foreach ($values['value'] as $name => $val) {
      if ($i != 0) {
        $field['global_settings']['allowed_values'] .= "\n";
      }
      $field['global_settings']['allowed_values'] .= $name . '|' . $val;
      $i++;
    }
    $field['global_settings']['allowed_values_php'] = '';
    $field['db_columns']['value']['type'] = 'text';
    $field['db_columns']['value']['size'] = 'big';
    $field['db_columns']['value']['not null'] = false;
    $field['db_columns']['value']['sortable'] = true;
    $field['db_columns']['value']['views'] = true;
    if ($multiple != 0) {
      $field['db_storage'] = 0;
    }
    return $field;
  }
  function testSelectListMigration() {

    // We need a field to migrate.
    $values = array();
    for ($i = 0; $i < 5; $i++) {
      $val = $this
        ->randomName(10);
      $values['value'][$val] = $val;
      if ($i == 0) {
        $default = array(
          'value' => $val,
        );
      }
      else {
        if ($i == 2) {
          $data = array(
            'value' => $val,
          );
        }
      }
    }
    $test_field = $this
      ->setupField('text', 'optionwidgets_select', 0, 0, $default, $values);

    // Save the field and field_instance to the database. And alter table.
    $this
      ->createField($test_field);

    // Create a node to work with.
    $settings = array(
      'type' => $this->content_type->type,
    );
    $node = $this
      ->drupalCreateNode($settings);

    // Add arbitrary field data to the node.
    $this
      ->createFieldData($data, $test_field, $node, 'content_type_' . $settings['type']);

    // Okay let's do the work.
    $this
      ->drupalLogin($this->admin_user);
    $id = str_replace('_', '-', $test_field['field_name']);
    $this
      ->drupalGet('admin/structure/content_migrate');
    $this
      ->assertNoFieldChecked('edit-available-data-' . $id, t('Found form field for CCK field %field.', array(
      '%field' => $test_field['field_name'],
    )));
    $edit = array(
      'available[data][' . $test_field['field_name'] . ']' => $test_field['field_name'],
    );
    $this
      ->drupalPost('admin/structure/content_migrate', $edit, t('Migrate selected fields'));

    // Test data integrity
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertText($test_field['label'], t('Found field, %field, on node %node.', array(
      '%field' => $test_field['field_name'],
      '%node' => $node->title,
    )));
    $this
      ->drupalGet('node/' . $node->nid . '/edit');
    $this
      ->assertOptionSelected('edit-' . $id . '-' . LANGUAGE_NONE, $data['value'], t('Value, %value, was selected in the select list in the node edit form.', array(
      '%value' => $data['value'],
    )));

    // Check to make sure field instance is displayed on the manage fields page.
    $this
      ->drupalGet('admin/structure/types/manage/' . $this->content_type->type . '/fields');
    $this
      ->assertText($test_field['label'], t('Found label, %label, for field, %field, on content type field administration page.', array(
      '%field' => $test_field['field_name'],
      '%label' => $test_field['label'],
    )));

    // Make sure allowed values matches.
    $n = 0;
    $allowed_values = '';
    foreach ($values['value'] as $val => $label) {
      if ($n != 0) {
        $allowed_values .= "\n";
      }
      $allowed_values .= $val . '|' . $label;
      $n++;
    }
    $this
      ->drupalGet('admin/structure/types/manage/' . $this->content_type->type . '/fields/' . $test_field['field_name']);
    $this
      ->assertFieldById('edit-field-settings-allowed-values', $allowed_values, t('Found allowed values, %values, on the field edit form.', array(
      '%values' => $allowed_values,
    )));
    $this
      ->drupalLogout();
  }

}

Classes

Namesort descending Description
ContentMigrateListTestCase @class List widget functional test case
ContentMigrateTestCase @class Content Migrate Test Case. You should use this as the parent class for your content migrate tests.
ContentMigrateTextTestCase @class Content Migrate Text Test Case.