Completed
Push — master ( cdf882...92ebd2 )
by Nicolas
02:36
created

testToArrayInvalidBucketsPath()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Elastica\Test\Aggregation;
4
5
use Elastica\Aggregation\Avg;
6
use Elastica\Aggregation\PercentilesBucket;
7
use Elastica\Aggregation\Terms;
8
use Elastica\Document;
9
use Elastica\Index;
10
use Elastica\Query;
11
12
/**
13
 * @internal
14
 */
15
class PercentilesBucketTest extends BaseAggregationTest
16
{
17
    /**
18
     * @group functional
19
     */
20
    public function testPercentilesBucketAggregation(): void
21
    {
22
        $query = Query::create([])
23
            ->addAggregation(
24
                (new Terms('pages'))
25
                    ->setField('page')
26
                    ->setSize(3)
27
                    ->addAggregation(
28
                        (new Avg('avg_likes'))
29
                            ->setField('likes')
30
                    )
31
            )
32
            ->addAggregation(
33
                (new PercentilesBucket('percentiles_likes_by_page'))
34
                    ->setBucketsPath('pages>avg_likes')
35
                    ->setPercents([5, 50, 95])
36
            )
37
        ;
38
39
        $results = $this->_getIndexForTest()->search($query)->getAggregations();
40
41
        $this->assertEquals(5, $results['pages']['buckets'][0]['avg_likes']['value']);
42
        $this->assertEquals(100, $results['pages']['buckets'][1]['avg_likes']['value']);
43
        $this->assertEquals(150, $results['pages']['buckets'][2]['avg_likes']['value']);
44
        $this->assertEquals(
45
            ['5.0' => 5, '50.0' => 100, '95.0' => 150],
46
            $results['percentiles_likes_by_page']['values']
47
        );
48
    }
49
50
    /**
51
     * @group unit
52
     */
53
    public function testConstructThroughSetters(): void
54
    {
55
        $serialDiffAgg = new PercentilesBucket('percentiles_bucket');
56
57
        $serialDiffAgg
58
            ->setBucketsPath('pages>avg_likes_by_page')
59
            ->setFormat('test_format')
60
            ->setPercents([10, 80])
61
            ->setGapPolicy(10)
62
            ->setKeyed(false)
63
        ;
64
65
        $expected = [
66
            'percentiles_bucket' => [
67
                'buckets_path' => 'pages>avg_likes_by_page',
68
                'format' => 'test_format',
69
                'gap_policy' => 10,
70
                'percents' => [10, 80],
71
                'keyed' => false,
72
            ],
73
        ];
74
75
        $this->assertEquals($expected, $serialDiffAgg->toArray());
76
    }
77
78
    /**
79
     * @group unit
80
     */
81
    public function testToArrayInvalidBucketsPath(): void
82
    {
83
        $this->expectException(\Elastica\Exception\InvalidException::class);
84
85
        $serialDiffAgg = new PercentilesBucket('avg_bucket');
86
        $serialDiffAgg->toArray();
87
    }
88
89
    protected function _getIndexForTest(): Index
90
    {
91
        $index = $this->_createIndex();
92
93
        $index->addDocuments([
94
            Document::create(['page' => 1, 'likes' => 5]),
95
            Document::create(['page' => 2, 'likes' => 100]),
96
            Document::create(['page' => 3, 'likes' => 150]),
97
        ]);
98
99
        $index->refresh();
100
101
        return $index;
102
    }
103
}
104