Issue #2589703 by dawehner, geertvd: Override number of items to display in contextual filter doesn't work

8.0.x
Nathaniel Catchpole 2015-11-10 11:19:12 +00:00
parent f6052ec6f7
commit 349b678eb6
6 changed files with 320 additions and 3 deletions

View File

@ -210,6 +210,13 @@ class DefaultViewsTest extends ViewTestBase {
),
);
$this->assertIdenticalResultset($view, $expected_result, $column_map);
$view->storage->setStatus(TRUE);
$view->save();
\Drupal::service('router.builder')->rebuild();
$this->drupalGet('archive');
$this->assertResponse(200);
}
}

View File

@ -0,0 +1,77 @@
<?php
/**
* @file
* Contains \Drupal\views\Tests\Plugin\StyleSummaryTest.
*/
namespace Drupal\views\Tests\Plugin;
use Drupal\entity_test\Entity\EntityTest;
use Drupal\views\Tests\ViewTestBase;
/**
* Tests the summary style plugin.
*
* @group views
*/
class StyleSummaryTest extends ViewTestBase {
/**
* {@inheritdoc}
*/
public static $modules = ['entity_test'];
/**
* {@inheritdoc}
*/
public static $testViews = ['test_summary'];
/**
* @var \Drupal\entity_test\Entity\EntityTest[]
*/
protected $entities = [];
/**
* {@inheritdoc}
*/
protected function setUp($import_test_views = TRUE) {
parent::setUp($import_test_views);
// Create 5 entities per bundle, to allow a summary overview per bundle.
for ($i = 0; $i < 5; $i++) {
for ($j = 0; $j < 5; $j++) {
$this->entities[] = $entity = EntityTest::create([
'name' => 'Entity ' . ($i * 5 + $j),
'type' => 'type' . $i,
]);
$entity->save();
}
}
}
/**
* Tests a summary view.
*/
public function testSummaryView() {
$this->drupalGet('test-summary');
$summary_list = $this->cssSelect('ul.views-summary li');
$this->assertEqual(4, count($summary_list));
foreach ($summary_list as $summary_list_item) {
$this->assertEqual('(5)', trim((string) $summary_list_item));
}
$summary_links = $this->cssSelect('ul.views-summary a');
$this->assertEqual(4, count($summary_links));
foreach ($summary_links as $index => $summary_link) {
$this->assertEqual('type' . $index, trim((string) $summary_link));
}
$this->clickLink('type1');
$entries = $this->cssSelect('div.view-content div.views-row');
$this->assertEqual(2, count($entries));
}
}

View File

@ -18,7 +18,7 @@ abstract class StyleTestBase extends ViewKernelTestBase {
/**
* Stores the SimpleXML representation of the output.
*
* @var SimpleXMLElement
* @var \SimpleXMLElement
*/
protected $elements;

View File

@ -553,7 +553,11 @@ class ViewExecutable implements \Serializable {
* The items per page.
*/
public function setItemsPerPage($items_per_page) {
$this->element['#cache']['keys'][] = 'items_per_page:' . $items_per_page;
// Check whether the element is pre rendered. At that point, the cache keys
// cannot longer be manipulated.
if (empty($this->element['#pre_rendered'])) {
$this->element['#cache']['keys'][] = 'items_per_page:' . $items_per_page;
}
$this->items_per_page = $items_per_page;
// If the pager is already initialized, pass it through to the pager.
@ -583,9 +587,15 @@ class ViewExecutable implements \Serializable {
* The pager offset.
*/
public function setOffset($offset) {
$this->element['#cache']['keys'][] = 'offset:' . $offset;
// Check whether the element is pre rendered. At that point, the cache keys
// cannot longer be manipulated.
if (empty($this->element['#pre_rendered'])) {
$this->element['#cache']['keys'][] = 'offset:' . $offset;
}
$this->offset = $offset;
// If the pager is already initialized, pass it through to the pager.
if (!empty($this->pager)) {
$this->pager->setOffset($offset);

View File

@ -0,0 +1,127 @@
langcode: en
status: true
id: test_summary
label: Test Summary
module: views
description: ''
tag: default
base_table: entity_test
base_field: id
core: '8'
display:
default:
id: default
display_title: Master
display_plugin: default
position: 0
display_options:
query:
type: views_query
options:
query_comment: ''
disable_sql_rewrite: false
distinct: false
replica: false
query_tags: { }
title: 'Summary test'
access:
type: none
cache:
type: tag
options: { }
pager:
type: mini
options:
items_per_page: 2
offset: 0
id: 0
total_pages: 0
expose:
items_per_page: false
items_per_page_label: 'Items per page'
items_per_page_options: '1, 2, 3, 4'
items_per_page_options_all: false
items_per_page_options_all_label: '- All -'
offset: false
offset_label: Offset
tags:
previous:
next:
sorts:
id:
id: id
table: entity_test
field: id
order: ASC
plugin_id: standard
relationship: none
arguments:
type:
id: type
field: type
table: entity_test
default_action: summary
exception:
title_enable: true
title_enable: true
title: '{{ arguments.type }}'
default_argument_type: fixed
summary:
sort_order: asc
format: default_summary
summary_options:
override: true
items_per_page: 4
specify_validation: true
plugin_id: string
entity_type: entity_test
fields:
id:
id: id
field: id
table: entity_test
plugin_id: field
entity_type: entity_test
style:
type: default
options:
grouping: { }
row_class: ''
default_row_class: true
uses_fields: false
row:
type: fields
header: { }
footer: { }
empty: { }
relationships: { }
fields: { }
display_extenders: { }
cache_metadata:
contexts:
- 'languages:language_interface'
- url
- url.query_args
- user.permissions
max-age: -1
tags: { }
page_1:
id: page_1
display_title: Page
display_plugin: page
position: 2
display_options:
query:
type: views_query
options: { }
path: test-summary
display_extenders: { }
cache_metadata:
contexts:
- 'languages:language_interface'
- url
- url.query_args
- 'user.node_grants:view'
- user.permissions
max-age: -1
tags: { }

View File

@ -469,4 +469,100 @@ class ViewExecutableTest extends UnitTestCase {
return array($view, $display);
}
/**
* @covers ::setItemsPerPage
* @covers ::getItemsPerPage
*/
public function testSetItemsPerPageBeforePreRender() {
/** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
/** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
list($view, $display) = $this->setupBaseViewAndDisplay();
$view->setItemsPerPage(12);
$this->assertEquals(12, $view->getItemsPerPage());
$this->assertContains('items_per_page:12', $view->element['#cache']['keys']);
}
/**
* @covers ::setItemsPerPage
* @covers ::getItemsPerPage
*/
public function testSetItemsPerPageDuringPreRender() {
/** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
/** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
list($view, $display) = $this->setupBaseViewAndDisplay();
$elements = &$view->element;
$elements['#cache'] += ['keys' => []];
$elements['#pre_rendered'] = TRUE;
$view->setItemsPerPage(12);
$this->assertEquals(12, $view->getItemsPerPage());
$this->assertNotContains('items_per_page:12', $view->element['#cache']['keys']);
}
/**
* @covers ::setOffset
* @covers ::getOffset
*/
public function testSetOffsetBeforePreRender() {
/** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
/** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
list($view, $display) = $this->setupBaseViewAndDisplay();
$view->setOffset(12);
$this->assertEquals(12, $view->getOffset());
$this->assertContains('offset:12', $view->element['#cache']['keys']);
}
/**
* @covers ::setOffset
* @covers ::getOffset
*/
public function testSetOffsetDuringPreRender() {
/** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
/** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
list($view, $display) = $this->setupBaseViewAndDisplay();
$elements = &$view->element;
$elements['#cache'] += ['keys' => []];
$elements['#pre_rendered'] = TRUE;
$view->setOffset(12);
$this->assertEquals(12, $view->getOffset());
$this->assertNotContains('offset:12', $view->element['#cache']['keys']);
}
/**
* @covers ::setCurrentPage
* @covers ::getCurrentPage
*/
public function testSetCurrentPageBeforePreRender() {
/** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
/** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
list($view, $display) = $this->setupBaseViewAndDisplay();
$view->setCurrentPage(12);
$this->assertEquals(12, $view->getCurrentPage());
$this->assertContains('page:12', $view->element['#cache']['keys']);
}
/**
* @covers ::setCurrentPage
* @covers ::getCurrentPage
*/
public function testSetCurrentPageDuringPreRender() {
/** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
/** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
list($view, $display) = $this->setupBaseViewAndDisplay();
$elements = &$view->element;
$elements['#cache'] += ['keys' => []];
$elements['#pre_rendered'] = TRUE;
$view->setCurrentPage(12);
$this->assertEquals(12, $view->getCurrentPage());
$this->assertNotContains('page:12', $view->element['#cache']['keys']);
}
}