Skip to content

Commit

Permalink
Merge pull request #92 from niels-nijens/fix-filters-aggregation
Browse files Browse the repository at this point in the history
Fix returned array of FiltersAggregation
  • Loading branch information
saimaz committed May 3, 2016
2 parents 0a8b435 + 2a24178 commit 8ed6c32
Show file tree
Hide file tree
Showing 3 changed files with 151 additions and 20 deletions.
4 changes: 2 additions & 2 deletions src/Aggregation/FiltersAggregation.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,9 @@ public function addFilter(BuilderInterface $filter, $name = '')
if ($this->anonymous === false && empty($name)) {
throw new \LogicException('In not anonymous filters filter name must be set.');
} elseif ($this->anonymous === false && !empty($name)) {
$this->filters['filters'][$name] = [$filter->getType() => $filter->toArray()];
$this->filters['filters'][$name] = $filter->toArray();
} else {
$this->filters['filters'][] = [$filter->getType() => $filter->toArray()];
$this->filters['filters'][] = $filter->toArray();
}

return $this;
Expand Down
26 changes: 8 additions & 18 deletions tests/Aggregation/FiltersAggregationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

namespace ONGR\ElasticsearchDSL\Tests\Aggregation;

use ONGR\ElasticsearchDSL\Aggregation\AbstractAggregation;
use ONGR\ElasticsearchDSL\Aggregation\FiltersAggregation;
use ONGR\ElasticsearchDSL\BuilderInterface;

Expand Down Expand Up @@ -65,9 +64,6 @@ public function testToArray()
$filter = $this->getMockBuilder('ONGR\ElasticsearchDSL\BuilderInterface')
->setMethods(['toArray', 'getType'])
->getMockForAbstractClass();
$filter->expects($this->any())
->method('getType')
->willReturn('test_filter');
$filter->expects($this->any())
->method('toArray')
->willReturn(['test_field' => ['test_value' => 'test']]);
Expand All @@ -79,17 +75,13 @@ public function testToArray()
'filters' => [
'filters' => [
'first' => [
'test_filter' => [
'test_field' => [
'test_value' => 'test',
],
'test_field' => [
'test_value' => 'test',
],
],
'second' => [
'test_filter' => [
'test_field' => [
'test_value' => 'test',
],
'test_field' => [
'test_value' => 'test',
],
],
],
Expand All @@ -105,10 +97,8 @@ public function testConstructorFilter()
{
/** @var BuilderInterface|\PHPUnit_Framework_MockObject_MockObject $builderInterface1 */
$builderInterface1 = $this->getMockForAbstractClass('ONGR\ElasticsearchDSL\BuilderInterface');
$builderInterface1->expects($this->any())->method('getType')->willReturn('type1');
/** @var BuilderInterface|\PHPUnit_Framework_MockObject_MockObject $builderInterface2 */
$builderInterface2 = $this->getMockForAbstractClass('ONGR\ElasticsearchDSL\BuilderInterface');
$builderInterface2->expects($this->any())->method('getType')->willReturn('type2');

$aggregation = new FiltersAggregation(
'test',
Expand All @@ -122,8 +112,8 @@ public function testConstructorFilter()
[
'filters' => [
'filters' => [
'filter1' => ['type1' => null],
'filter2' => ['type2' => null],
'filter1' => null,
'filter2' => null,
],
],
],
Expand All @@ -143,8 +133,8 @@ public function testConstructorFilter()
[
'filters' => [
'filters' => [
['type1' => null],
['type2' => null],
null,
null,
],
],
],
Expand Down
141 changes: 141 additions & 0 deletions tests/Integration/SearchTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
<?php

/*
* This file is part of the ONGR package.
*
* (c) NFQ Technologies UAB <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace ONGR\ElasticsearchDSL\Tests\Aggregation\Integration;

use ONGR\ElasticsearchDSL\Aggregation\FiltersAggregation;
use ONGR\ElasticsearchDSL\Aggregation\HistogramAggregation;
use ONGR\ElasticsearchDSL\Query\TermQuery;
use ONGR\ElasticsearchDSL\Search;
use PHPUnit_Framework_TestCase;

/**
* Tests integration of examples from the documentation.
*/
class SearchTest extends PHPUnit_Framework_TestCase
{
/**
* Tests integration of the FiltersAggregation named example from the documentation.
*
* @link https://github.com/ongr-io/ElasticsearchDSL/blob/master/docs/Aggregation/Filters.md#named-example
*/
public function testFiltersAggregationNamedExample()
{
$errorTermFilter = new TermQuery('body', 'error');
$warningTermFilter = new TermQuery('body', 'warning');

$histogramAggregation = new HistogramAggregation('monthly', 'timestamp');
$histogramAggregation->setInterval('1M');

$filterAggregation = new FiltersAggregation(
'grades_stats',
[
'error' => $errorTermFilter,
'warning' => $warningTermFilter,
]
);
$filterAggregation->addAggregation($histogramAggregation);

$search = new Search();
$search->addAggregation($filterAggregation);

$this->assertSame(
[
'aggregations' => [
'grades_stats' => [
'filters' => [
'filters' => [
'error' => [
'term' => [
'body' => 'error',
],
],
'warning' => [
'term' => [
'body' => 'warning',
],
],
],
],
'aggregations' => [
'monthly' => [
'histogram' => [
'field' => 'timestamp',
'interval' => '1M',
],
],
],
],
],
],
$search->toArray()
);
}

/**
* Tests integration of the FiltersAggregation anonymous example from the documentation.
*
* @link https://github.com/ongr-io/ElasticsearchDSL/blob/master/docs/Aggregation/Filters.md#anonymous-example
*/
public function testFiltersAggregationAnonymousExample()
{
$errorTermFilter = new TermQuery('body', 'error');
$warningTermFilter = new TermQuery('body', 'warning');

$histogramAggregation = new HistogramAggregation('monthly', 'timestamp');
$histogramAggregation->setInterval('1M');

$filterAggregation = new FiltersAggregation(
'grades_stats',
[
'error' => $errorTermFilter,
'warning' => $warningTermFilter,
],
true
);
$filterAggregation->addAggregation($histogramAggregation);

$search = new Search();
$search->addAggregation($filterAggregation);

$this->assertSame(
[
'aggregations' => [
'grades_stats' => [
'filters' => [
'filters' => [
[
'term' => [
'body' => 'error',
],
],
[
'term' => [
'body' => 'warning',
],
],
],
],
'aggregations' => [
'monthly' => [
'histogram' => [
'field' => 'timestamp',
'interval' => '1M',
],
],
],
],
],
],
$search->toArray()
);
}
}

0 comments on commit 8ed6c32

Please sign in to comment.