diff --git a/src/Aggregation/Bucketing/AutoDateHistogramAggregation.php b/src/Aggregation/Bucketing/AutoDateHistogramAggregation.php new file mode 100644 index 0000000000000000000000000000000000000000..09489f275662bb57fe89946a5160cb2396471da6 --- /dev/null +++ b/src/Aggregation/Bucketing/AutoDateHistogramAggregation.php @@ -0,0 +1,69 @@ +<?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\Aggregation\Bucketing; + +use ONGR\ElasticsearchDSL\Aggregation\AbstractAggregation; +use ONGR\ElasticsearchDSL\Aggregation\Type\BucketingTrait; +use ONGR\ElasticsearchDSL\BuilderInterface; + +/** + * Class representing AutoDateHistogramAggregation. + * + * @link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-autodatehistogram-aggregation.html + */ +class AutoDateHistogramAggregation extends AbstractAggregation +{ + use BucketingTrait; + + /** + * Inner aggregations container init. + * + * @param string $name + * @param string $field + * @param int $buckets + * @param string $format + */ + public function __construct($name, $field, $buckets = null, $format = null) + { + parent::__construct($name); + + $this->setField($field); + + if ($buckets) + $this->addParameter('buckets', $buckets); + + if ($format) + $this->addParameter('format', $format); + } + + /** + * {@inheritdoc} + */ + public function getArray() + { + $data = array_filter( + [ + 'field' => $this->getField(), + ] + ); + + return $data; + } + + /** + * {@inheritdoc} + */ + public function getType() + { + return 'auto_date_histogram'; + } +} diff --git a/tests/Unit/Aggregation/Bucketing/AudoDateHistogramAggregationTest.php b/tests/Unit/Aggregation/Bucketing/AudoDateHistogramAggregationTest.php new file mode 100644 index 0000000000000000000000000000000000000000..bece77d306e2ba2d714f4be7dfbc64292db0171e --- /dev/null +++ b/tests/Unit/Aggregation/Bucketing/AudoDateHistogramAggregationTest.php @@ -0,0 +1,110 @@ +<?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\Unit\Bucketing\Aggregation; + +use ONGR\ElasticsearchDSL\Aggregation\Bucketing\AutoDateHistogramAggregation; +use ONGR\ElasticsearchDSL\Aggregation\Bucketing\TermsAggregation; + +class AudoDateHistogramAggregationTest extends \PHPUnit\Framework\TestCase +{ + /** + * Tests agg. + */ + public function testAutoDateHistogramAggregationSetField() + { + // Case #0 terms aggregation. + $aggregation = new AutoDateHistogramAggregation('test_agg', 'test_field'); + + $result = [ + 'auto_date_histogram' => ['field' => 'test_field'], + ]; + + $this->assertEquals($aggregation->toArray(), $result); + } + + /** + * Tests setSize method. + */ + public function testAutoDateHistogramAggregationFormat() + { + $date = '2020-12-25'; + // Case #1 + $aggregation = new AutoDateHistogramAggregation('test_agg', 'test_field'); + $aggregation->addParameter('format', $date); + + $result = [ + 'auto_date_histogram' => [ + 'field' => 'test_field', + 'format' => $date, + + ], + ]; + + $this->assertEquals($aggregation->toArray(), $result); + + // Case #2 + $aggregation = new AutoDateHistogramAggregation('test_agg', 'test_field', null, $date); + + $result = [ + 'auto_date_histogram' => [ + 'field' => 'test_field', + 'format' => $date, + ], + ]; + + $this->assertEquals($aggregation->toArray(), $result); + } + + /** + * Tests buckets. + */ + public function testAutoDateHistogramAggregationBuckets() + { + // Case #1 + $aggregation = new AutoDateHistogramAggregation('test_agg', 'wrong_field'); + $aggregation->setField('test_field'); + + $aggregation->addParameter('buckets', 5); + + $result = [ + 'auto_date_histogram' => [ + 'field' => 'test_field', + 'buckets' => 5, + ], + ]; + + $this->assertEquals($aggregation->toArray(), $result); + + // Case #2 + $aggregation = new AutoDateHistogramAggregation('test_agg', 'wrong_field', 5); + $aggregation->setField('test_field'); + + $result = [ + 'auto_date_histogram' => [ + 'field' => 'test_field', + 'buckets' => 5, + ], + ]; + + $this->assertEquals($aggregation->toArray(), $result); + } + + /** + * Tests getType method. + */ + public function testAutoDateHistogramAggregationGetType() + { + $aggregation = new AutoDateHistogramAggregation('foo', 'bar'); + $result = $aggregation->getType(); + $this->assertEquals('auto_date_histogram', $result); + } +}