diff --git a/src/Aggregation/DateRangeAggregation.php b/src/Aggregation/DateRangeAggregation.php index b70da8f94ed621464a8b6c6d15d3b3409a967b95..fb8f7e375b7cae8b56fb91863e850e5342f8aa97 100644 --- a/src/Aggregation/DateRangeAggregation.php +++ b/src/Aggregation/DateRangeAggregation.php @@ -41,8 +41,9 @@ class DateRangeAggregation extends AbstractAggregation */ public function __construct($name, $field = null, $format = null, array $ranges = []) { - parent::__construct($name, $field); + parent::__construct($name); + $this->setField($field); $this->setFormat($format); foreach ($ranges as $range) { $from = isset($range['from']) ? $range['from'] : null; diff --git a/tests/Aggregation/DateRangeAggregationTest.php b/tests/Aggregation/DateRangeAggregationTest.php index 45ec22675d39a8eba2f574f4a82002a849b16b8b..e9050240650d76e9f989b6196186ff2b6a02c04c 100644 --- a/tests/Aggregation/DateRangeAggregationTest.php +++ b/tests/Aggregation/DateRangeAggregationTest.php @@ -66,4 +66,74 @@ class DateRangeAggregationTest extends \PHPUnit_Framework_TestCase $result = $aggregation->getType(); $this->assertEquals('date_range', $result); } + + /** + * Data provider for testDateRangeAggregationConstructor. + * + * @return array + */ + public function testDateRangeAggregationConstructorProvider() + { + return [ + // Case #0. Minimum arguments. + [], + // Case #1. Provide field. + ['field' => 'fieldName'], + // Case #2. Provide format. + ['field' => 'fieldName', 'format' => 'formatString'], + // Case #3. Provide empty ranges. + ['field' => 'fieldName', 'format' => 'formatString', 'ranges' => []], + // Case #4. Provide 1 range. + [ + 'field' => 'fieldName', + 'format' => 'formatString', + 'ranges' => [['from' => 'value']], + ], + // Case #4. Provide 2 ranges. + [ + 'field' => 'fieldName', + 'format' => 'formatString', + 'ranges' => [['from' => 'value'], ['to' => 'value']], + ], + // Case #5. Provide 3 ranges. + [ + 'field' => 'fieldName', + 'format' => 'formatString', + 'ranges' => [['from' => 'value'], ['to' => 'value'], ['from' => 'value', 'to' => 'value2']], + ], + ]; + } + + /** + * Tests constructor method. + * + * @param string $field + * @param string $format + * @param array $ranges + * + * @dataProvider testDateRangeAggregationConstructorProvider + */ + public function testDateRangeAggregationConstructor($field = null, $format = null, array $ranges = null) + { + /** @var DateRangeAggregation|\PHPUnit_Framework_MockObject_MockObject $aggregation */ + $aggregation = $this->getMockBuilder('ONGR\ElasticsearchDSL\Aggregation\DateRangeAggregation') + ->disableOriginalConstructor()->getMock(); + $aggregation->expects($this->once())->method('setField')->with($field); + $aggregation->expects($this->once())->method('setFormat')->with($format); + $aggregation->expects($this->exactly(count($ranges)))->method('addRange'); + + if ($field !== null) { + if ($format !== null) { + if ($ranges !== null) { + $aggregation->__construct('mock', $field, $format, $ranges); + } else { + $aggregation->__construct('mock', $field, $format); + } + } else { + $aggregation->__construct('mock', $field); + } + } else { + $aggregation->__construct('mock'); + } + } }