Newer
Older
Alex Pott
committed
namespace Drupal\Tests\views\Kernel\Handler;
Rob Loach
committed
Alex Pott
committed
use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
catch
committed
use Drupal\views\Views;
Angie Byron
committed
Alex Pott
committed
* Tests the core Drupal\views\Plugin\views\filter\StringFilter handler.
*
* @group views
Alex Pott
committed
class FilterStringTest extends ViewsKernelTestBase {
public static $modules = ['system'];
catch
committed
/**
* Views used by this test.
*
* @var array
*/
public static $testViews = ['test_view'];
catch
committed
/**
* Map column names.
*
* @var array
*/
protected $columnMap = [
Angie Byron
committed
'views_test_data_name' => 'name',
];
public function viewsData() {
$data['views_test_data']['name']['filter']['allow empty'] = TRUE;
$data['views_test_data']['job']['filter']['allow empty'] = FALSE;
$data['views_test_data']['description'] = $data['views_test_data']['name'];
Lauri Eskola
committed
/**
* {@inheritdoc}
*/
protected function schemaDefinition() {
$schema = parent::schemaDefinition();
$schema['views_test_data']['fields']['description'] = [
'description' => "A person's description",
'type' => 'text',
'not null' => FALSE,
'size' => 'big',
];
return $schema;
}
/**
* An extended test dataset.
*/
protected function dataSet() {
$dataset = parent::dataSet();
$dataset[0]['description'] = 'John Winston Ono Lennon, MBE (9 October 1940 – 8 December 1980) was an English musician and singer-songwriter who rose to worldwide fame as one of the founding members of The Beatles, one of the most commercially successful and critically acclaimed acts in the history of popular music. Along with fellow Beatle Paul McCartney, he formed one of the most successful songwriting partnerships of the 20th century.';
$dataset[1]['description'] = 'George Harrison,[1] MBE (25 February 1943 – 29 November 2001)[2] was an English rock guitarist, singer-songwriter, actor and film producer who achieved international fame as lead guitarist of The Beatles.';
$dataset[2]['description'] = 'Richard Starkey, MBE (born 7 July 1940), better known by his stage name Ringo Starr, is an English musician, singer-songwriter, and actor who gained worldwide fame as the drummer for The Beatles.';
$dataset[3]['description'] = 'Sir James Paul McCartney, MBE (born 18 June 1942) is an English musician, singer-songwriter and composer. Formerly of The Beatles (1960–1970) and Wings (1971–1981), McCartney is the most commercially successful songwriter in the history of popular music, according to Guinness World Records.[1]';
$dataset[4]['description'] = NULL;
return $dataset;
}
Angie Byron
committed
/**
* Build and return a Page view of the views_test_data table.
*
* @return view
*/
protected function getBasicPageView() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
// In order to test exposed filters, we have to disable
// the exposed forms cache.
Angie Byron
committed
\Drupal::service('views.exposed_form_cache')->reset();
Angie Byron
committed
$view->newDisplay('page', 'Page', 'page_1');
public function testFilterStringEqual() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'name' => [
'table' => 'views_test_data',
'field' => 'name',
'relationship' => 'none',
'operator' => '=',
'value' => 'Ringo',
],
]);
$resultset = [
[
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringGroupedExposedEqual() {
Tim Plunkett
committed
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
// Filter: Name, Operator: =, Value: Ringo
$filters['name']['group_info']['default_group'] = 1;
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'Ringo',
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringNotEqual() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'name' => [
'table' => 'views_test_data',
'field' => 'name',
'relationship' => 'none',
'operator' => '!=',
'value' => 'Ringo',
],
]);
$resultset = [
[
],
[
],
[
],
[
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
public function testFilterStringGroupedExposedNotEqual() {
Tim Plunkett
committed
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
// Filter: Name, Operator: !=, Value: Ringo
$filters['name']['group_info']['default_group'] = '2';
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'John',
],
[
Tim Plunkett
committed
'name' => 'George',
],
[
Tim Plunkett
committed
'name' => 'Paul',
],
[
Tim Plunkett
committed
'name' => 'Meredith',
],
];
Tim Plunkett
committed
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringContains() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'name' => [
'table' => 'views_test_data',
'field' => 'name',
'relationship' => 'none',
'operator' => 'contains',
'value' => 'ing',
],
]);
$resultset = [
[
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
public function testFilterStringGroupedExposedContains() {
Tim Plunkett
committed
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
// Filter: Name, Operator: contains, Value: ing
$filters['name']['group_info']['default_group'] = '3';
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'Ringo',
],
];
Tim Plunkett
committed
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringWord() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'description' => [
'table' => 'views_test_data',
'field' => 'description',
'relationship' => 'none',
'operator' => 'word',
'value' => 'actor',
],
]);
$resultset = [
[
],
[
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'description' => [
'table' => 'views_test_data',
'field' => 'description',
'relationship' => 'none',
'operator' => 'allwords',
'value' => 'Richard Starkey',
],
]);
$resultset = [
[
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
$view->destroy();
$view = Views::getView('test_view');
$view->setDisplay();
// Change the filtering to a sting containing only illegal characters.
$view->displayHandlers->get('default')->overrideOption('filters', [
'description' => [
'id' => 'description',
'table' => 'views_test_data',
'field' => 'description',
'relationship' => 'none',
'operator' => 'allwords',
'value' => ':-)',
],
]);
$this->executeView($view);
$resultset = [
[
'name' => 'Ringo',
],
[
'name' => 'John',
],
[
'name' => 'George',
],
[
'name' => 'Paul',
],
[
'name' => 'Meredith',
],
];
$this->assertIdenticalResultset($view, $resultset);
Tim Plunkett
committed
public function testFilterStringGroupedExposedWord() {
$filters = $this->getGroupedExposedFilters();
Tim Plunkett
committed
$view = $this->getBasicPageView();
// Filter: Name, Operator: contains, Value: ing
$filters['name']['group_info']['default_group'] = '3';
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'Ringo',
],
];
Tim Plunkett
committed
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
$view->destroy();
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
// Filter: Description, Operator: contains, Value: actor
$filters['description']['group_info']['default_group'] = '1';
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'George',
],
[
Tim Plunkett
committed
'name' => 'Ringo',
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringStarts() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'description' => [
'table' => 'views_test_data',
'field' => 'description',
'relationship' => 'none',
'operator' => 'starts',
'value' => 'George',
],
]);
$resultset = [
[
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
public function testFilterStringGroupedExposedStarts() {
Tim Plunkett
committed
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
// Filter: Name, Operator: starts, Value: George
$filters['description']['group_info']['default_group'] = 2;
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'George',
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringNotStarts() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'description' => [
'table' => 'views_test_data',
'field' => 'description',
'relationship' => 'none',
'operator' => 'not_starts',
'value' => 'George',
],
]);
$resultset = [
[
],
[
],
[
],
// There is no Meredith returned because his description is empty
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
public function testFilterStringGroupedExposedNotStarts() {
Tim Plunkett
committed
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
// Filter: Name, Operator: not_starts, Value: George
$filters['description']['group_info']['default_group'] = 3;
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'John',
],
[
Tim Plunkett
committed
'name' => 'Ringo',
],
[
Tim Plunkett
committed
'name' => 'Paul',
],
Tim Plunkett
committed
// There is no Meredith returned because his description is empty
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringEnds() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'description' => [
'table' => 'views_test_data',
'field' => 'description',
'relationship' => 'none',
'operator' => 'ends',
'value' => 'Beatles.',
],
]);
$resultset = [
[
],
[
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
public function testFilterStringGroupedExposedEnds() {
Tim Plunkett
committed
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
Alex Pott
committed
// Filter: Description, Operator: ends, Value: Beatles
Tim Plunkett
committed
$filters['description']['group_info']['default_group'] = 4;
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'George',
],
[
Tim Plunkett
committed
'name' => 'Ringo',
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringNotEnds() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'description' => [
'table' => 'views_test_data',
'field' => 'description',
'relationship' => 'none',
'operator' => 'not_ends',
'value' => 'Beatles.',
],
]);
$resultset = [
[
],
[
],
// There is no Meredith returned because his description is empty
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
public function testFilterStringGroupedExposedNotEnds() {
Tim Plunkett
committed
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
// Filter: Description, Operator: not_ends, Value: Beatles
$filters['description']['group_info']['default_group'] = 5;
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'John',
],
[
Tim Plunkett
committed
'name' => 'Paul',
],
Tim Plunkett
committed
// There is no Meredith returned because his description is empty
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringNot() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'description' => [
'table' => 'views_test_data',
'field' => 'description',
'relationship' => 'none',
'operator' => 'not',
'value' => 'Beatles.',
],
]);
$resultset = [
[
],
[
],
// There is no Meredith returned because his description is empty
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
public function testFilterStringGroupedExposedNot() {
Tim Plunkett
committed
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
// Filter: Description, Operator: not (does not contains), Value: Beatles
$filters['description']['group_info']['default_group'] = 6;
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'John',
],
[
Tim Plunkett
committed
'name' => 'Paul',
],
Tim Plunkett
committed
// There is no Meredith returned because his description is empty
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringShorter() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'name' => [
'table' => 'views_test_data',
'field' => 'name',
'relationship' => 'none',
'operator' => 'shorterthan',
'value' => 5,
],
]);
$resultset = [
[
],
[
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
public function testFilterStringGroupedExposedShorter() {
Tim Plunkett
committed
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
// Filter: Name, Operator: shorterthan, Value: 5
$filters['name']['group_info']['default_group'] = 4;
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'John',
],
[
Tim Plunkett
committed
'name' => 'Paul',
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringLonger() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'name' => [
'table' => 'views_test_data',
'field' => 'name',
'relationship' => 'none',
'operator' => 'longerthan',
'value' => 7,
],
]);
$resultset = [
[
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
public function testFilterStringGroupedExposedLonger() {
Tim Plunkett
committed
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
// Filter: Name, Operator: longerthan, Value: 4
$filters['name']['group_info']['default_group'] = 5;
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'Meredith',
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
public function testFilterStringEmpty() {
catch
committed
$view = Views::getView('test_view');
Angie Byron
committed
$view->setDisplay();
$view->displayHandlers->get('default')->overrideOption('filters', [
'description' => [
'table' => 'views_test_data',
'field' => 'description',
'relationship' => 'none',
'operator' => 'empty',
],
]);
$resultset = [
[
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
public function testFilterStringGroupedExposedEmpty() {
Tim Plunkett
committed
$filters = $this->getGroupedExposedFilters();
$view = $this->getBasicPageView();
// Filter: Description, Operator: empty, Value:
$filters['description']['group_info']['default_group'] = 7;
Damian Lee
committed
$view->setDisplay('page_1');
$view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
$view->save();
$this->container->get('router.builder')->rebuild();
Tim Plunkett
committed
$this->executeView($view);
$resultset = [
[
Tim Plunkett
committed
'name' => 'Meredith',
],
];
$this->assertIdenticalResultset($view, $resultset, $this->columnMap);
Tim Plunkett
committed
}
protected function getGroupedExposedFilters() {
$filters = [
'name' => [
Tim Plunkett
committed
'id' => 'name',
'plugin_id' => 'string',
'table' => 'views_test_data',
Tim Plunkett
committed
'field' => 'name',
'relationship' => 'none',
'exposed' => TRUE,
'expose' => [
Tim Plunkett
committed
'operator' => 'name_op',
'label' => 'name',
'identifier' => 'name',
],
Tim Plunkett
committed
'is_grouped' => TRUE,
'group_info' => [
Tim Plunkett
committed
'label' => 'name',
'identifier' => 'name',
'default_group' => 'All',
'group_items' => [
1 => [
Tim Plunkett
committed
'title' => 'Is Ringo',
'operator' => '=',
'value' => 'Ringo',
],
2 => [
Tim Plunkett
committed
'title' => 'Is not Ringo',
'operator' => '!=',
'value' => 'Ringo',
],
3 => [
Tim Plunkett
committed
'title' => 'Contains ing',
'operator' => 'contains',
'value' => 'ing',
],
4 => [
Tim Plunkett
committed
'title' => 'Shorter than 5 letters',
'operator' => 'shorterthan',
'value' => 5,
],
5 => [
Tim Plunkett
committed
'title' => 'Longer than 7 letters',
'operator' => 'longerthan',
'value' => 7,
],
],
],
],
'description' => [
Tim Plunkett
committed
'id' => 'description',
'plugin_id' => 'string',
'table' => 'views_test_data',
Tim Plunkett
committed
'field' => 'description',
'relationship' => 'none',
'exposed' => TRUE,
'expose' => [
Tim Plunkett
committed
'operator' => 'description_op',
'label' => 'description',
'identifier' => 'description',
],
Tim Plunkett
committed
'is_grouped' => TRUE,
'group_info' => [
Tim Plunkett
committed
'label' => 'description',
'identifier' => 'description',
'default_group' => 'All',
'group_items' => [
1 => [
Tim Plunkett
committed
'title' => 'Contains the word: Actor',
'operator' => 'word',
'value' => 'actor',
],
2 => [
Tim Plunkett
committed
'title' => 'Starts with George',
'operator' => 'starts',
'value' => 'George',
],
3 => [
Tim Plunkett
committed
'title' => 'Not Starts with: George',
'operator' => 'not_starts',
'value' => 'George',
],
4 => [
Tim Plunkett
committed
'title' => 'Ends with: Beatles',
'operator' => 'ends',
'value' => 'Beatles.',
],
5 => [
Tim Plunkett
committed
'title' => 'Not Ends with: Beatles',
'operator' => 'not_ends',
'value' => 'Beatles.',
],
6 => [
Tim Plunkett
committed
'title' => 'Does not contain: Beatles',
'operator' => 'not',
'value' => 'Beatles.',
],
7 => [
Tim Plunkett
committed
'title' => 'Empty description',
'operator' => 'empty',
'value' => '',
],
],
],
],
];
Tim Plunkett
committed
return $filters;
}