annotate sites/all/modules/link/tests/link.crud_browser.test @ 13:134d4b2e75f6

updated quicktabs and google analytics modules
author danieleb <danielebarchiesi@me.com>
date Tue, 29 Oct 2013 13:48:59 +0000
parents ce11bbd8f642
children
rev   line source
danielebarchiesi@4 1 <?php
danielebarchiesi@4 2
danielebarchiesi@4 3 /**
danielebarchiesi@4 4 * @file
danielebarchiesi@4 5 * Testing CRUD API in the browser.
danielebarchiesi@4 6 */
danielebarchiesi@4 7
danielebarchiesi@4 8 /**
danielebarchiesi@4 9 * Testing that users can not input bad URLs or labels
danielebarchiesi@4 10 */
danielebarchiesi@4 11 class LinkUITest extends DrupalWebTestcase {
danielebarchiesi@4 12
danielebarchiesi@4 13 /**
danielebarchiesi@4 14 * Link supposed to be good
danielebarchiesi@4 15 */
danielebarchiesi@4 16 const LINK_INPUT_TYPE_GOOD = 0;
danielebarchiesi@4 17
danielebarchiesi@4 18 /**
danielebarchiesi@4 19 * Link supposed to have a bad title
danielebarchiesi@4 20 */
danielebarchiesi@4 21 const LINK_INPUT_TYPE_BAD_TITLE = 1;
danielebarchiesi@4 22
danielebarchiesi@4 23 /**
danielebarchiesi@4 24 * Link supposed to have a bad URL
danielebarchiesi@4 25 */
danielebarchiesi@4 26 const LINK_INPUT_TYPE_BAD_URL = 2;
danielebarchiesi@4 27
danielebarchiesi@4 28 public static function getInfo() {
danielebarchiesi@4 29 return array(
danielebarchiesi@4 30 'name' => 'Link CRUD - browser test',
danielebarchiesi@4 31 'description' => 'Tests the field CRUD (create, read, update, delete) API 2.',
danielebarchiesi@4 32 'group' => 'Link',
danielebarchiesi@4 33 );
danielebarchiesi@4 34 }
danielebarchiesi@4 35
danielebarchiesi@4 36 function setUp() {
danielebarchiesi@4 37 parent::setUp('field_ui', 'link');
danielebarchiesi@4 38 }
danielebarchiesi@4 39
danielebarchiesi@4 40 /**
danielebarchiesi@4 41 * Creates a link field for the "page" type and creates a page with a link.
danielebarchiesi@4 42 */
danielebarchiesi@4 43 function testLinkCreate() {
danielebarchiesi@4 44 //libxml_use_internal_errors(true);
danielebarchiesi@4 45 $this->web_user = $this->drupalCreateUser(array(
danielebarchiesi@4 46 'administer content types',
danielebarchiesi@4 47 'administer nodes',
danielebarchiesi@4 48 'administer filters',
danielebarchiesi@4 49 'access content',
danielebarchiesi@4 50 'create page content',
danielebarchiesi@4 51 'access administration pages'
danielebarchiesi@4 52 ));
danielebarchiesi@4 53 $this->drupalLogin($this->web_user);
danielebarchiesi@4 54
danielebarchiesi@4 55 // create field
danielebarchiesi@4 56 $name = strtolower($this->randomName());
danielebarchiesi@4 57 $edit = array(
danielebarchiesi@4 58 'fields[_add_new_field][label]' => $name,
danielebarchiesi@4 59 'fields[_add_new_field][field_name]' => $name,
danielebarchiesi@4 60 'fields[_add_new_field][type]' => 'link_field',
danielebarchiesi@4 61 'fields[_add_new_field][widget_type]' => 'link_field',
danielebarchiesi@4 62 );
danielebarchiesi@4 63 $this->drupalPost('admin/structure/types/manage/page/fields', $edit, t('Save'));
danielebarchiesi@4 64 $this->drupalPost(NULL, array(), t('Save field settings'));
danielebarchiesi@4 65 $this->drupalPost(NULL, array(), t('Save settings'));
danielebarchiesi@4 66
danielebarchiesi@4 67 // Is field created?
danielebarchiesi@4 68 $this->assertRaw(t('Saved %label configuration', array('%label' => $name)), 'Field added');
danielebarchiesi@4 69 node_types_rebuild();
danielebarchiesi@4 70 menu_rebuild();
danielebarchiesi@4 71
danielebarchiesi@4 72 $permission = 'create page content';
danielebarchiesi@4 73 $this->checkPermissions(array($permission), TRUE);
danielebarchiesi@4 74
danielebarchiesi@4 75 // create page form
danielebarchiesi@4 76 //$this->drupalGet('node/add');
danielebarchiesi@4 77 $this->drupalGet('node/add/page');
danielebarchiesi@4 78 $field_name = 'field_' . $name;
danielebarchiesi@4 79 $this->assertField('edit-field-'. $name .'-und-0-title', 'Title found');
danielebarchiesi@4 80 $this->assertField('edit-field-'. $name .'-und-0-url', 'URL found');
danielebarchiesi@4 81
danielebarchiesi@4 82 $input_test_cases = array(
danielebarchiesi@4 83 array(
danielebarchiesi@4 84 'href' => 'http://example.com/' . $this->randomName(),
danielebarchiesi@4 85 'label' => $this->randomName(),
danielebarchiesi@4 86 'msg' => 'Link found',
danielebarchiesi@4 87 'type' => self::LINK_INPUT_TYPE_GOOD
danielebarchiesi@4 88 ),
danielebarchiesi@4 89 array(
danielebarchiesi@4 90 'href' => 'http://example.com/' . $this->randomName(),
danielebarchiesi@4 91 'label' => $this->randomName() . '<script>alert("hi");</script>',
danielebarchiesi@4 92 'msg' => 'js label',
danielebarchiesi@4 93 'type' => self::LINK_INPUT_TYPE_BAD_TITLE
danielebarchiesi@4 94 ),
danielebarchiesi@4 95 array(
danielebarchiesi@4 96 'href' => 'http://example.com/' . $this->randomName(),
danielebarchiesi@4 97 'label' => $this->randomName() . '<script src="http://devil.site.com"></script>',
danielebarchiesi@4 98 'msg' => 'js label',
danielebarchiesi@4 99 'type' => self::LINK_INPUT_TYPE_BAD_TITLE
danielebarchiesi@4 100 ),
danielebarchiesi@4 101 array(
danielebarchiesi@4 102 'href' => 'http://example.com/' . $this->randomName(),
danielebarchiesi@4 103 'label' => $this->randomName() . '" onmouseover="alert(\'hi\')',
danielebarchiesi@4 104 'msg' => 'js label',
danielebarchiesi@4 105 'type' => self::LINK_INPUT_TYPE_BAD_TITLE
danielebarchiesi@4 106 ),
danielebarchiesi@4 107 array(
danielebarchiesi@4 108 'href' => 'http://example.com/' . $this->randomName(),
danielebarchiesi@4 109 'label' => $this->randomName() . '\' onmouseover="alert(\'hi\')',
danielebarchiesi@4 110 'msg' => 'js label',
danielebarchiesi@4 111 'type' => self::LINK_INPUT_TYPE_BAD_TITLE
danielebarchiesi@4 112 ),
danielebarchiesi@4 113 array(
danielebarchiesi@4 114 'href' => 'javascript:alert("http://example.com/' . $this->randomName() . '")',
danielebarchiesi@4 115 'label' => $this->randomName(),
danielebarchiesi@4 116 'msg' => 'js url',
danielebarchiesi@4 117 'type' => self::LINK_INPUT_TYPE_BAD_URL
danielebarchiesi@4 118 ),
danielebarchiesi@4 119 );
danielebarchiesi@4 120 $test_case = array(
danielebarchiesi@4 121 'href' => 'www.example.com/'. $this->randomName(),
danielebarchiesi@4 122 'label' => $this->randomName(),
danielebarchiesi@4 123 'msg' => 'Link found',
danielebarchiesi@4 124 'type' => self::LINK_INPUT_TYPE_GOOD,
danielebarchiesi@4 125 );
danielebarchiesi@4 126 $test_case['expected_href'] = 'http://'. $test_case['href'];
danielebarchiesi@4 127 $input_test_cases[] = $test_case;
danielebarchiesi@4 128
danielebarchiesi@4 129 foreach ($input_test_cases as $input) {
danielebarchiesi@4 130 $this->drupalLogin($this->web_user);
danielebarchiesi@4 131 $this->drupalGet('node/add/page');
danielebarchiesi@4 132
danielebarchiesi@4 133 $edit = array(
danielebarchiesi@4 134 'title' => $input['label'],
danielebarchiesi@4 135 $field_name . '[und][0][title]' => $input['label'],
danielebarchiesi@4 136 $field_name . '[und][0][url]' => $input['href'],
danielebarchiesi@4 137 );
danielebarchiesi@4 138 $this->drupalPost(NULL, $edit, t('Save'));
danielebarchiesi@4 139 if ($input['type'] == self::LINK_INPUT_TYPE_BAD_URL) {
danielebarchiesi@4 140 $this->assertRaw(t('The value provided for %field is not a valid URL.', array('%field' => $name)), 'Not a valid URL: ' . $input['href']);
danielebarchiesi@4 141 continue;
danielebarchiesi@4 142 }
danielebarchiesi@4 143 else {
danielebarchiesi@4 144 $this->assertRaw(t(' has been created.',
danielebarchiesi@4 145 array('@type' => 'Basic Page', '%title' => $edit['title'])),
danielebarchiesi@4 146 'Page created: ' . $input['href']);
danielebarchiesi@4 147 }
danielebarchiesi@4 148 $url = $this->getUrl();
danielebarchiesi@4 149
danielebarchiesi@4 150 // change to anonym user
danielebarchiesi@4 151 $this->drupalLogout();
danielebarchiesi@4 152
danielebarchiesi@4 153 $this->drupalGet($url);
danielebarchiesi@4 154 //debug($this);
danielebarchiesi@4 155 // If simpletest starts using something to override the error system, this will flag
danielebarchiesi@4 156 // us and let us know it's broken.
danielebarchiesi@4 157 $this->assertFalse(libxml_use_internal_errors(TRUE));
danielebarchiesi@4 158 if (isset($input['expected_href'])) {
danielebarchiesi@4 159 $path = '//a[@href="'. $input['expected_href'] .'" and text()="'. $input['label'] .'"]';
danielebarchiesi@4 160 }
danielebarchiesi@4 161 else {
danielebarchiesi@4 162 $path = '//a[@href="'. $input['href'] .'" and text()="'. $input['label'] .'"]';
danielebarchiesi@4 163 }
danielebarchiesi@4 164 //$this->pass(htmlentities($path));
danielebarchiesi@4 165 $elements = $this->xpath($path);
danielebarchiesi@4 166 libxml_use_internal_errors(FALSE);
danielebarchiesi@4 167 $this->assertIdentical(isset($elements[0]), $input['type'] == self::LINK_INPUT_TYPE_GOOD, $input['msg']);
danielebarchiesi@4 168 }
danielebarchiesi@4 169 //libxml_use_internal_errors(FALSE);
danielebarchiesi@4 170 }
danielebarchiesi@4 171
danielebarchiesi@4 172 /**
danielebarchiesi@4 173 * Testing that if you use <strong> in a static title for your link, that the
danielebarchiesi@4 174 * title actually displays <strong>.
danielebarchiesi@4 175 */
danielebarchiesi@4 176 function testStaticLinkCreate() {
danielebarchiesi@4 177 $this->web_user = $this->drupalCreateUser(array('administer content types', 'access content', 'create page content'));
danielebarchiesi@4 178 $this->drupalLogin($this->web_user);
danielebarchiesi@4 179
danielebarchiesi@4 180 // create field
danielebarchiesi@4 181 $name = strtolower($this->randomName());
danielebarchiesi@4 182 $field_name = 'field_'. $name;
danielebarchiesi@4 183 $edit = array(
danielebarchiesi@4 184 'fields[_add_new_field][label]' => $name,
danielebarchiesi@4 185 'fields[_add_new_field][field_name]' => $name,
danielebarchiesi@4 186 'fields[_add_new_field][type]' => 'link_field',
danielebarchiesi@4 187 'fields[_add_new_field][widget_type]' => 'link_field',
danielebarchiesi@4 188 );
danielebarchiesi@4 189 $this->drupalPost('admin/structure/types/manage/page/fields', $edit, t('Save'));
danielebarchiesi@4 190 $this->drupalPost(NULL, array(), t('Save field settings'));
danielebarchiesi@4 191 $this->drupalPost(NULL, array(
danielebarchiesi@4 192 'instance[settings][title]' => 'value',
danielebarchiesi@4 193 'instance[settings][title_value]' => '<strong>'. $name .'</strong>'), t('Save settings'));
danielebarchiesi@4 194
danielebarchiesi@4 195 // Is field created?
danielebarchiesi@4 196 $this->assertRaw(t('Saved %label configuration', array('%label' => $name)), 'Field added');
danielebarchiesi@4 197
danielebarchiesi@4 198 // create page form
danielebarchiesi@4 199 $this->drupalGet('node/add/page');
danielebarchiesi@4 200 $this->assertField($field_name . '[und][0][url]', 'URL found');
danielebarchiesi@4 201
danielebarchiesi@4 202 $input = array(
danielebarchiesi@4 203 'href' => 'http://example.com/' . $this->randomName()
danielebarchiesi@4 204 );
danielebarchiesi@4 205
danielebarchiesi@4 206 $edit = array(
danielebarchiesi@4 207 'title' => $name,
danielebarchiesi@4 208 $field_name . '[und][0][url]' => $input['href'],
danielebarchiesi@4 209 );
danielebarchiesi@4 210 $this->drupalPost(NULL, $edit, t('Save'));
danielebarchiesi@4 211
danielebarchiesi@4 212 $url = $this->getUrl();
danielebarchiesi@4 213
danielebarchiesi@4 214 // change to anonymous user
danielebarchiesi@4 215 $this->drupalLogout();
danielebarchiesi@4 216 $this->drupalGet($url);
danielebarchiesi@4 217
danielebarchiesi@4 218 $this->assertRaw(l('<strong>'. $name .'</strong>', $input['href'], array('html' => TRUE)));
danielebarchiesi@4 219 }
danielebarchiesi@4 220
danielebarchiesi@4 221 /**
danielebarchiesi@4 222 * If we're creating a new field and just hit 'save' on the default options, we want to make
danielebarchiesi@4 223 * sure they are set to the expected results.
danielebarchiesi@4 224 */
danielebarchiesi@4 225 function testCRUDCreateFieldDefaults() {
danielebarchiesi@4 226 $this->web_user = $this->drupalCreateUser(array('administer content types', 'access content', 'create page content'));
danielebarchiesi@4 227 $this->drupalLogin($this->web_user);
danielebarchiesi@4 228
danielebarchiesi@4 229 // create field
danielebarchiesi@4 230 $name = strtolower($this->randomName());
danielebarchiesi@4 231 $edit = array(
danielebarchiesi@4 232 'fields[_add_new_field][label]' => $name,
danielebarchiesi@4 233 'fields[_add_new_field][field_name]' => $name,
danielebarchiesi@4 234 'fields[_add_new_field][type]' => 'link_field',
danielebarchiesi@4 235 'fields[_add_new_field][widget_type]' => 'link_field',
danielebarchiesi@4 236 );
danielebarchiesi@4 237 $this->drupalPost('admin/structure/types/manage/page/fields', $edit, t('Save'));
danielebarchiesi@4 238 $this->drupalPost(NULL, array(), t('Save field settings'));
danielebarchiesi@4 239 $this->drupalPost(NULL, array(), t('Save settings'));
danielebarchiesi@4 240
danielebarchiesi@4 241 // Is field created?
danielebarchiesi@4 242 $this->assertRaw(t('Saved %label configuration', array('%label' => $name)), 'Field added');
danielebarchiesi@4 243 node_types_rebuild();
danielebarchiesi@4 244 menu_rebuild();
danielebarchiesi@4 245 //_content_type_info(TRUE);
danielebarchiesi@4 246 //$fields = content_fields();
danielebarchiesi@4 247 //$field = $fields['field_'. $name];
danielebarchiesi@4 248 //$field = field_info_field('field_'. $name);
danielebarchiesi@4 249 _field_info_collate_fields(TRUE);
danielebarchiesi@4 250 $instances = field_info_instances('node', 'page');
danielebarchiesi@4 251 //$this->debug($instances);
danielebarchiesi@4 252 //$this->assert('debug', '<pre>'. print_r($instances, TRUE) .'</pre>', 'Debug');
danielebarchiesi@4 253 $instance = $instances['field_'. $name];
danielebarchiesi@4 254 //$this->assertTrue(1 === $instance['validate_url'], 'Make sure validation is on.');
danielebarchiesi@4 255 $this->assertFalse($instance['required'], 'Make sure field is not required.');
danielebarchiesi@4 256 $this->assertEqual($instance['settings']['title'], 'optional', 'Title should be optional by default.');
danielebarchiesi@4 257 $this->assertTrue($instance['settings']['enable_tokens'], 'Enable Tokens should be off by default.');
danielebarchiesi@4 258 $this->assertEqual($instance['settings']['display']['url_cutoff'], 80, 'Url cutoff should be at 80 characters.');
danielebarchiesi@4 259 $this->assertEqual($instance['settings']['attributes']['target'], 'default', 'Target should be "default"');
danielebarchiesi@4 260 $this->assertFalse($instance['settings']['attributes']['rel'], 'Rel should be blank by default.');
danielebarchiesi@4 261 $this->assertFalse($instance['settings']['attributes']['class'], 'By default, no class should be set.');
danielebarchiesi@4 262 $this->assertFalse($instance['settings']['title_value'], 'By default, no title should be set.');
danielebarchiesi@4 263
danielebarchiesi@4 264 //$this->fail('<pre>'. print_r($fields['field_'. $name], TRUE) .'</pre>');
danielebarchiesi@4 265 }
danielebarchiesi@4 266 }