ExposedFormTest.php 8.25 KB
Newer Older
merlinofchaos's avatar
merlinofchaos committed
1
2
3
4
<?php

/**
 * @file
5
 * Definition of Drupal\views\Tests\Plugin\ExposedFormTest.
merlinofchaos's avatar
merlinofchaos committed
6
7
 */

8
namespace Drupal\views\Tests\Plugin;
9

10
11
use Drupal\views\Tests\UI\UITestBase;

merlinofchaos's avatar
merlinofchaos committed
12
13
14
/**
 * Tests exposed forms.
 */
15
class ExposedFormTest extends UITestBase {
16

17
18
19
20
21
22
23
  /**
   * Modules to enable.
   *
   * @var array
   */
  public static $modules = array('views_ui');

merlinofchaos's avatar
merlinofchaos committed
24
25
26
27
28
29
30
31
  public static function getInfo() {
    return array(
      'name' => 'Exposed forms',
      'description' => 'Test exposed forms functionality.',
      'group' => 'Views Plugins',
    );
  }

32
33
34
  protected function setUp() {
    parent::setUp();

35
36
    $this->drupalCreateContentType(array('type' => 'article'));
    $this->drupalCreateContentType(array('type' => 'page'));
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

    // Create some random nodes.
    for ($i = 0; $i < 5; $i++) {
      $this->drupalCreateNode();
    }
  }

  /**
   * Tests whether the reset button works on an expoed form.
   */
  public function testResetButton() {
    $this->drupalGet('test_reset_button', array('query' => array('type' => 'article')));
    // Test that the type has been set.
    $this->assertFieldById('edit-type', 'article', 'Article type filter set.');

    // Test the reset works.
    $this->drupalGet('test_reset_button', array('query' => array('op' => 'Reset')));
    $this->assertResponse(200);
    // Test the type has been reset.
    $this->assertFieldById('edit-type', 'All', 'Article type filter has been reset.');
57
58
  }

merlinofchaos's avatar
merlinofchaos committed
59
60
61
62
63
  /**
   * Tests, whether and how the reset button can be renamed.
   */
  public function testRenameResetButton() {
    // Look at the page and check the label "reset".
64
    $this->drupalGet('test_reset_button');
merlinofchaos's avatar
merlinofchaos committed
65
    // Rename the label of the reset button.
66
    $view = views_get_view('test_reset_button');
67
    $view->setDisplay();
merlinofchaos's avatar
merlinofchaos committed
68

69
    $exposed_form = $view->display_handler->getOption('exposed_form');
merlinofchaos's avatar
merlinofchaos committed
70
71
    $exposed_form['options']['reset_button_label'] = $expected_label = $this->randomName();
    $exposed_form['options']['reset_button'] = TRUE;
72
    $view->display_handler->setOption('exposed_form', $exposed_form);
merlinofchaos's avatar
merlinofchaos committed
73
74
75
76
77
    $view->save();

    views_invalidate_cache();

    // Look whether ther reset button label changed.
78
    $this->drupalGet('test_reset_button');
79
    $this->assertResponse(200);
merlinofchaos's avatar
merlinofchaos committed
80
81
82
83
84
85
86
87

    $this->helperButtonHasLabel('edit-reset', $expected_label);
  }

  /**
   * Tests the admin interface of exposed filter and sort items.
   */
  function testExposedAdminUi() {
88
    menu_router_rebuild();
merlinofchaos's avatar
merlinofchaos committed
89
90
91
    $edit = array();

    $this->drupalGet('admin/structure/views/nojs/config-item/test_exposed_admin_ui/default/filter/type');
92
    // Be sure that the button is called exposed.
merlinofchaos's avatar
merlinofchaos committed
93
94
    $this->helperButtonHasLabel('edit-options-expose-button-button', t('Expose filter'));

95
96
97
98
99
100
101
    // The first time the filter UI is displayed, the operator and the
    // value forms should be shown.
    $this->assertFieldById('edit-options-operator-in', '', 'Operator In exists');
    $this->assertFieldById('edit-options-operator-not-in', '', 'Operator Not In exists');
    $this->assertFieldById('edit-options-value-page', '', 'Checkbox for Page exists');
    $this->assertFieldById('edit-options-value-article', '', 'Checkbox for Article exists');

merlinofchaos's avatar
merlinofchaos committed
102
103
    // Click the Expose filter button.
    $this->drupalPost('admin/structure/views/nojs/config-item/test_exposed_admin_ui/default/filter/type', $edit, t('Expose filter'));
104
    // Check the label of the expose button.
merlinofchaos's avatar
merlinofchaos committed
105
    $this->helperButtonHasLabel('edit-options-expose-button-button', t('Hide filter'));
106
107
    // Check the label of the grouped exposed button
    $this->helperButtonHasLabel('edit-options-group-button-button', t('Grouped filters'));
merlinofchaos's avatar
merlinofchaos committed
108

109
110
111
112
113
114
    // After exposing the filter, Operator and Value should be still here.
    $this->assertFieldById('edit-options-operator-in', '', 'Operator In exists');
    $this->assertFieldById('edit-options-operator-not-in', '', 'Operator Not In exists');
    $this->assertFieldById('edit-options-value-page', '', 'Checkbox for Page exists');
    $this->assertFieldById('edit-options-value-article', '', 'Checkbox for Article exists');

merlinofchaos's avatar
merlinofchaos committed
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
    // Check the validations of the filter handler.
    $edit = array();
    $edit['options[expose][identifier]'] = '';
    $this->drupalPost(NULL, $edit, t('Apply'));
    $this->assertText(t('The identifier is required if the filter is exposed.'));

    $edit = array();
    $edit['options[expose][identifier]'] = 'value';
    $this->drupalPost(NULL, $edit, t('Apply'));
    $this->assertText(t('This identifier is not allowed.'));

    // Now check the sort criteria.
    $this->drupalGet('admin/structure/views/nojs/config-item/test_exposed_admin_ui/default/sort/created');
    $this->helperButtonHasLabel('edit-options-expose-button-button', t('Expose sort'));
    $this->assertNoFieldById('edit-options-expose-label', '', t('Make sure no label field is shown'));

131
132
133
    // Click the Grouped Filters button.
    $this->drupalGet('admin/structure/views/nojs/config-item/test_exposed_admin_ui/default/filter/type');
    $this->drupalPost(NULL, array(), t('Grouped filters'));
134
135
136
137
138
139
140
141

    // After click on 'Grouped Filters', the standard operator and value should
    // not be displayed.
    $this->assertNoFieldById('edit-options-operator-in', '', 'Operator In not exists');
    $this->assertNoFieldById('edit-options-operator-not-in', '', 'Operator Not In not exists');
    $this->assertNoFieldById('edit-options-value-page', '', 'Checkbox for Page not exists');
    $this->assertNoFieldById('edit-options-value-article', '', 'Checkbox for Article not exists');

142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
    // Check that after click on 'Grouped Filters', a new button is shown to
    // add more items to the list.
    $this->helperButtonHasLabel('edit-options-group-info-add-group', t('Add another item'));

    // Create a grouped filter
    $this->drupalGet('admin/structure/views/nojs/config-item/test_exposed_admin_ui/default/filter/type');
    $edit = array();
    $edit["options[group_info][group_items][1][title]"] = 'Is Article';
    $edit["options[group_info][group_items][1][value][article]"] = 'article';

    $edit["options[group_info][group_items][2][title]"] = 'Is Page';
    $edit["options[group_info][group_items][2][value][page]"] = TRUE;

    $edit["options[group_info][group_items][3][title]"] = 'Is Page and Article';
    $edit["options[group_info][group_items][3][value][article]"] = TRUE;
    $edit["options[group_info][group_items][3][value][page]"] = TRUE;
    $this->drupalPost(NULL, $edit, t('Apply'));

    // Validate that all the titles are defined for each group
    $this->drupalGet('admin/structure/views/nojs/config-item/test_exposed_admin_ui/default/filter/type');
    $edit = array();
    $edit["options[group_info][group_items][1][title]"] = 'Is Article';
    $edit["options[group_info][group_items][1][value][article]"] = TRUE;

    // This should trigger an error
    $edit["options[group_info][group_items][2][title]"] = '';
    $edit["options[group_info][group_items][2][value][page]"] = TRUE;

    $edit["options[group_info][group_items][3][title]"] = 'Is Page and Article';
    $edit["options[group_info][group_items][3][value][article]"] = TRUE;
    $edit["options[group_info][group_items][3][value][page]"] = TRUE;
    $this->drupalPost(NULL, $edit, t('Apply'));
    $this->assertRaw(t('The title is required if value for this item is defined.'), t('Group items should have a title'));

176
177
178
179
180
181
182
183
184
185
    // Un-expose the filter.
    $this->drupalGet('admin/structure/views/nojs/config-item/test_exposed_admin_ui/default/filter/type');
    $this->drupalPost(NULL, array(), t('Hide filter'));

    // After Un-exposing the filter, Operator and Value should be shown again.
    $this->assertFieldById('edit-options-operator-in', '', 'Operator In exists after hide filter');
    $this->assertFieldById('edit-options-operator-not-in', '', 'Operator Not In exists after hide filter');
    $this->assertFieldById('edit-options-value-page', '', 'Checkbox for Page exists after hide filter');
    $this->assertFieldById('edit-options-value-article', '', 'Checkbox for Article exists after hide filter');

merlinofchaos's avatar
merlinofchaos committed
186
187
188
    // Click the Expose sort button.
    $edit = array();
    $this->drupalPost('admin/structure/views/nojs/config-item/test_exposed_admin_ui/default/sort/created', $edit, t('Expose sort'));
189
    // Check the label of the expose button.
merlinofchaos's avatar
merlinofchaos committed
190
191
192
    $this->helperButtonHasLabel('edit-options-expose-button-button', t('Hide sort'));
    $this->assertFieldById('edit-options-expose-label', '', t('Make sure a label field is shown'));
  }
193

merlinofchaos's avatar
merlinofchaos committed
194
}