Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
/**
* @file
* Tests some general style plugin related functionality.
*/
class ViewsPluginStyleTestCase extends ViewsSqlTest {
public static function getInfo() {
return array(
'name' => 'Styles',
'description' => 'Test general style functionality.',
'group' => 'Views Plugins',
);
}
/**
* Tests the groupby features of styles.
*/
function testGroupBy() {
$view = $this->getBasicView();
// Setup grouping by the job.
$view->init_display();
$view->init_style();
$view->style_plugin->options['grouping'] = 'job';
// Reduce the amount of items to make the test a bit easier.
// Set up the pager.
$view->display['default']->handler->override_option('pager', array(
'type' => 'some',
'options' => array('items_per_page' => 3),
));
// Add the job field .
$view->display['default']->handler->override_option('fields', array(
'name' => array(
'id' => 'name',
'table' => 'views_test',
'field' => 'name',
'relationship' => 'none',
),
'job' => array(
'id' => 'job',
'table' => 'views_test',
'field' => 'job',
'relationship' => 'none',
),
));
// Now run the query and groupby the result.
$this->executeView($view);
Daniel Wehner
committed
// This is the old way to call it.
$sets = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping']);
$expected = array();
// Use Job: as label, so be sure that the label is used for groupby as well.
$expected['Job: Singer'] = array();
$expected['Job: Singer'][0] = new StdClass();
$expected['Job: Singer'][0]->views_test_name = 'John';
$expected['Job: Singer'][0]->views_test_job = 'Singer';
$expected['Job: Singer'][0]->views_test_id = '1';
$expected['Job: Singer'][1] = new StdClass();
$expected['Job: Singer'][1]->views_test_name = 'George';
$expected['Job: Singer'][1]->views_test_job = 'Singer';
$expected['Job: Singer'][1]->views_test_id = '2';
$expected['Job: Drummer'] = array();
$expected['Job: Drummer'][2] = new StdClass();
$expected['Job: Drummer'][2]->views_test_name = 'Ringo';
$expected['Job: Drummer'][2]->views_test_job = 'Drummer';
$expected['Job: Drummer'][2]->views_test_id = '3';
Daniel Wehner
committed
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
$this->assertEqual($sets, $expected, t('The style plugin should proper groupby the results'));
$expected = array();
$expected['Job: Singer'] = array();
$expected['Job: Singer']['group'] = 'Job: Singer';
$expected['Job: Singer']['rows'][0] = new StdClass();
$expected['Job: Singer']['rows'][0]->views_test_name = 'John';
$expected['Job: Singer']['rows'][0]->views_test_job = 'Singer';
$expected['Job: Singer']['rows'][0]->views_test_id = '1';
$expected['Job: Singer']['rows'][1] = new StdClass();
$expected['Job: Singer']['rows'][1]->views_test_name = 'George';
$expected['Job: Singer']['rows'][1]->views_test_job = 'Singer';
$expected['Job: Singer']['rows'][1]->views_test_id = '2';
$expected['Job: Drummer'] = array();
$expected['Job: Drummer']['group'] = 'Job: Drummer';
$expected['Job: Drummer']['rows'][2] = new StdClass();
$expected['Job: Drummer']['rows'][2]->views_test_name = 'Ringo';
$expected['Job: Drummer']['rows'][2]->views_test_job = 'Drummer';
$expected['Job: Drummer']['rows'][2]->views_test_id = '3';
// The newer api passes the value of the grouping as well.
$sets_new_rendered = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping'], TRUE);
$sets_new_value = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping'], FALSE);
$this->assertEqual($sets_new_rendered, $expected, t('The style plugins should proper groupby the results with grouped by the rendered output.'));
// Reorder the group structure to group by value.
$expected['Singer'] = $expected['Job: Singer'];
$expected['Drummer'] = $expected['Job: Drummer'];
unset($expected['Job: Singer']);
unset($expected['Job: Drummer']);
$this->assertEqual($sets_new_value, $expected, t('The style plugins should proper groupby the results with grouped by the value.'));