Skip to content
Snippets Groups Projects
SearchTest.php 4.69 KiB
Newer Older
<?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()
        );
    }
}