Issue #2357145 by alexpott, olli, YesCT: Views can not be saved with a numeric (grouped) filter
parent
8839de5ce9
commit
ff4d10b79e
|
@ -49,4 +49,16 @@ trait SchemaCheckTestTrait {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts configuration, specified by name, has a valid schema.
|
||||
*
|
||||
* @param string $config_name
|
||||
* The configuration name.
|
||||
*/
|
||||
public function assertConfigSchemaByName($config_name) {
|
||||
$config = \Drupal::config($config_name);
|
||||
$this->assertConfigSchema(\Drupal::service('config.typed'), $config->getName(), $config->get());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -748,27 +748,28 @@ views_filter:
|
|||
- type: integer
|
||||
label: 'Default'
|
||||
group_items:
|
||||
type: views.filter.group_items.[plugin_id]
|
||||
type: sequence
|
||||
label: 'Group items'
|
||||
sequence:
|
||||
- type: views.filter.group_item.[%parent.%parent.%parent.plugin_id]
|
||||
label: 'Group item'
|
||||
plugin_id:
|
||||
type: string
|
||||
label: 'Plugin ID'
|
||||
|
||||
views_filter_group_items:
|
||||
type: sequence
|
||||
sequence:
|
||||
- type: mapping
|
||||
label: 'Group item'
|
||||
mapping:
|
||||
title:
|
||||
type: label
|
||||
label: 'Label'
|
||||
operator:
|
||||
type: string
|
||||
label: 'Operator'
|
||||
value:
|
||||
type: label
|
||||
label: 'Value'
|
||||
views_filter_group_item:
|
||||
type: mapping
|
||||
label: 'Group item'
|
||||
mapping:
|
||||
title:
|
||||
type: label
|
||||
label: 'Label'
|
||||
operator:
|
||||
type: string
|
||||
label: 'Operator'
|
||||
value:
|
||||
type: label
|
||||
label: 'Value'
|
||||
|
||||
views_relationship:
|
||||
type: mapping
|
||||
|
|
|
@ -31,12 +31,16 @@ views.filter.combine:
|
|||
- type: string
|
||||
label: 'Field'
|
||||
|
||||
views.filter.date:
|
||||
type: views.filter.numeric
|
||||
views.filter_value.date:
|
||||
type: views.filter_value.numeric
|
||||
label: 'Date'
|
||||
mapping:
|
||||
type:
|
||||
type: string
|
||||
label: 'Type'
|
||||
|
||||
views.filter.groupby_numeric:
|
||||
type: views.filter.numeric
|
||||
views.filter_value.groupby_numeric:
|
||||
type: views.filter_value.numeric
|
||||
label: 'Group by numeric'
|
||||
|
||||
views.filter.in_operator:
|
||||
|
@ -75,29 +79,22 @@ views.filter.string:
|
|||
type: string
|
||||
label: 'Value'
|
||||
|
||||
views.filter.numeric:
|
||||
type: views_filter
|
||||
views.filter_value.numeric:
|
||||
type: mapping
|
||||
label: 'Numeric'
|
||||
mapping:
|
||||
min:
|
||||
type: string
|
||||
label: 'Min'
|
||||
max:
|
||||
type: string
|
||||
label: 'And max'
|
||||
value:
|
||||
type: mapping
|
||||
label: 'Operator'
|
||||
mapping:
|
||||
min:
|
||||
type: string
|
||||
label: 'Min'
|
||||
max:
|
||||
type: string
|
||||
label: 'And max'
|
||||
value:
|
||||
type: string
|
||||
label: 'Value'
|
||||
type:
|
||||
type: string
|
||||
label: 'Value type'
|
||||
type: string
|
||||
label: 'Value'
|
||||
|
||||
views.filter.equality:
|
||||
type: views.filter.numeric
|
||||
views.filter_value.equality:
|
||||
type: views.filter_value.numeric
|
||||
label: 'Equality'
|
||||
|
||||
views.filter.many_to_one:
|
||||
|
@ -121,17 +118,16 @@ views.filter.standard:
|
|||
type: views_filter
|
||||
label: 'Standard'
|
||||
|
||||
views.filter.group_items.*:
|
||||
type: views_filter_group_items
|
||||
views.filter.group_item.*:
|
||||
type: views_filter_group_item
|
||||
label: 'Default'
|
||||
|
||||
views.filter.group_items.string:
|
||||
type: views_filter_group_items
|
||||
label: 'String group items'
|
||||
|
||||
views.filter.group_items.boolean:
|
||||
type: views_filter_group_items
|
||||
views.filter.group_item.numeric:
|
||||
type: views_filter_group_item
|
||||
label: 'Group items'
|
||||
mapping:
|
||||
value:
|
||||
type: views.filter_value.numeric
|
||||
|
||||
# Schema for the views filter value.
|
||||
|
||||
|
|
|
@ -42,7 +42,6 @@ display:
|
|||
options:
|
||||
offset: 0
|
||||
type: none
|
||||
pager_options: { }
|
||||
sorts:
|
||||
id:
|
||||
field: id
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\views_ui\Tests\FilterNumericWebTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\views_ui\Tests;
|
||||
|
||||
use Drupal\config\Tests\SchemaCheckTestTrait;
|
||||
|
||||
/**
|
||||
* Tests the numeric filter UI.
|
||||
*
|
||||
* @group views_ui
|
||||
* @see \Drupal\views\Plugin\views\filter\Numeric
|
||||
*/
|
||||
class FilterNumericWebTest extends UITestBase {
|
||||
use SchemaCheckTestTrait;
|
||||
|
||||
/**
|
||||
* Views used by this test.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $testViews = array('test_view');
|
||||
|
||||
/**
|
||||
* Tests the filter numeric UI.
|
||||
*/
|
||||
public function testFilterNumericUI() {
|
||||
$this->drupalPostForm('admin/structure/views/nojs/add-handler/test_view/default/filter', array('name[views_test_data.age]' => TRUE), t('Add and configure @handler', array('@handler' => t('filter criteria'))));
|
||||
|
||||
$this->drupalPostForm(NULL, array(), t('Expose filter'));
|
||||
$this->drupalPostForm(NULL, array(), t('Grouped filters'));
|
||||
|
||||
$edit = array();
|
||||
$edit['options[group_info][group_items][1][title]'] = 'Old';
|
||||
$edit['options[group_info][group_items][1][operator]'] = '>';
|
||||
$edit['options[group_info][group_items][1][value][value]'] = 27;
|
||||
$edit['options[group_info][group_items][2][title]'] = 'Young';
|
||||
$edit['options[group_info][group_items][2][operator]'] = '<=';
|
||||
$edit['options[group_info][group_items][2][value][value]'] = 27;
|
||||
$edit['options[group_info][group_items][3][title]'] = 'From 26 to 28';
|
||||
$edit['options[group_info][group_items][3][operator]'] = 'between';
|
||||
$edit['options[group_info][group_items][3][value][min]'] = 26;
|
||||
$edit['options[group_info][group_items][3][value][max]'] = 28;
|
||||
|
||||
$this->drupalPostForm(NULL, $edit, t('Apply'));
|
||||
|
||||
$this->drupalGet('admin/structure/views/nojs/handler/test_view/default/filter/age');
|
||||
foreach ($edit as $name => $value) {
|
||||
$this->assertFieldByName($name, $value);
|
||||
}
|
||||
|
||||
$this->drupalPostForm('admin/structure/views/view/test_view', array(), t('Save'));
|
||||
$this->assertConfigSchemaByName('views.view.test_view');
|
||||
|
||||
// Test that the exposed filter works as expected.
|
||||
$this->drupalPostForm(NULL, array(), t('Update preview'));
|
||||
$this->assertText('John');
|
||||
$this->assertText('Paul');
|
||||
$this->assertText('Ringo');
|
||||
$this->assertText('George');
|
||||
$this->assertText('Meredith');
|
||||
$this->drupalPostForm(NULL, array('age' => '2'), t('Update preview'));
|
||||
$this->assertText('John');
|
||||
$this->assertText('Paul');
|
||||
$this->assertNoText('Ringo');
|
||||
$this->assertText('George');
|
||||
$this->assertNoText('Meredith');
|
||||
|
||||
// Change the filter to a single filter to test the schema when the operator
|
||||
// is not exposed.
|
||||
$this->drupalPostForm('admin/structure/views/nojs/handler/test_view/default/filter/age', array(), t('Single filter'));
|
||||
$edit = array();
|
||||
$edit['options[value][value]'] = 25;
|
||||
$this->drupalPostForm(NULL, $edit, t('Apply'));
|
||||
$this->drupalPostForm('admin/structure/views/view/test_view', array(), t('Save'));
|
||||
$this->assertConfigSchemaByName('views.view.test_view');
|
||||
|
||||
// Test that the filter works as expected.
|
||||
$this->drupalPostForm(NULL, array(), t('Update preview'));
|
||||
$this->assertText('John');
|
||||
$this->assertNoText('Paul');
|
||||
$this->assertNoText('Ringo');
|
||||
$this->assertNoText('George');
|
||||
$this->assertNoText('Meredith');
|
||||
$this->drupalPostForm(NULL, array('age' => '26'), t('Update preview'));
|
||||
$this->assertNoText('John');
|
||||
$this->assertText('Paul');
|
||||
$this->assertNoText('Ringo');
|
||||
$this->assertNoText('George');
|
||||
$this->assertNoText('Meredith');
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue