Skip to content
Snippets Groups Projects
Commit ff4d10b7 authored by Dries Buytaert's avatar Dries Buytaert
Browse files

Issue #2357145 by alexpott, olli, YesCT: Views can not be saved with a numeric (grouped) filter

parent 8839de5c
No related branches found
No related tags found
2 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!789Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
...@@ -49,4 +49,16 @@ public function assertConfigSchema(TypedConfigManagerInterface $typed_config, $c ...@@ -49,4 +49,16 @@ public function assertConfigSchema(TypedConfigManagerInterface $typed_config, $c
} }
} }
} }
/**
* 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,16 +748,17 @@ views_filter: ...@@ -748,16 +748,17 @@ views_filter:
- type: integer - type: integer
label: 'Default' label: 'Default'
group_items: group_items:
type: views.filter.group_items.[plugin_id] type: sequence
label: 'Group items' label: 'Group items'
sequence:
- type: views.filter.group_item.[%parent.%parent.%parent.plugin_id]
label: 'Group item'
plugin_id: plugin_id:
type: string type: string
label: 'Plugin ID' label: 'Plugin ID'
views_filter_group_items: views_filter_group_item:
type: sequence type: mapping
sequence:
- type: mapping
label: 'Group item' label: 'Group item'
mapping: mapping:
title: title:
......
...@@ -31,12 +31,16 @@ views.filter.combine: ...@@ -31,12 +31,16 @@ views.filter.combine:
- type: string - type: string
label: 'Field' label: 'Field'
views.filter.date: views.filter_value.date:
type: views.filter.numeric type: views.filter_value.numeric
label: 'Date' label: 'Date'
mapping:
type:
type: string
label: 'Type'
views.filter.groupby_numeric: views.filter_value.groupby_numeric:
type: views.filter.numeric type: views.filter_value.numeric
label: 'Group by numeric' label: 'Group by numeric'
views.filter.in_operator: views.filter.in_operator:
...@@ -75,13 +79,9 @@ views.filter.string: ...@@ -75,13 +79,9 @@ views.filter.string:
type: string type: string
label: 'Value' label: 'Value'
views.filter.numeric: views.filter_value.numeric:
type: views_filter
label: 'Numeric'
mapping:
value:
type: mapping type: mapping
label: 'Operator' label: 'Numeric'
mapping: mapping:
min: min:
type: string type: string
...@@ -92,12 +92,9 @@ views.filter.numeric: ...@@ -92,12 +92,9 @@ views.filter.numeric:
value: value:
type: string type: string
label: 'Value' label: 'Value'
type:
type: string
label: 'Value type'
views.filter.equality: views.filter_value.equality:
type: views.filter.numeric type: views.filter_value.numeric
label: 'Equality' label: 'Equality'
views.filter.many_to_one: views.filter.many_to_one:
...@@ -121,17 +118,16 @@ views.filter.standard: ...@@ -121,17 +118,16 @@ views.filter.standard:
type: views_filter type: views_filter
label: 'Standard' label: 'Standard'
views.filter.group_items.*: views.filter.group_item.*:
type: views_filter_group_items type: views_filter_group_item
label: 'Default' label: 'Default'
views.filter.group_items.string: views.filter.group_item.numeric:
type: views_filter_group_items type: views_filter_group_item
label: 'String group items'
views.filter.group_items.boolean:
type: views_filter_group_items
label: 'Group items' label: 'Group items'
mapping:
value:
type: views.filter_value.numeric
# Schema for the views filter value. # Schema for the views filter value.
......
...@@ -42,7 +42,6 @@ display: ...@@ -42,7 +42,6 @@ display:
options: options:
offset: 0 offset: 0
type: none type: none
pager_options: { }
sorts: sorts:
id: id:
field: id field: id
......
<?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');
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment