From 05f846a1cfc2a6b0b04cfaa726ee6225ae151646 Mon Sep 17 00:00:00 2001 From: Daniel Siepmann Date: Thu, 6 Jul 2017 13:53:29 +0200 Subject: [PATCH] Update existing unit tests Make existing unit tests work with new code base. Also add new tests for new code to existing tests. --- Classes/Domain/Model/FacetRequest.php | 4 + Classes/Domain/Search/QueryFactory.php | 1 - Tests/Unit/AbstractUnitTestCase.php | 19 +++++ .../Index/TcaIndexer/TcaTableServiceTest.php | 13 +-- Tests/Unit/Domain/Search/QueryFactoryTest.php | 80 +++++++++++++++---- 5 files changed, 87 insertions(+), 30 deletions(-) diff --git a/Classes/Domain/Model/FacetRequest.php b/Classes/Domain/Model/FacetRequest.php index 715e74a..5b8bea6 100644 --- a/Classes/Domain/Model/FacetRequest.php +++ b/Classes/Domain/Model/FacetRequest.php @@ -35,6 +35,10 @@ class FacetRequest implements FacetRequestInterface protected $field = ''; /** + * TODO: Add validation / exception? + * As the facets come from configuration this might be a good idea to help + * integrators find issues. + * * @param string $identifier * @param string $field */ diff --git a/Classes/Domain/Search/QueryFactory.php b/Classes/Domain/Search/QueryFactory.php index 778b575..70f42ff 100644 --- a/Classes/Domain/Search/QueryFactory.php +++ b/Classes/Domain/Search/QueryFactory.php @@ -67,7 +67,6 @@ class QueryFactory $this->addFilter($searchRequest); $this->addFacets($searchRequest); - // TODO: Add logging here. $this->logger->debug('Generated elasticsearch query.', [$this->query]); return new \Elastica\Query($this->query); } diff --git a/Tests/Unit/AbstractUnitTestCase.php b/Tests/Unit/AbstractUnitTestCase.php index f3281c1..88496a1 100644 --- a/Tests/Unit/AbstractUnitTestCase.php +++ b/Tests/Unit/AbstractUnitTestCase.php @@ -24,4 +24,23 @@ use TYPO3\CMS\Core\Tests\UnitTestCase as CoreTestCase; abstract class AbstractUnitTestCase extends CoreTestCase { + /** + * @return \TYPO3\CMS\Core\Log\LogManager + */ + protected function getMockedLogger() + { + $logger = $this->getMockBuilder(\TYPO3\CMS\Core\Log\LogManager::class) + ->disableOriginalConstructor() + ->setMethods(['getLogger']) + ->getMock(); + $logger->expects($this->once()) + ->method('getLogger') + ->will($this->returnValue( + $this->getMockBuilder(\TYPO3\CMS\Core\Log\Logger::class) + ->disableOriginalConstructor() + ->getMock() + )); + + return $logger; + } } diff --git a/Tests/Unit/Domain/Index/TcaIndexer/TcaTableServiceTest.php b/Tests/Unit/Domain/Index/TcaIndexer/TcaTableServiceTest.php index 3a5b7fd..837d68c 100644 --- a/Tests/Unit/Domain/Index/TcaIndexer/TcaTableServiceTest.php +++ b/Tests/Unit/Domain/Index/TcaIndexer/TcaTableServiceTest.php @@ -41,24 +41,13 @@ class TcaTableServiceTest extends AbstractUnitTestCase parent::setUp(); $this->configuration = $this->getMockBuilder(ConfigurationContainerInterface::class)->getMock(); - $logger = $this->getMockBuilder(\TYPO3\CMS\Core\Log\LogManager::class) - ->disableOriginalConstructor() - ->setMethods(['getLogger']) - ->getMock(); - $logger->expects($this->once()) - ->method('getLogger') - ->will($this->returnValue( - $this->getMockBuilder(\TYPO3\CMS\Core\Log\Logger::class) - ->disableOriginalConstructor() - ->getMock() - )); $this->subject = $this->getMockBuilder(TcaTableService::class) ->disableOriginalConstructor() ->setMethodsExcept(['getWhereClause', 'injectLogger', 'getTableName']) ->getMock(); $this->inject($this->subject, 'configuration', $this->configuration); - $this->inject($this->subject, 'logger', $logger); + $this->inject($this->subject, 'logger', $this->getMockedLogger()); $this->inject($this->subject, 'tableName', 'table'); } diff --git a/Tests/Unit/Domain/Search/QueryFactoryTest.php b/Tests/Unit/Domain/Search/QueryFactoryTest.php index 9cb0a3d..725754f 100644 --- a/Tests/Unit/Domain/Search/QueryFactoryTest.php +++ b/Tests/Unit/Domain/Search/QueryFactoryTest.php @@ -20,7 +20,7 @@ namespace Leonmrni\SearchCore\Tests\Unit\Domain\Search; * 02110-1301, USA. */ -use Leonmrni\SearchCore\Connection; +use Leonmrni\SearchCore\Domain\Model\FacetRequest; use Leonmrni\SearchCore\Domain\Model\SearchRequest; use Leonmrni\SearchCore\Domain\Search\QueryFactory; use Leonmrni\SearchCore\Tests\Unit\AbstractUnitTestCase; @@ -36,7 +36,7 @@ class QueryFactoryTest extends AbstractUnitTestCase { parent::setUp(); - $this->subject = new QueryFactory; + $this->subject = new QueryFactory($this->getMockedLogger()); } /** @@ -44,12 +44,9 @@ class QueryFactoryTest extends AbstractUnitTestCase */ public function creatonOfQueryWorksInGeneral() { - $connection = $this->getMockBuilder(Connection\Elasticsearch::class) - ->disableOriginalConstructor() - ->getMock(); $searchRequest = new SearchRequest('SearchWord'); - $query = $this->subject->create($connection, $searchRequest); + $query = $this->subject->create($searchRequest); $this->assertInstanceOf( \Elastica\Query::class, $query, @@ -62,32 +59,53 @@ class QueryFactoryTest extends AbstractUnitTestCase */ public function filterIsAddedToQuery() { - $connection = $this->getMockBuilder(Connection\Elasticsearch::class) - ->disableOriginalConstructor() - ->getMock(); $searchRequest = new SearchRequest('SearchWord'); $searchRequest->setFilter(['field' => 'content']); - $query = $this->subject->create($connection, $searchRequest); + $query = $this->subject->create($searchRequest); $this->assertSame( - ['field' => 'content'], - $query->toArray()['query']['bool']['filter']['term'], + [ + ['term' => ['field' => 'content']] + ], + $query->toArray()['query']['bool']['filter'], 'Filter was not added to query.' ); } + /** + * @test + */ + public function emptyFilterIsNotAddedToQuery() + { + $searchRequest = new SearchRequest('SearchWord'); + $searchRequest->setFilter([ + 'field' => '', + 'field1' => 0, + 'field2' => false, + ]); + + $this->assertFalse( + $searchRequest->hasFilter(), + 'Search request contains filter even if it should not.' + ); + + $query = $this->subject->create($searchRequest); + $this->assertSame( + null, + $query->toArray()['query']['bool']['filter'], + 'Filter was added to query, even if no filter exists.' + ); + } + /** * @test */ public function userInputIsAlwaysString() { - $connection = $this->getMockBuilder(Connection\Elasticsearch::class) - ->disableOriginalConstructor() - ->getMock(); $searchRequest = new SearchRequest(10); $searchRequest->setFilter(['field' => 20]); - $query = $this->subject->create($connection, $searchRequest); + $query = $this->subject->create($searchRequest); $this->assertSame( '10', $query->toArray()['query']['bool']['must'][0]['match']['_all'], @@ -95,8 +113,36 @@ class QueryFactoryTest extends AbstractUnitTestCase ); $this->assertSame( '20', - $query->toArray()['query']['bool']['filter']['term']['field'], + $query->toArray()['query']['bool']['filter'][0]['term']['field'], 'Search word was not escaped as expected.' ); } + + /** + * @test + */ + public function facetsAreAddedToQuery() + { + $searchRequest = new SearchRequest('SearchWord'); + $searchRequest->addFacet(new FacetRequest('Identifier', 'FieldName')); + $searchRequest->addFacet(new FacetRequest('Identifier 2', 'FieldName 2')); + + $query = $this->subject->create($searchRequest); + $this->assertSame( + [ + 'Identifier' => [ + 'terms' => [ + 'field' => 'FieldName', + ], + ], + 'Identifier 2' => [ + 'terms' => [ + 'field' => 'FieldName 2', + ], + ], + ], + $query->toArray()['aggs'], + 'Facets were not added to query.' + ); + } }