diff --git a/src/Aggregation/FiltersAggregation.php b/src/Aggregation/FiltersAggregation.php index 51e8ba623e8ae6ae42e04a038ae4367fa8162832..af8aa1aae7f81a27c2dcc4b1818498b212d2bf22 100644 --- a/src/Aggregation/FiltersAggregation.php +++ b/src/Aggregation/FiltersAggregation.php @@ -77,9 +77,9 @@ class FiltersAggregation extends AbstractAggregation 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; diff --git a/tests/Aggregation/FiltersAggregationTest.php b/tests/Aggregation/FiltersAggregationTest.php index 379f3da100f33088cdc231c02106b76d34e6d3aa..cb05d9222a1dd7f594e3dc868734fb4fec4aed97 100644 --- a/tests/Aggregation/FiltersAggregationTest.php +++ b/tests/Aggregation/FiltersAggregationTest.php @@ -11,7 +11,6 @@ namespace ONGR\ElasticsearchDSL\Tests\Aggregation; -use ONGR\ElasticsearchDSL\Aggregation\AbstractAggregation; use ONGR\ElasticsearchDSL\Aggregation\FiltersAggregation; use ONGR\ElasticsearchDSL\BuilderInterface; @@ -65,9 +64,6 @@ class FiltersAggregationTest extends \PHPUnit_Framework_TestCase $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']]); @@ -79,17 +75,13 @@ class FiltersAggregationTest extends \PHPUnit_Framework_TestCase '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', ], ], ], @@ -105,10 +97,8 @@ class FiltersAggregationTest extends \PHPUnit_Framework_TestCase { /** @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', @@ -122,8 +112,8 @@ class FiltersAggregationTest extends \PHPUnit_Framework_TestCase [ 'filters' => [ 'filters' => [ - 'filter1' => ['type1' => null], - 'filter2' => ['type2' => null], + 'filter1' => null, + 'filter2' => null, ], ], ], @@ -143,8 +133,8 @@ class FiltersAggregationTest extends \PHPUnit_Framework_TestCase [ 'filters' => [ 'filters' => [ - ['type1' => null], - ['type2' => null], + null, + null, ], ], ], diff --git a/tests/Integration/SearchTest.php b/tests/Integration/SearchTest.php new file mode 100644 index 0000000000000000000000000000000000000000..9573f57b3b1e6382a5f4918cd73189e87dccd812 --- /dev/null +++ b/tests/Integration/SearchTest.php @@ -0,0 +1,141 @@ +<?php + +/* + * This file is part of the ONGR package. + * + * (c) NFQ Technologies UAB <info@nfq.com> + * + * 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() + ); + } +}