FieldExampleTest

  1. examples
    1. 7 field_example/field_example.test
    2. 8 field_example/field_example.test

Hierarchy

Functions & methods

NameDescription
FieldExampleTest::create_fieldUtility function to create fields on a content type.
FieldExampleTest::getInfo
FieldExampleTest::setUp
FieldExampleTest::testExampleFieldBasicTest basic functionality of the example field.

File

field_example/field_example.test, line 7
Tests for Field Example.

View source
class FieldExampleTest extends DrupalWebTestCase {

  public static function getInfo() {
    return array(
      'name' => 'Field Example', 
      'description' => 'Create a content type with example_field_rgb fields, create a node, check for correct values.', 
      'group' => 'Examples',
    );
  }
  function setUp() {
    // Enable the email_example module.
    parent::setUp(array('field_ui', 'field_example'));
  }

  /**
   * Test basic functionality of the example field.
   *
   * - Creates a content type.
   * - Adds a single-valued field_example_rgb to it.
   * - Adds a multivalued field_example_rgb to it.
   * - Creates a node of the new type.
   * - Populates the single-valued field.
   * - Populates the multivalued field with two items.
   * - Tests the result.
   */
  function testExampleFieldBasic() {
    $content_type_machine = strtolower($this->randomName(10));
    $title = $this->randomName(20);

    // Create and login user.
    $account = $this->drupalCreateUser(array('administer content types'));
    $this->drupalLogin($account);

    $this->drupalGet('admin/structure/types');

    // Create the content type.
    $this->clickLink(t('Add content type'));

    $edit = array(
      'name' => $content_type_machine, 
      'type' => $content_type_machine,
    );
    $this->drupalPost(NULL, $edit, t('Save and add fields'));
    $this->assertText(t('The content type @name has been added.', array('@name' => $content_type_machine)));

    $single_text_field = strtolower($this->randomName(10));
    $single_colorpicker_field = strtolower($this->randomName(10));
    $single_3text_field = strtolower($this->randomName(10));
    $multivalue_3text_field = strtolower($this->randomName(10));

    // Description of fields to be created;
    $fields[$single_text_field] = array(
      'widget' => 'field_example_text', 
      'cardinality' => '1',
    );
    $fields[$single_colorpicker_field] = array(
      'widget' => 'field_example_colorpicker', 
      'cardinality' => 1,
    );
    $fields[$single_3text_field] = array(
      'widget' => 'field_example_3text', 
      'cardinality' => 1,
    );
    $fields[$multivalue_3text_field] = array(
      'widget' => 'field_example_3text', 
      'cardinality' => -1,
    );

    foreach ($fields as $fieldname => $details) {
      $this->create_field($fieldname, $details['widget'], $details['cardinality']);
    }

    // Somehow clicking "save" isn't enough, and we have to do a
    // node_types_rebuild().
    node_types_rebuild();
    menu_rebuild();
    $type_exists = db_query('SELECT 1 FROM {node_type} WHERE type = :type', array(':type' => $content_type_machine))->fetchField();
    $this->assertTrue($type_exists, 'The new content type has been created in the database.');

    $permission = 'create ' . $content_type_machine . ' content';
    // Reset the permissions cache.
    $this->checkPermissions(array($permission), TRUE);

    // Now that we have a new content type, create a user that has privileges
    // on the content type.
    $account = $this->drupalCreateUser(array($permission));
    $this->drupalLogin($account);

    $this->drupalGet('node/add/' . $content_type_machine);

    // Add a node.
    $edit = array(
      'title' => $title, 
      'field_' . $single_text_field . '[und][0][rgb]' => '#000001', 
      'field_' . $single_colorpicker_field . '[und][0][rgb]' => '#000002', 
      'field_' . $single_3text_field . '[und][0][rgb][r]' => '00', 
      'field_' . $single_3text_field . '[und][0][rgb][g]' => '00', 
      'field_' . $single_3text_field . '[und][0][rgb][b]' => '03', 
      'field_' . $multivalue_3text_field . '[und][0][rgb][r]' => '00', 
      'field_' . $multivalue_3text_field . '[und][0][rgb][g]' => '00', 
      'field_' . $multivalue_3text_field . '[und][0][rgb][b]' => '04',
    );
    // We want to add a 2nd item to the multivalue field, so hit "add another".
    $this->drupalPost(NULL, $edit, t('Add another item'));

    $edit = array(
      'field_' . $multivalue_3text_field . '[und][1][rgb][r]' => '00', 
      'field_' . $multivalue_3text_field . '[und][1][rgb][g]' => '00', 
      'field_' . $multivalue_3text_field . '[und][1][rgb][b]' => '05',
    );
    // Now we can fill in the second item in the multivalue field and save.
    $this->drupalPost(NULL, $edit, t('Save'));
    $this->assertText(t('@content_type_machine @title has been created', array('@content_type_machine' => $content_type_machine, '@title' => $title)));


    $output_strings = $this->xpath("//div[contains(@class,'field-type-field-example-rgb')]/div/div/p/text()");

    $this->assertEqual((string) $output_strings[0], t("The color code in this field is #000001"));
    $this->assertEqual((string) $output_strings[1], t("The color code in this field is #000002"));
    $this->assertEqual((string) $output_strings[2], t("The color code in this field is #000003"));
    $this->assertEqual((string) $output_strings[3], t("The color code in this field is #000004"));
    $this->assertEqual((string) $output_strings[4], t("The color code in this field is #000005"));
  }

  /**
   * Utility function to create fields on a content type.
   * @param $field_name
   *   Name of the field, like field_something
   * @param $widget_type
   *   Widget type, like field_example_3text
   * @param $cardinality
   *   Cardinality
   */
  protected function create_field($field_name, $widget_type, $cardinality) {
    // Add a singleton field_example_text field.
    $edit = array(
      'fields[_add_new_field][label]' => $field_name, 
      'fields[_add_new_field][field_name]' => $field_name, 
      'fields[_add_new_field][type]' => 'field_example_rgb', 
      'fields[_add_new_field][widget_type]' => $widget_type,
    );
    $this->drupalPost(NULL, $edit, t('Save'));

    // There are no settings for this, so just press the button.
    $this->drupalPost(NULL, array(), t('Save field settings'));

    $edit = array('field[cardinality]' => (string) $cardinality);

    // Using all the default settings, so press the button.
    $this->drupalPost(NULL, $edit, t('Save settings'));
    debug(t('Saved settings for field %field_name with widget %widget_type and cardinality %cardinality', array('%field_name' => $field_name, '%widget_type' => $widget_type, '%cardinality' => $cardinality)));
    $this->assertText(t('Saved @name configuration.', array('@name' => $field_name)));
  }
}
Login or register to post comments