Projet

Général

Profil

Paste
Télécharger (9,94 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / link / tests / link.crud_browser.test @ 74f6bef0

1
<?php
2

    
3
/**
4
 * @file
5
 * Testing CRUD API in the browser.
6
 */
7

    
8
/**
9
 * Testing that users can not input bad URLs or labels
10
 */
11
class LinkUITest extends DrupalWebTestcase {
12

    
13
  /**
14
   * Link supposed to be good
15
   */
16
  const LINK_INPUT_TYPE_GOOD = 0;
17

    
18
  /**
19
   * Link supposed to have a bad title
20
   */
21
  const LINK_INPUT_TYPE_BAD_TITLE = 1;
22

    
23
  /**
24
   * Link supposed to have a bad URL
25
   */
26
  const LINK_INPUT_TYPE_BAD_URL = 2;
27

    
28
  public static function getInfo() {
29
    return array(
30
      'name' => 'Link CRUD - browser test',
31
      'description' => 'Tests the field CRUD (create, read, update, delete) API 2.',
32
      'group' => 'Link',
33
    );
34
  }
35

    
36
  function setUp() {
37
    parent::setUp('field_ui', 'link');
38
  }
39

    
40
  /**
41
   * Creates a link field for the "page" type and creates a page with a link.
42
   */
43
  function testLinkCreate() {
44
    //libxml_use_internal_errors(true);
45
    $this->web_user = $this->drupalCreateUser(array(
46
      'administer content types',
47
      'administer nodes',
48
      'administer filters',
49
      'access content',
50
      'create page content',
51
      'access administration pages'
52
    ));
53
    $this->drupalLogin($this->web_user);
54

    
55
    // create field
56
    $name = strtolower($this->randomName());
57
    $edit = array(
58
      'fields[_add_new_field][label]' => $name,
59
      'fields[_add_new_field][field_name]' => $name,
60
      'fields[_add_new_field][type]' => 'link_field',
61
      'fields[_add_new_field][widget_type]' => 'link_field',
62
    );
63
    $this->drupalPost('admin/structure/types/manage/page/fields', $edit, t('Save'));
64
    $this->drupalPost(NULL, array(), t('Save field settings'));
65
    $this->drupalPost(NULL, array(), t('Save settings'));
66

    
67
    // Is field created?
68
    $this->assertRaw(t('Saved %label configuration', array('%label' => $name)), 'Field added');
69
    node_types_rebuild();
70
    menu_rebuild();
71

    
72
    $permission = 'create page content';
73
    $this->checkPermissions(array($permission), TRUE);
74

    
75
    // create page form
76
    //$this->drupalGet('node/add');
77
    $this->drupalGet('node/add/page');
78
    $field_name = 'field_' . $name;
79
    $this->assertField('edit-field-'. $name .'-und-0-title', 'Title found');
80
    $this->assertField('edit-field-'. $name .'-und-0-url', 'URL found');
81

    
82
    $input_test_cases = array(
83
      array(
84
        'href' => 'http://example.com/' . $this->randomName(),
85
        'label' => $this->randomName(),
86
        'msg' => 'Link found',
87
        'type' => self::LINK_INPUT_TYPE_GOOD
88
      ),
89
      array(
90
        'href' => 'http://example.com/' . $this->randomName(),
91
        'label' => $this->randomName() . '<script>alert("hi");</script>',
92
        'msg' => 'js label',
93
        'type' => self::LINK_INPUT_TYPE_BAD_TITLE
94
      ),
95
      array(
96
        'href' => 'http://example.com/' . $this->randomName(),
97
        'label' => $this->randomName() . '<script src="http://devil.site.com"></script>',
98
        'msg' => 'js label',
99
        'type' => self::LINK_INPUT_TYPE_BAD_TITLE
100
      ),
101
      array(
102
        'href' => 'http://example.com/' . $this->randomName(),
103
        'label' => $this->randomName() . '" onmouseover="alert(\'hi\')',
104
        'msg' => 'js label',
105
        'type' => self::LINK_INPUT_TYPE_BAD_TITLE
106
      ),
107
      array(
108
        'href' => 'http://example.com/' . $this->randomName(),
109
        'label' => $this->randomName() . '\' onmouseover="alert(\'hi\')',
110
        'msg' => 'js label',
111
        'type' => self::LINK_INPUT_TYPE_BAD_TITLE
112
      ),
113
      array(
114
        'href' => 'javascript:alert("http://example.com/' . $this->randomName() . '")',
115
        'label' => $this->randomName(),
116
        'msg' => 'js url',
117
        'type' => self::LINK_INPUT_TYPE_BAD_URL
118
      ),
119
      array(
120
        'href' => 'http://ecs-es.kelkoo.es/ctl/go/sitesearchGo?.ts=1338833010331&.sig=qP9GXeEFH6syBzwmzYkxmsvp1EI-',
121
        'label' => 'http://ecs-es.kelkoo.es/ctl/go/sitesearchGo?.ts=1338833010331&.sig=qP9GXeEFH6syBzwmzYkxmsvp1EI-',
122
        'msg' => 'Url with . in querystring',
123
        'type' => self::LINK_INPUT_TYPE_GOOD,
124
      ),
125
    );
126
    $test_case = array(
127
      'href' => 'www.example.com/'. $this->randomName(),
128
      'label' => $this->randomName(),
129
      'msg' => 'Link found',
130
      'type' => self::LINK_INPUT_TYPE_GOOD,
131
    );
132
    $test_case['expected_href'] = 'http://'. $test_case['href'];
133
    $input_test_cases[] = $test_case;
134

    
135
    foreach ($input_test_cases as $input) {
136
      $this->drupalLogin($this->web_user);
137
      $this->drupalGet('node/add/page');
138

    
139
      $edit = array(
140
        'title' => $input['label'],
141
        $field_name . '[und][0][title]' => $input['label'],
142
        $field_name . '[und][0][url]' => $input['href'],
143
      );
144
      $this->drupalPost(NULL, $edit, t('Save'));
145
      if ($input['type'] == self::LINK_INPUT_TYPE_BAD_URL) {
146
        $this->assertRaw(t('The value provided for %field is not a valid URL.', array('%field' => $name)), 'Not a valid URL: ' . $input['href']);
147
        continue;
148
      }
149
      else {
150
        $this->assertRaw(t(' has been created.',
151
                           array('@type' => 'Basic Page', '%title' => $edit['title'])),
152
                         'Page created: ' . $input['href']);
153
      }
154
      $url = $this->getUrl();
155

    
156
      // change to anonym user
157
      $this->drupalLogout();
158

    
159
      $this->drupalGet($url);
160
      //debug($this);
161
      // If simpletest starts using something to override the error system, this will flag
162
      // us and let us know it's broken.
163
      $this->assertFalse(libxml_use_internal_errors(TRUE));
164
      if (isset($input['expected_href'])) {
165
        $path = '//a[@href="'. $input['expected_href'] .'" and text()="'. $input['label'] .'"]';
166
      }
167
      else {
168
        $path = '//a[@href="'. $input['href'] .'" and text()="'. $input['label'] .'"]';
169
      }
170
      //$this->pass(htmlentities($path));
171
      $elements = $this->xpath($path);
172
      libxml_use_internal_errors(FALSE);
173
      $this->assertIdentical(isset($elements[0]), $input['type'] == self::LINK_INPUT_TYPE_GOOD, $input['msg']);
174
    }
175
    //libxml_use_internal_errors(FALSE);
176
  }
177

    
178
  /**
179
   * Testing that if you use <strong> in a static title for your link, that the
180
   * title actually displays <strong>.
181
   */
182
  function testStaticLinkCreate() {
183
    $this->web_user = $this->drupalCreateUser(array('administer content types', 'access content', 'create page content'));
184
    $this->drupalLogin($this->web_user);
185

    
186
    // create field
187
    $name = strtolower($this->randomName());
188
    $field_name = 'field_'. $name;
189
    $edit = array(
190
      'fields[_add_new_field][label]' => $name,
191
      'fields[_add_new_field][field_name]' => $name,
192
      'fields[_add_new_field][type]' => 'link_field',
193
      'fields[_add_new_field][widget_type]' => 'link_field',
194
    );
195
    $this->drupalPost('admin/structure/types/manage/page/fields', $edit, t('Save'));
196
    $this->drupalPost(NULL, array(), t('Save field settings'));
197
    $this->drupalPost(NULL, array(
198
      'instance[settings][title]' => 'value',
199
      'instance[settings][title_value]' => '<strong>'. $name .'</strong>'), t('Save settings'));
200

    
201
    // Is field created?
202
    $this->assertRaw(t('Saved %label configuration', array('%label' => $name)), 'Field added');
203

    
204
    // create page form
205
    $this->drupalGet('node/add/page');
206
    $this->assertField($field_name . '[und][0][url]', 'URL found');
207

    
208
    $input = array(
209
      'href' => 'http://example.com/' . $this->randomName()
210
    );
211

    
212
    $edit = array(
213
      'title' => $name,
214
      $field_name . '[und][0][url]' => $input['href'],
215
    );
216
    $this->drupalPost(NULL, $edit, t('Save'));
217

    
218
    $url = $this->getUrl();
219

    
220
    // change to anonymous user
221
    $this->drupalLogout();
222
    $this->drupalGet($url);
223

    
224
    $this->assertRaw(l('<strong>'. $name .'</strong>', $input['href'], array('html' => TRUE)));
225
  }
226

    
227
  /**
228
   * If we're creating a new field and just hit 'save' on the default options, we want to make
229
   * sure they are set to the expected results.
230
   */
231
  function testCRUDCreateFieldDefaults() {
232
    $this->web_user = $this->drupalCreateUser(array('administer content types', 'access content', 'create page content'));
233
    $this->drupalLogin($this->web_user);
234

    
235
    // create field
236
    $name = strtolower($this->randomName());
237
    $edit = array(
238
      'fields[_add_new_field][label]' => $name,
239
      'fields[_add_new_field][field_name]' => $name,
240
      'fields[_add_new_field][type]' => 'link_field',
241
      'fields[_add_new_field][widget_type]' => 'link_field',
242
    );
243
    $this->drupalPost('admin/structure/types/manage/page/fields', $edit, t('Save'));
244
    $this->drupalPost(NULL, array(), t('Save field settings'));
245
    $this->drupalPost(NULL, array(), t('Save settings'));
246

    
247
    // Is field created?
248
    $this->assertRaw(t('Saved %label configuration', array('%label' => $name)), 'Field added');
249
    node_types_rebuild();
250
    menu_rebuild();
251
    //_content_type_info(TRUE);
252
    //$fields = content_fields();
253
    //$field = $fields['field_'. $name];
254
    //$field = field_info_field('field_'. $name);
255
    _field_info_collate_fields(TRUE);
256
    $instances = field_info_instances('node', 'page');
257
    //$this->debug($instances);
258
    //$this->assert('debug', '<pre>'. print_r($instances, TRUE) .'</pre>', 'Debug');
259
    $instance = $instances['field_'. $name];
260
    //$this->assertTrue(1 === $instance['validate_url'], 'Make sure validation is on.');
261
    $this->assertFalse($instance['required'], 'Make sure field is not required.');
262
    $this->assertEqual($instance['settings']['title'], 'optional', 'Title should be optional by default.');
263
    $this->assertTrue($instance['settings']['enable_tokens'], 'Enable Tokens should be off by default.');
264
    $this->assertEqual($instance['settings']['display']['url_cutoff'], 80, 'Url cutoff should be at 80 characters.');
265
    $this->assertEqual($instance['settings']['attributes']['target'], 'default', 'Target should be "default"');
266
    $this->assertFalse($instance['settings']['attributes']['rel'], 'Rel should be blank by default.');
267
    $this->assertFalse($instance['settings']['attributes']['class'], 'By default, no class should be set.');
268
    $this->assertFalse($instance['settings']['title_value'], 'By default, no title should be set.');
269

    
270
    //$this->fail('<pre>'. print_r($fields['field_'. $name], TRUE) .'</pre>');
271
  }
272
}