diff --git a/core/modules/system/tests/modules/entity_test/entity_test.views.inc b/core/modules/system/tests/modules/entity_test/entity_test.views.inc index 4e348b0..5e3975b 100644 --- a/core/modules/system/tests/modules/entity_test/entity_test.views.inc +++ b/core/modules/system/tests/modules/entity_test/entity_test.views.inc @@ -74,64 +74,7 @@ function entity_test_views_data() { ); } - $data['entity_test_property_data']['table']['join']['entity_test'] = 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( + $data['entity_test']['name'] = array( 'title' => t('Name'), 'help' => t('The name of the test entity.'), 'field' => array( @@ -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'), 'help' => t('The name of the test entity.'), 'field' => array( diff --git a/core/modules/views/lib/Drupal/views/Tests/QueryGroupByTest.php b/core/modules/views/lib/Drupal/views/Tests/QueryGroupByTest.php index 92bb8ce..8d38134 100644 --- a/core/modules/views/lib/Drupal/views/Tests/QueryGroupByTest.php +++ b/core/modules/views/lib/Drupal/views/Tests/QueryGroupByTest.php @@ -2,7 +2,7 @@ /** * @file - * Definition of Drupal\views\Tests\QueryGroupByTest. + * Contains \Drupal\views\Tests\QueryGroupByTest. */ namespace Drupal\views\Tests; @@ -10,7 +10,7 @@ /** * Tests aggregate functionality of views, for example count. */ -class QueryGroupByTest extends ViewTestBase { +class QueryGroupByTest extends ViewUnitTestBase { /** * Views used by this test. @@ -19,6 +19,20 @@ class QueryGroupByTest extends ViewTestBase { */ 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() { return array( 'name' => 'Groupby', @@ -28,27 +42,22 @@ public static function getInfo() { } /** - * Tests aggregate count feature. + * {@inheritdoc} */ - public function testAggregateCount() { - // Create 2 nodes of type1 and 3 nodes of type2 - $type1 = $this->drupalCreateContentType(); - $type2 = $this->drupalCreateContentType(); + protected function setUp() { + parent::setUp(); - $node_1 = array( - 'type' => $type1->type, - ); - $this->drupalCreateNode($node_1); - $this->drupalCreateNode($node_1); - $this->drupalCreateNode($node_1); - $this->drupalCreateNode($node_1); + $this->installSchema('entity_test', array('entity_test')); - $node_2 = array( - 'type' => $type2->type, - ); - $this->drupalCreateNode($node_2); - $this->drupalCreateNode($node_2); - $this->drupalCreateNode($node_2); + $this->storageController = $this->container->get('plugin.manager.entity')->getStorageController('entity_test'); + } + + + /** + * Tests aggregate count feature. + */ + public function testAggregateCount() { + $this->setupTestEntities(); $view = views_get_view('test_aggregate_count'); $this->executeView($view); @@ -57,87 +66,106 @@ public function testAggregateCount() { $types = array(); foreach ($view->result as $item) { - // num_records is a alias for nid. - $types[$item->node_field_data_type] = $item->num_records; + // num_records is a alias for id. + $types[$item->entity_test_name] = $item->num_records; } - $this->assertEqual($types[$type1->type], 4); - $this->assertEqual($types[$type2->type], 3); + $this->assertEqual($types['name1'], 4, 'Groupby the name: name1 returned the expected amount of results.'); + $this->assertEqual($types['name2'], 3, 'Groupby the name: name2 returned the expected amount of results.'); } - //public function testAggregateSum() { - //} - /** - * @param $group_by - * Which group_by function should be used, for example sum or count. + * Provides a test helper which runs a view with some aggregation function. + * + * @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) { - // Create 2 nodes of type1 and 3 nodes of type2 - $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); + public function groupByTestHelper($aggregation_function, $values) { + $this->setupTestEntities(); $view = views_get_view('test_group_by_count'); $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->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) { - $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[$type2->type], $values[1]); + $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['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() { - $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() { // Check if GROUP BY and HAVING are included when a view // 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++) { - $this->drupalCreateNode($node_1); + $this->storageController->create(array('name' => 'name1'))->save(); } $view = views_get_view('test_group_by_in_filters'); diff --git a/core/modules/views/lib/Drupal/views/Tests/ViewUnitTestBase.php b/core/modules/views/lib/Drupal/views/Tests/ViewUnitTestBase.php index 134b97a..ba3a6aa 100644 --- a/core/modules/views/lib/Drupal/views/Tests/ViewUnitTestBase.php +++ b/core/modules/views/lib/Drupal/views/Tests/ViewUnitTestBase.php @@ -222,6 +222,7 @@ protected function executeView($view, $args = array()) { $view->setDisplay(); $view->preExecute($args); $view->execute(); + $this->verbose('
Executed view: ' . ((string) $view->build_info['query']) . '
'); } /** diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_aggregate_count.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_aggregate_count.yml index 9581654..686a550 100644 --- a/core/modules/views/tests/views_test_config/test_views/views.view.test_aggregate_count.yml +++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_aggregate_count.yml @@ -1,4 +1,4 @@ -base_table: node +base_table: entity_test core: '8' description: '' status: '1' @@ -8,21 +8,21 @@ display: access: type: none arguments: - type: + name: default_action: summary default_argument_type: fixed - field: type - id: type + field: name + id: name summary: format: default_summary - table: node_field_data - plugin_id: node_type + table: entity_test + plugin_id: string cache: type: none exposed_form: type: basic fields: - nid: + id: alter: alter_text: '0' ellipsis: '1' @@ -32,12 +32,12 @@ display: trim: '0' word_boundary: '1' empty_zero: '0' - field: title + field: id hide_empty: '0' - id: nid + id: id link_to_node: '0' - table: node - plugin_id: node + table: entity_test + plugin_id: numeric group_by: '1' pager: type: some diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_count.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_count.yml index c69fb29..f16877c 100644 --- a/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_count.yml +++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_count.yml @@ -1,4 +1,4 @@ -base_table: node +base_table: entity_test core: '8' description: '' status: '1' @@ -12,7 +12,7 @@ display: exposed_form: type: basic fields: - nid: + id: alter: alter_text: '0' ellipsis: '1' @@ -22,14 +22,13 @@ display: trim: '0' word_boundary: '1' empty_zero: '0' - field: nid + field: id group_type: { } hide_empty: '0' - id: nid - link_to_node: '0' - table: node - plugin_id: node - type: + id: id + table: entity_test + plugin_id: numeric + name: alter: alter_text: '0' ellipsis: '1' @@ -39,12 +38,11 @@ display: trim: '0' word_boundary: '1' empty_zero: '0' - field: type + field: name hide_empty: '0' - id: type - link_to_node: '0' - table: node_field_data - plugin_id: node_type + id: name + table: entity_test + plugin_id: standard group_by: '1' pager: type: some diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_in_filters.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_in_filters.yml index 753dd4c..671b656 100644 --- a/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_in_filters.yml +++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_in_filters.yml @@ -1,4 +1,4 @@ -base_table: node +base_table: entity_test core: '8' description: '' status: '1' @@ -12,7 +12,7 @@ display: exposed_form: type: basic fields: - type: + name: alter: alter_text: '0' ellipsis: '1' @@ -22,19 +22,18 @@ display: trim: '0' word_boundary: '1' empty_zero: '0' - field: type + field: name hide_empty: '0' - id: type - link_to_node: '0' - table: node_field_data - plugin_id: node_type + id: name + table: entity_test + plugin_id: standard filters: - nid: - field: nid + id: + field: id group_type: count - id: nid + id: id operator: '>' - table: node + table: entity_test value: value: '3' plugin_id: numeric