1 views_groupby.test ViewsQueryGroupByTest::GroupByTestHelper($group_by = NULL, $values = NULL)

Parameters

string|null $group_by: (optional) Which group_by function should be used, for example sum or count. If omitted, the aggregation is tested with no group function.

array|null $values: (optional) Expected values.

File

core/modules/views/tests/views_groupby.test, line 107
Tests aggregate functionality of Views.

Class

ViewsQueryGroupByTest
Tests aggregate functionality of views, for example count.

Code

function GroupByTestHelper($group_by = NULL, $values = NULL) {
  // Create 4 nodes of type1 and 3 nodes of type2.
  $type1 = $this->backdropCreateContentType();
  $type2 = $this->backdropCreateContentType();

  $node_1 = array(
    'type' => $type1->type,
  );
  // Nids from 1 to 4.
  $this->backdropCreateNode($node_1);
  $this->backdropCreateNode($node_1);
  $this->backdropCreateNode($node_1);
  $this->backdropCreateNode($node_1);
  $node_2 = array(
    'type' => $type2->type,
  );
  // Nids from 5 to 7.
  $this->backdropCreateNode($node_2);
  $this->backdropCreateNode($node_2);
  $this->backdropCreateNode($node_2);

  $view = $this->viewsGroupByViewHelper($group_by);
  $output = $view->execute_display();

  $this->assertEqual(count($view->result), 2, 'Make sure the count of items is right.');

  $results = array();
  // There's no need for a function in order to have aggregation.
  if (empty($group_by)) {
    $types = array($type1->type, $type2->type);
    $results = array_map(function($item) {
      return $item->node_type;
    }, $view->result);
    sort($types);
    sort($results);
    $this->assertIdentical($results, $types);
    // Exit here with no aggregation function.
    return;
  }

  // Group by nodetype to identify the right count.
  foreach ($view->result as $item) {
    $results[$item->node_type] = $item->nid;
  }
  $this->assertEqual($results[$type1->type], $values[0]);
  $this->assertEqual($results[$type2->type], $values[1]);
}