- <?php
- * @file
- * Tests for Field Example.
- */
-
- * Functional tests for the Field Example module.
- *
- * @ingroup field_example
- */
- class FieldExampleTest extends BackdropWebTestCase {
-
-
- * {@inheritdoc}
- */
- public function setUp() {
-
- 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.
- */
- public function testExampleFieldBasic() {
- $content_type_machine = strtolower($this->randomName(10));
- $title = $this->randomName(20);
-
-
- $account = $this->backdropCreateUser(array('administer content types', 'administer fields'));
- $this->backdropLogin($account);
-
- $this->backdropGet('admin/structure/types');
-
-
- $this->clickLink(t('Add content type'));
-
- $edit = array(
- 'name' => $content_type_machine,
- 'type' => $content_type_machine,
- );
- $this->backdropPost(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));
-
-
- $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']);
- }
-
- menu_rebuild();
-
- $type_exists = config_get('node.type.' . $content_type_machine);
- $this->assertTrue($type_exists, 'The new content type has been created in the database.');
-
- $permission = 'create ' . $content_type_machine . ' content';
-
- $this->checkPermissions(array($permission), TRUE);
-
-
-
- $account = $this->backdropCreateUser(array($permission));
- $this->backdropLogin($account);
-
- $this->backdropGet('node/add/' . $content_type_machine);
-
-
- $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',
-
- );
-
- $this->backdropPost(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',
- );
-
- $this->backdropPost(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");
- }
-
-
- * Utility function to create fields on a content type.
- *
- * @param string $field_name
- * Name of the field, like field_something
- * @param string $widget_type
- * Widget type, like field_example_3text
- * @param int $cardinality
- * Cardinality
- */
- protected function createField($field_name, $widget_type, $cardinality) {
-
- $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->backdropPost(NULL, $edit, t('Save'));
-
- if ($cardinality == FIELD_CARDINALITY_UNLIMITED) {
- $edit = array(
- 'field[cardinality]' => FIELD_CARDINALITY_UNLIMITED,
- );
- }
- else {
- $edit = array(
- 'field[cardinality]' => 'number',
- 'field[cardinality_number]' => (string) $cardinality,
- );
- }
-
- $this->backdropPost(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)));
- }
- }