Skip to content
Snippets Groups Projects
ConeSearchTest.php 4.21 KiB
<?php

/*
 * This file is part of Anis Server.
 *
 * (c) Laboratoire d'Astrophysique de Marseille / CNRS
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
declare(strict_types=1);

namespace App\Tests\Search\Query;

use PHPUnit\Framework\TestCase;
use App\Search\Query\ConeSearch;
use App\Search\Query\AnisQueryBuilder;
use App\Search\Query\SearchQueryException;
use Doctrine\DBAL\Query\QueryBuilder as DoctrineQueryBuilder;
use Doctrine\DBAL\Query\Expression\ExpressionBuilder;
use App\Entity\Dataset;
use App\Entity\Attribute;

final class ConeSearchTest extends TestCase
{
    public function testConeSearch(): void
    {
        $id = $this->createMock(Attribute::class);
        $id->method('getId')->willReturn(1);
        $ra = $this->createMock(Attribute::class);
        $ra->method('getId')->willReturn(2);
        $dec = $this->createMock(Attribute::class);
        $dec->method('getId')->willReturn(3);
        $datasetSelected = $this->createMock(Dataset::class);
        $datasetSelected->method('getAttributes')->willReturn(array($id, $ra, $dec));
        $datasetSelected->method('getConfig')->willReturn(array('cone_search' => array(
            'cone_search_enabled' => true,
            'cone_search_column_ra' => 2,
            'cone_search_column_dec' => 3
        )));

        $doctrineQueryBuilder = $this->createMock(DoctrineQueryBuilder::class);
        $expr = $this->createMock(ExpressionBuilder::class);
        $doctrineQueryBuilder->method('expr')->willReturn($expr);
        $doctrineQueryBuilder->expects($this->once())->method('where');
        $anisQueryBuilder = $this->createMock(AnisQueryBuilder::class);
        $anisQueryBuilder->method('getDoctrineQueryBuilder')->willReturn($doctrineQueryBuilder);
        $queryParams = array('cs' => '102.5:0.0:100');
        (new ConeSearch())($anisQueryBuilder, $datasetSelected, $queryParams);
    }

    public function testConeSearchException(): void
    {
        $this->expectException(SearchQueryException::class);
        $anisQueryBuilder = $this->createMock(AnisQueryBuilder::class);
        $datasetSelected = $this->createMock(Dataset::class);
        $queryParams = array('cs' => '102.5:0.0:100:10');
        (new ConeSearch())($anisQueryBuilder, $datasetSelected, $queryParams);
    }

    public function testConeSearchUnavailableException(): void
    {
        $this->expectException(SearchQueryException::class);
        $anisQueryBuilder = $this->createMock(AnisQueryBuilder::class);
        $datasetSelected = $this->createMock(Dataset::class);
        $datasetSelected->method('getConfig')->willReturn(array('cone_search' => array(
            'cone_search_enabled' => false,
            'cone_search_column_ra' => 2,
            'cone_search_column_dec' => 3
        )));
        $queryParams = array('cs' => '102.5:0.0:100');
        (new ConeSearch())($anisQueryBuilder, $datasetSelected, $queryParams);
    }

    public function testConeSearchParamsValues(): void
    {
        $id = $this->createMock(Attribute::class);
        $id->method('getId')->willReturn(1);
        $ra = $this->createMock(Attribute::class);
        $ra->method('getId')->willReturn(2);
        $dec = $this->createMock(Attribute::class);
        $dec->method('getId')->willReturn(3);
        $datasetSelected = $this->createMock(Dataset::class);
        $datasetSelected->method('getAttributes')->willReturn(array($id, $ra, $dec));
        $datasetSelected->method('getConfig')->willReturn(array('cone_search' => array(
            'cone_search_enabled' => true,
            'cone_search_column_ra' => 2,
            'cone_search_column_dec' => 3
        )));

        $doctrineQueryBuilder = $this->createMock(DoctrineQueryBuilder::class);
        $expr = $this->createMock(ExpressionBuilder::class);
        $doctrineQueryBuilder->method('expr')->willReturn($expr);
        $doctrineQueryBuilder->expects($this->once())->method('where');
        $anisQueryBuilder = $this->createMock(AnisQueryBuilder::class);
        $anisQueryBuilder->method('getDoctrineQueryBuilder')->willReturn($doctrineQueryBuilder);
        $queryParams = array('cs' => '102.5:91:0');
        (new ConeSearch())($anisQueryBuilder, $datasetSelected, $queryParams);
    }
}