Commit 1ea2d228 authored by alexpott's avatar alexpott
Browse files

Issue #1946208 by dawehner: Rewrite QueryGroupByTest to use ViewUnitTestBase.

parent 757d39e2
...@@ -74,64 +74,7 @@ function entity_test_views_data() { ...@@ -74,64 +74,7 @@ function entity_test_views_data() {
); );
} }
$data['entity_test_property_data']['table']['join']['entity_test'] = array( $data['entity_test']['name'] = array(
'left_field' => 'id',
'field' => 'id',
);
$data['entity_test_property_data']['id'] = array(
'title' => t('ID'),
'help' => t('The {entity_test}.id of the test entity.'),
'argument' => array(
'id' => 'numeric',
),
'field' => array(
'id' => 'numeric',
),
'filter' => array(
'id' => 'numeric',
),
'sort' => array(
'id' => 'standard',
),
);
if (module_exists('langcode')) {
$data['entity_test_property_data']['langcode'] = array(
'title' => t('Language'),
'help' => t('The {language}.langcode of this variant of this test entity.'),
'field' => array(
'id' => 'language',
),
'filter' => array(
'id' => 'language',
),
'argument' => array(
'id' => 'language',
),
'sort' => array(
'id' => 'standard',
),
);
$data['entity_test_property_data']['default_langcode'] = array(
'title' => t('Default langcode'),
'help' => t('Boolean indicating whether the current variant is in the original entity language.'),
'field' => array(
'id' => 'boolean',
),
'filter' => array(
'id' => 'boolean',
),
'argument' => array(
'id' => 'numeric',
),
'sort' => array(
'id' => 'standard',
),
);
}
$data['entity_test_property_data']['name'] = array(
'title' => t('Name'), 'title' => t('Name'),
'help' => t('The name of the test entity.'), 'help' => t('The name of the test entity.'),
'field' => array( 'field' => array(
...@@ -148,7 +91,7 @@ function entity_test_views_data() { ...@@ -148,7 +91,7 @@ function entity_test_views_data() {
), ),
); );
$data['entity_test_property_data']['user_id'] = array( $data['entity_test']['user_id'] = array(
'title' => t('Name'), 'title' => t('Name'),
'help' => t('The name of the test entity.'), 'help' => t('The name of the test entity.'),
'field' => array( 'field' => array(
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/** /**
* @file * @file
* Definition of Drupal\views\Tests\QueryGroupByTest. * Contains \Drupal\views\Tests\QueryGroupByTest.
*/ */
namespace Drupal\views\Tests; namespace Drupal\views\Tests;
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
/** /**
* Tests aggregate functionality of views, for example count. * Tests aggregate functionality of views, for example count.
*/ */
class QueryGroupByTest extends ViewTestBase { class QueryGroupByTest extends ViewUnitTestBase {
/** /**
* Views used by this test. * Views used by this test.
...@@ -19,6 +19,20 @@ class QueryGroupByTest extends ViewTestBase { ...@@ -19,6 +19,20 @@ class QueryGroupByTest extends ViewTestBase {
*/ */
public static $testViews = array('test_group_by_in_filters', 'test_aggregate_count', 'test_group_by_count'); public static $testViews = array('test_group_by_in_filters', 'test_aggregate_count', 'test_group_by_count');
/**
* Modules to enable.
*
* @var array
*/
public static $modules = array('entity_test', 'system', 'field');
/**
* The storage controller for the test entity type.
*
* @var \Drupal\Core\Entity\DatabaseStorageController
*/
public $storageController;
public static function getInfo() { public static function getInfo() {
return array( return array(
'name' => 'Groupby', 'name' => 'Groupby',
...@@ -28,27 +42,22 @@ public static function getInfo() { ...@@ -28,27 +42,22 @@ public static function getInfo() {
} }
/** /**
* Tests aggregate count feature. * {@inheritdoc}
*/ */
public function testAggregateCount() { protected function setUp() {
// Create 2 nodes of type1 and 3 nodes of type2 parent::setUp();
$type1 = $this->drupalCreateContentType();
$type2 = $this->drupalCreateContentType();
$node_1 = array( $this->installSchema('entity_test', array('entity_test'));
'type' => $type1->type,
);
$this->drupalCreateNode($node_1);
$this->drupalCreateNode($node_1);
$this->drupalCreateNode($node_1);
$this->drupalCreateNode($node_1);
$node_2 = array( $this->storageController = $this->container->get('plugin.manager.entity')->getStorageController('entity_test');
'type' => $type2->type, }
);
$this->drupalCreateNode($node_2);
$this->drupalCreateNode($node_2); /**
$this->drupalCreateNode($node_2); * Tests aggregate count feature.
*/
public function testAggregateCount() {
$this->setupTestEntities();
$view = views_get_view('test_aggregate_count'); $view = views_get_view('test_aggregate_count');
$this->executeView($view); $this->executeView($view);
...@@ -57,87 +66,106 @@ public function testAggregateCount() { ...@@ -57,87 +66,106 @@ public function testAggregateCount() {
$types = array(); $types = array();
foreach ($view->result as $item) { foreach ($view->result as $item) {
// num_records is a alias for nid. // num_records is a alias for id.
$types[$item->node_field_data_type] = $item->num_records; $types[$item->entity_test_name] = $item->num_records;
} }
$this->assertEqual($types[$type1->type], 4); $this->assertEqual($types['name1'], 4, 'Groupby the name: name1 returned the expected amount of results.');
$this->assertEqual($types[$type2->type], 3); $this->assertEqual($types['name2'], 3, 'Groupby the name: name2 returned the expected amount of results.');
} }
//public function testAggregateSum() {
//}
/** /**
* @param $group_by * Provides a test helper which runs a view with some aggregation function.
* Which group_by function should be used, for example sum or count. *
* @param string $aggregation_function
* Which aggregation function should be used, for example sum or count.
* @param array $values
* The expected views result.
*/ */
function GroupByTestHelper($group_by, $values) { public function groupByTestHelper($aggregation_function, $values) {
// Create 2 nodes of type1 and 3 nodes of type2 $this->setupTestEntities();
$type1 = $this->drupalCreateContentType();
$type2 = $this->drupalCreateContentType();
$node_1 = array(
'type' => $type1->type,
);
// Nids from 1 to 4.
$this->drupalCreateNode($node_1);
$this->drupalCreateNode($node_1);
$this->drupalCreateNode($node_1);
$this->drupalCreateNode($node_1);
$node_2 = array(
'type' => $type2->type,
);
// Nids from 5 to 7.
$this->drupalCreateNode($node_2);
$this->drupalCreateNode($node_2);
$this->drupalCreateNode($node_2);
$view = views_get_view('test_group_by_count'); $view = views_get_view('test_group_by_count');
$view->setDisplay(); $view->setDisplay();
$view->displayHandlers->get('default')->options['fields']['nid']['group_type'] = $group_by; $view->displayHandlers->get('default')->options['fields']['id']['group_type'] = $aggregation_function;
$this->executeView($view); $this->executeView($view);
$this->assertEqual(count($view->result), 2, 'Make sure the count of items is right.'); $this->assertEqual(count($view->result), 2, 'Make sure the count of items is right.');
// Group by nodetype to identify the right count. // Group by name to identify the right count.
$results = array();
foreach ($view->result as $item) { foreach ($view->result as $item) {
$results[$item->node_field_data_type] = $item->nid; $results[$item->entity_test_name] = $item->id;
} }
$this->assertEqual($results[$type1->type], $values[0]); $this->assertEqual($results['name1'], $values[0], format_string('Aggregation with @aggregation_function and groupby name: name1 returned the expected amount of results', array('@aggregation_function' => $aggregation_function)));
$this->assertEqual($results[$type2->type], $values[1]); $this->assertEqual($results['name2'], $values[1], format_string('Aggregation with @aggregation_function and groupby name: name2 returned the expected amount of results', array('@aggregation_function' => $aggregation_function)));
}
/**
* Helper method that creates some test entities.
*/
protected function setupTestEntities() {
// Create 4 entities with name1 and 3 nodes with name2.
$entity_1 = array(
'name' => 'name1',
);
$this->storageController->create($entity_1)->save();
$this->storageController->create($entity_1)->save();
$this->storageController->create($entity_1)->save();
$this->storageController->create($entity_1)->save();
$entity_2 = array(
'name' => 'name2',
);
$this->storageController->create($entity_2)->save();
$this->storageController->create($entity_2)->save();
$this->storageController->create($entity_2)->save();
} }
/**
* Tests the count aggregation function.
*/
public function testGroupByCount() { public function testGroupByCount() {
$this->GroupByTestHelper('count', array(4, 3)); $this->groupByTestHelper('count', array(4, 3));
} }
function testGroupBySum() { /**
$this->GroupByTestHelper('sum', array(10, 18)); * Tests the sum aggregation function.
*/
public function testGroupBySum() {
$this->groupByTestHelper('sum', array(10, 18));
} }
function testGroupByAverage() { /**
$this->GroupByTestHelper('avg', array(2.5, 6)); * Tests the average aggregation function.
*/
public function testGroupByAverage() {
$this->groupByTestHelper('avg', array(2.5, 6));
} }
function testGroupByMin() { /**
$this->GroupByTestHelper('min', array(1, 5)); * Tests the min aggregation function.
*/
public function testGroupByMin() {
$this->groupByTestHelper('min', array(1, 5));
} }
function testGroupByMax() { /**
$this->GroupByTestHelper('max', array(4, 7)); * Tests the max aggregation function.
*/
public function testGroupByMax() {
$this->groupByTestHelper('max', array(4, 7));
} }
/**
* Tests groupby with filters.
*/
public function testGroupByCountOnlyFilters() { public function testGroupByCountOnlyFilters() {
// Check if GROUP BY and HAVING are included when a view // Check if GROUP BY and HAVING are included when a view
// Doesn't display SUM, COUNT, MAX... functions in SELECT statment // Doesn't display SUM, COUNT, MAX... functions in SELECT statment
$type1 = $this->drupalCreateContentType();
$node_1 = array(
'type' => $type1->type,
);
for ($x = 0; $x < 10; $x++) { for ($x = 0; $x < 10; $x++) {
$this->drupalCreateNode($node_1); $this->storageController->create(array('name' => 'name1'))->save();
} }
$view = views_get_view('test_group_by_in_filters'); $view = views_get_view('test_group_by_in_filters');
......
...@@ -222,6 +222,7 @@ protected function executeView($view, $args = array()) { ...@@ -222,6 +222,7 @@ protected function executeView($view, $args = array()) {
$view->setDisplay(); $view->setDisplay();
$view->preExecute($args); $view->preExecute($args);
$view->execute(); $view->execute();
$this->verbose('<pre>Executed view: ' . ((string) $view->build_info['query']) . '</pre>');
} }
/** /**
......
base_table: node base_table: entity_test
core: '8' core: '8'
description: '' description: ''
status: '1' status: '1'
...@@ -8,21 +8,21 @@ display: ...@@ -8,21 +8,21 @@ display:
access: access:
type: none type: none
arguments: arguments:
type: name:
default_action: summary default_action: summary
default_argument_type: fixed default_argument_type: fixed
field: type field: name
id: type id: name
summary: summary:
format: default_summary format: default_summary
table: node_field_data table: entity_test
plugin_id: node_type plugin_id: string
cache: cache:
type: none type: none
exposed_form: exposed_form:
type: basic type: basic
fields: fields:
nid: id:
alter: alter:
alter_text: '0' alter_text: '0'
ellipsis: '1' ellipsis: '1'
...@@ -32,12 +32,12 @@ display: ...@@ -32,12 +32,12 @@ display:
trim: '0' trim: '0'
word_boundary: '1' word_boundary: '1'
empty_zero: '0' empty_zero: '0'
field: title field: id
hide_empty: '0' hide_empty: '0'
id: nid id: id
link_to_node: '0' link_to_node: '0'
table: node table: entity_test
plugin_id: node plugin_id: numeric
group_by: '1' group_by: '1'
pager: pager:
type: some type: some
......
base_table: node base_table: entity_test
core: '8' core: '8'
description: '' description: ''
status: '1' status: '1'
...@@ -12,7 +12,7 @@ display: ...@@ -12,7 +12,7 @@ display:
exposed_form: exposed_form:
type: basic type: basic
fields: fields:
nid: id:
alter: alter:
alter_text: '0' alter_text: '0'
ellipsis: '1' ellipsis: '1'
...@@ -22,14 +22,13 @@ display: ...@@ -22,14 +22,13 @@ display:
trim: '0' trim: '0'
word_boundary: '1' word_boundary: '1'
empty_zero: '0' empty_zero: '0'
field: nid field: id
group_type: { } group_type: { }
hide_empty: '0' hide_empty: '0'
id: nid id: id
link_to_node: '0' table: entity_test
table: node plugin_id: numeric
plugin_id: node name:
type:
alter: alter:
alter_text: '0' alter_text: '0'
ellipsis: '1' ellipsis: '1'
...@@ -39,12 +38,11 @@ display: ...@@ -39,12 +38,11 @@ display:
trim: '0' trim: '0'
word_boundary: '1' word_boundary: '1'
empty_zero: '0' empty_zero: '0'
field: type field: name
hide_empty: '0' hide_empty: '0'
id: type id: name
link_to_node: '0' table: entity_test
table: node_field_data plugin_id: standard
plugin_id: node_type
group_by: '1' group_by: '1'
pager: pager:
type: some type: some
......
base_table: node base_table: entity_test
core: '8' core: '8'
description: '' description: ''
status: '1' status: '1'
...@@ -12,7 +12,7 @@ display: ...@@ -12,7 +12,7 @@ display:
exposed_form: exposed_form:
type: basic type: basic
fields: fields:
type: name:
alter: alter:
alter_text: '0' alter_text: '0'
ellipsis: '1' ellipsis: '1'
...@@ -22,19 +22,18 @@ display: ...@@ -22,19 +22,18 @@ display:
trim: '0' trim: '0'
word_boundary: '1' word_boundary: '1'
empty_zero: '0' empty_zero: '0'
field: type field: name
hide_empty: '0' hide_empty: '0'
id: type id: name
link_to_node: '0' table: entity_test
table: node_field_data plugin_id: standard
plugin_id: node_type
filters: filters:
nid: id:
field: nid field: id
group_type: count group_type: count
id: nid id: id
operator: '>' operator: '>'
table: node table: entity_test
value: value:
value: '3' value: '3'
plugin_id: numeric plugin_id: numeric
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment