danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * @file
|
danielebarchiesi@4
|
5 * Contains EntityReferenceHandlersTestCase
|
danielebarchiesi@4
|
6 */
|
danielebarchiesi@4
|
7
|
danielebarchiesi@4
|
8 /**
|
danielebarchiesi@4
|
9 * Test for Entity Reference admin UI.
|
danielebarchiesi@4
|
10 */
|
danielebarchiesi@4
|
11 class EntityReferenceAdminTestCase extends DrupalWebTestCase {
|
danielebarchiesi@4
|
12 public static function getInfo() {
|
danielebarchiesi@4
|
13 return array(
|
danielebarchiesi@4
|
14 'name' => 'Entity Reference UI',
|
danielebarchiesi@4
|
15 'description' => 'Tests for the administrative UI.',
|
danielebarchiesi@4
|
16 'group' => 'Entity Reference',
|
danielebarchiesi@4
|
17 );
|
danielebarchiesi@4
|
18 }
|
danielebarchiesi@4
|
19
|
danielebarchiesi@4
|
20 public function setUp() {
|
danielebarchiesi@4
|
21 parent::setUp(array('field_ui', 'entity', 'ctools', 'entityreference'));
|
danielebarchiesi@4
|
22
|
danielebarchiesi@4
|
23 // Create test user.
|
danielebarchiesi@4
|
24 $this->admin_user = $this->drupalCreateUser(array('access content', 'administer content types'));
|
danielebarchiesi@4
|
25 $this->drupalLogin($this->admin_user);
|
danielebarchiesi@4
|
26
|
danielebarchiesi@4
|
27 // Create content type, with underscores.
|
danielebarchiesi@4
|
28 $type_name = strtolower($this->randomName(8)) . '_test';
|
danielebarchiesi@4
|
29 $type = $this->drupalCreateContentType(array('name' => $type_name, 'type' => $type_name));
|
danielebarchiesi@4
|
30 $this->type = $type->type;
|
danielebarchiesi@4
|
31 // Store a valid URL name, with hyphens instead of underscores.
|
danielebarchiesi@4
|
32 $this->hyphen_type = str_replace('_', '-', $this->type);
|
danielebarchiesi@4
|
33 }
|
danielebarchiesi@4
|
34
|
danielebarchiesi@4
|
35 protected function assertFieldSelectOptions($name, $expected_options) {
|
danielebarchiesi@4
|
36 $xpath = $this->buildXPathQuery('//select[@name=:name]', array(':name' => $name));
|
danielebarchiesi@4
|
37 $fields = $this->xpath($xpath);
|
danielebarchiesi@4
|
38 if ($fields) {
|
danielebarchiesi@4
|
39 $field = $fields[0];
|
danielebarchiesi@4
|
40 $options = $this->getAllOptionsList($field);
|
danielebarchiesi@4
|
41 return $this->assertIdentical($options, $expected_options);
|
danielebarchiesi@4
|
42 }
|
danielebarchiesi@4
|
43 else {
|
danielebarchiesi@4
|
44 return $this->fail(t('Unable to find field @name', array('@name' => $name)));
|
danielebarchiesi@4
|
45 }
|
danielebarchiesi@4
|
46 }
|
danielebarchiesi@4
|
47
|
danielebarchiesi@4
|
48 /**
|
danielebarchiesi@4
|
49 * Extract all the options of a select element.
|
danielebarchiesi@4
|
50 */
|
danielebarchiesi@4
|
51 protected function getAllOptionsList($element) {
|
danielebarchiesi@4
|
52 $options = array();
|
danielebarchiesi@4
|
53 // Add all options items.
|
danielebarchiesi@4
|
54 foreach ($element->option as $option) {
|
danielebarchiesi@4
|
55 $options[] = (string) $option['value'];
|
danielebarchiesi@4
|
56 }
|
danielebarchiesi@4
|
57 // TODO: support optgroup.
|
danielebarchiesi@4
|
58 return $options;
|
danielebarchiesi@4
|
59 }
|
danielebarchiesi@4
|
60
|
danielebarchiesi@4
|
61 public function testFieldAdminHandler() {
|
danielebarchiesi@4
|
62 $bundle_path = 'admin/structure/types/manage/' . $this->hyphen_type;
|
danielebarchiesi@4
|
63
|
danielebarchiesi@4
|
64 // First step: 'Add new field' on the 'Manage fields' page.
|
danielebarchiesi@4
|
65 $this->drupalPost($bundle_path . '/fields', array(
|
danielebarchiesi@4
|
66 'fields[_add_new_field][label]' => 'Test label',
|
danielebarchiesi@4
|
67 'fields[_add_new_field][field_name]' => 'test',
|
danielebarchiesi@4
|
68 'fields[_add_new_field][type]' => 'entityreference',
|
danielebarchiesi@4
|
69 'fields[_add_new_field][widget_type]' => 'entityreference_autocomplete',
|
danielebarchiesi@4
|
70 ), t('Save'));
|
danielebarchiesi@4
|
71
|
danielebarchiesi@4
|
72 // Node should be selected by default.
|
danielebarchiesi@4
|
73 $this->assertFieldByName('field[settings][target_type]', 'node');
|
danielebarchiesi@4
|
74 // The base handler should be selected by default.
|
danielebarchiesi@4
|
75 $this->assertFieldByName('field[settings][handler]', 'base');
|
danielebarchiesi@4
|
76
|
danielebarchiesi@4
|
77 // The base handler settings should be diplayed.
|
danielebarchiesi@4
|
78 $entity_type = 'node';
|
danielebarchiesi@4
|
79 $entity_info = entity_get_info($entity_type);
|
danielebarchiesi@4
|
80 foreach ($entity_info['bundles'] as $bundle_name => $bundle_info) {
|
danielebarchiesi@4
|
81 $this->assertFieldByName('field[settings][handler_settings][target_bundles][' . $bundle_name . ']');
|
danielebarchiesi@4
|
82 }
|
danielebarchiesi@4
|
83
|
danielebarchiesi@4
|
84 // Test the sort settings.
|
danielebarchiesi@4
|
85 $options = array('none', 'property', 'field');
|
danielebarchiesi@4
|
86 $this->assertFieldSelectOptions('field[settings][handler_settings][sort][type]', $options);
|
danielebarchiesi@4
|
87 // Option 0: no sort.
|
danielebarchiesi@4
|
88 $this->assertFieldByName('field[settings][handler_settings][sort][type]', 'none');
|
danielebarchiesi@4
|
89 $this->assertNoFieldByName('field[settings][handler_settings][sort][property]');
|
danielebarchiesi@4
|
90 $this->assertNoFieldByName('field[settings][handler_settings][sort][field]');
|
danielebarchiesi@4
|
91 $this->assertNoFieldByName('field[settings][handler_settings][sort][direction]');
|
danielebarchiesi@4
|
92 // Option 1: sort by property.
|
danielebarchiesi@4
|
93 $this->drupalPostAJAX(NULL, array('field[settings][handler_settings][sort][type]' => 'property'), 'field[settings][handler_settings][sort][type]');
|
danielebarchiesi@4
|
94 $this->assertFieldByName('field[settings][handler_settings][sort][property]', '');
|
danielebarchiesi@4
|
95 $this->assertNoFieldByName('field[settings][handler_settings][sort][field]');
|
danielebarchiesi@4
|
96 $this->assertFieldByName('field[settings][handler_settings][sort][direction]', 'ASC');
|
danielebarchiesi@4
|
97 // Option 2: sort by field.
|
danielebarchiesi@4
|
98 $this->drupalPostAJAX(NULL, array('field[settings][handler_settings][sort][type]' => 'field'), 'field[settings][handler_settings][sort][type]');
|
danielebarchiesi@4
|
99 $this->assertNoFieldByName('field[settings][handler_settings][sort][property]');
|
danielebarchiesi@4
|
100 $this->assertFieldByName('field[settings][handler_settings][sort][field]', '');
|
danielebarchiesi@4
|
101 $this->assertFieldByName('field[settings][handler_settings][sort][direction]', 'ASC');
|
danielebarchiesi@4
|
102 // Set back to no sort.
|
danielebarchiesi@4
|
103 $this->drupalPostAJAX(NULL, array('field[settings][handler_settings][sort][type]' => 'none'), 'field[settings][handler_settings][sort][type]');
|
danielebarchiesi@4
|
104
|
danielebarchiesi@4
|
105 // Second step: 'Instance settings' form.
|
danielebarchiesi@4
|
106 $this->drupalPost(NULL, array(), t('Save field settings'));
|
danielebarchiesi@4
|
107
|
danielebarchiesi@4
|
108 // Third step: confirm.
|
danielebarchiesi@4
|
109 $this->drupalPost(NULL, array(), t('Save settings'));
|
danielebarchiesi@4
|
110
|
danielebarchiesi@4
|
111 // Check that the field appears in the overview form.
|
danielebarchiesi@4
|
112 $this->assertFieldByXPath('//table[@id="field-overview"]//td[1]', 'Test label', t('Field was created and appears in the overview page.'));
|
danielebarchiesi@4
|
113 }
|
danielebarchiesi@4
|
114 }
|