Issue #2208811 by Pol, ivanjaros, dawehner, wizonesolutions: views_embed_view() cannot handle arguments

8.0.x
Alex Pott 2015-05-06 17:26:51 -07:00
parent d04b472386
commit 40d6c147c5
4 changed files with 200 additions and 4 deletions

View File

@ -23,7 +23,7 @@ class ModuleTest extends ViewUnitTestBase {
*
* @var array
*/
public static $testViews = array('test_view_status', 'test_view');
public static $testViews = array('test_view_status', 'test_view', 'test_argument');
/**
* Modules to enable.
@ -268,6 +268,71 @@ class ModuleTest extends ViewUnitTestBase {
}
}
/**
* Tests views.module: views_embed_view().
*/
public function testViewsEmbedView() {
$this->enableModules(array('user'));
$result = views_embed_view('test_argument');
$this->assertEqual(count($result['#view']->result), 5);
$result = views_embed_view('test_argument', 'default', 1);
$this->assertEqual(count($result['#view']->result), 1);
$result = views_embed_view('test_argument', 'default', '1,2');
$this->assertEqual(count($result['#view']->result), 2);
$result = views_embed_view('test_argument', 'default', '1,2', 'John');
$this->assertEqual(count($result['#view']->result), 1);
$result = views_embed_view('test_argument', 'default', '1,2', 'John,George');
$this->assertEqual(count($result['#view']->result), 2);
}
/**
* Tests the \Drupal\views\ViewsExecutable::preview() method.
*/
public function testViewsPreview() {
$this->enableModules(array('user'));
$view = Views::getView('test_argument');
$result = $view->preview('default');
$this->assertEqual(count($result['#view']->result), 5);
$view = Views::getView('test_argument');
$result = $view->preview('default', array('0' => 1));
$this->assertEqual(count($result['#view']->result), 1);
$view = Views::getView('test_argument');
$result = $view->preview('default', array('3' => 1));
$this->assertEqual(count($result['#view']->result), 1);
$view = Views::getView('test_argument');
$result = $view->preview('default', array('0' => '1,2'));
$this->assertEqual(count($result['#view']->result), 2);
$view = Views::getView('test_argument');
$result = $view->preview('default', array('3' => '1,2'));
$this->assertEqual(count($result['#view']->result), 2);
$view = Views::getView('test_argument');
$result = $view->preview('default', array('0' => '1,2', '1' => 'John'));
$this->assertEqual(count($result['#view']->result), 1);
$view = Views::getView('test_argument');
$result = $view->preview('default', array('3' => '1,2', '4' => 'John'));
$this->assertEqual(count($result['#view']->result), 1);
$view = Views::getView('test_argument');
$result = $view->preview('default', array('0' => '1,2', '1' => 'John,George'));
$this->assertEqual(count($result['#view']->result), 2);
$view = Views::getView('test_argument');
$result = $view->preview('default', array('3' => '1,2', '4' => 'John,George'));
$this->assertEqual(count($result['#view']->result), 2);
}
/**
* Helper to return an expected views option array.
*

View File

@ -118,7 +118,7 @@ abstract class ViewUnitTestBase extends KernelTestBase {
* @param array $args
* (optional) An array of the view arguments to use for the view.
*/
protected function executeView($view, $args = array()) {
protected function executeView($view, array $args = array()) {
$view->setDisplay();
$view->preExecute($args);
$view->execute();

View File

@ -483,8 +483,10 @@ class ViewExecutable implements \Serializable {
* Set the arguments that come to this view. Usually from the URL
* but possibly from elsewhere.
*/
public function setArguments($args) {
$this->args = $args;
public function setArguments(array $args) {
// The array keys of the arguments will be incorrect if set by
// views_embed_view() or \Drupal\views\ViewExecutable:preview().
$this->args = array_values($args);
}
/**

View File

@ -0,0 +1,129 @@
langcode: en
status: true
dependencies: { }
label: ''
module: views
description: ''
tag: ''
base_table: views_test_data
base_field: nid
core: '8'
id: test_argument
display:
default:
display_options:
defaults:
fields: false
pager: false
sorts: false
arguments: false
fields:
age:
field: age
id: age
relationship: none
table: views_test_data
id:
field: id
id: id
relationship: none
table: views_test_data
name:
field: name
id: name
relationship: none
table: views_test_data
pager:
options:
offset: 0
type: none
sorts:
id:
field: id
id: id
order: ASC
relationship: none
table: views_test_data
arguments:
id:
id: id
table: views_test_data
field: id
relationship: none
group_type: group
admin_label: ''
default_action: ignore
exception:
value: all
title_enable: false
title: All
title_enable: false
title: ''
default_argument_type: fixed
default_argument_options:
argument: ''
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
items_per_page: 25
override: false
summary:
sort_order: asc
number_of_records: 0
format: default_summary
specify_validation: false
validate:
type: none
fail: 'not found'
validate_options: { }
break_phrase: true
not: false
entity_type: node
entity_field: nid
plugin_id: numeric
name:
id: title
table: views_test_data
field: name
relationship: none
group_type: group
admin_label: ''
default_action: ignore
exception:
value: all
title_enable: false
title: All
title_enable: false
title: ''
default_argument_type: fixed
default_argument_options:
argument: ''
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
items_per_page: 25
override: false
summary:
sort_order: asc
number_of_records: 0
format: default_summary
specify_validation: false
validate:
type: none
fail: 'not found'
validate_options: { }
glossary: false
limit: 0
case: none
path_case: none
transform_dash: false
break_phrase: true
entity_type: node
entity_field: name
plugin_id: string
display_plugin: default
display_title: Master
id: default
position: 0