function FieldExampleTest::testExampleFieldBasic
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.
File
-
field_example/
field_example.test, line 44
Class
- FieldExampleTest
- Functional tests for the Field Example module.
Code
public function testExampleFieldBasic() {
$content_type_machine = strtolower($this->randomName(10));
$title = $this->randomName(20);
// Create and login user.
$account = $this->drupalCreateUser(array(
'administer content types',
'administer fields',
));
$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->createField($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], "The color code in this field is #000001");
$this->assertEqual((string) $output_strings[1], "The color code in this field is #000002");
$this->assertEqual((string) $output_strings[2], "The color code in this field is #000003");
$this->assertEqual((string) $output_strings[3], "The color code in this field is #000004");
$this->assertEqual((string) $output_strings[4], "The color code in this field is #000005");
}