{{ query.data|json_encode }}
@@ -60,7 +61,7 @@
- curl -X{{ query.method }} '{{ query.connection.transport|lower }}://{{ query.connection.host }}:{{ query.connection.port }}/{{ query.path }}' -d '{{ query.data|json_encode }}'
+ curl -X{{ query.method }} '{{ query.connection.transport|lower }}://{{ query.connection.host }}:{{ query.connection.port }}/{{ query.path }}{% if query.queryString|length %}?{{ query.queryString|url_encode }}{% endif %}' -d '{{ query.data|json_encode }}'
{% endif %}
diff --git a/Tests/ClientTest.php b/Tests/ClientTest.php
new file mode 100644
index 0000000..8a9d91a
--- /dev/null
+++ b/Tests/ClientTest.php
@@ -0,0 +1,43 @@
+getMock('Elastica\Connection');
+ $connection->expects($this->any())->method('getTransportObject')->will($this->returnValue($transport));
+ $connection->expects($this->any())->method('toArray')->will($this->returnValue(array()));
+
+ $logger = $this->getMock('FOS\ElasticaBundle\Logger\ElasticaLogger');
+ $logger
+ ->expects($this->once())
+ ->method('logQuery')
+ ->with(
+ 'foo',
+ Request::GET,
+ $this->isType('array'),
+ $this->isType('float'),
+ $this->isType('array'),
+ $this->isType('array')
+ );
+
+ $client = $this->getMockBuilder('FOS\ElasticaBundle\Client')
+ ->setMethods(array('getConnection'))
+ ->getMock();
+
+ $client->expects($this->any())->method('getConnection')->will($this->returnValue($connection));
+
+ $client->setLogger($logger);
+
+ $response = $client->request('foo');
+
+ $this->assertInstanceOf('Elastica\Response', $response);
+ }
+}
diff --git a/Tests/Command/ResetCommandTest.php b/Tests/Command/ResetCommandTest.php
new file mode 100644
index 0000000..b6548aa
--- /dev/null
+++ b/Tests/Command/ResetCommandTest.php
@@ -0,0 +1,91 @@
+resetter = $this->getMockBuilder('\FOS\ElasticaBundle\Resetter')
+ ->disableOriginalConstructor()
+ ->setMethods(array('resetIndex', 'resetIndexType'))
+ ->getMock();
+
+ $container->set('fos_elastica.resetter', $this->resetter);
+
+ $this->indexManager = $this->getMockBuilder('\FOS\ElasticaBundle\IndexManager')
+ ->disableOriginalConstructor()
+ ->setMethods(array('getAllIndexes'))
+ ->getMock();
+
+ $container->set('fos_elastica.index_manager', $this->indexManager);
+
+ $this->command = new ResetCommand();
+ $this->command->setContainer($container);
+ }
+
+ public function testResetAllIndexes()
+ {
+ $this->indexManager->expects($this->any())
+ ->method('getAllIndexes')
+ ->will($this->returnValue(array('index1' => true, 'index2' => true)));
+
+ $this->resetter->expects($this->at(0))
+ ->method('resetIndex')
+ ->with($this->equalTo('index1'));
+
+ $this->resetter->expects($this->at(1))
+ ->method('resetIndex')
+ ->with($this->equalTo('index2'));
+
+ $this->command->run(
+ new ArrayInput(array()),
+ new NullOutput()
+ );
+ }
+
+ public function testResetIndex()
+ {
+ $this->indexManager->expects($this->never())
+ ->method('getAllIndexes');
+
+ $this->resetter->expects($this->at(0))
+ ->method('resetIndex')
+ ->with($this->equalTo('index1'));
+
+ $this->command->run(
+ new ArrayInput(array('--index' => 'index1')),
+ new NullOutput()
+ );
+ }
+
+ public function testResetIndexType()
+ {
+ $this->indexManager->expects($this->never())
+ ->method('getAllIndexes');
+
+ $this->resetter->expects($this->never())
+ ->method('resetIndex');
+
+ $this->resetter->expects($this->at(0))
+ ->method('resetIndexType')
+ ->with($this->equalTo('index1'), $this->equalTo('type1'));
+
+ $this->command->run(
+ new ArrayInput(array('--index' => 'index1', '--type' => 'type1')),
+ new NullOutput()
+ );
+ }
+}
\ No newline at end of file
diff --git a/Tests/DependencyInjection/ConfigurationTest.php b/Tests/DependencyInjection/ConfigurationTest.php
index 35b2af3..93143ec 100644
--- a/Tests/DependencyInjection/ConfigurationTest.php
+++ b/Tests/DependencyInjection/ConfigurationTest.php
@@ -3,6 +3,7 @@
namespace FOS\ElasticaBundle\Tests\Resetter\DependencyInjection;
use FOS\ElasticaBundle\DependencyInjection\Configuration;
+use Symfony\Component\Config\Definition\Processor;
/**
* ConfigurationTest
@@ -85,4 +86,51 @@ class ConfigurationTest extends \PHPUnit_Framework_TestCase
$this->assertInstanceOf('Symfony\Component\Config\Definition\ScalarNode', $mapping['index']);
$this->assertNull($mapping['index']->getDefaultValue());
}
+
+ public function testSlashIsAddedAtTheEndOfServerUrl()
+ {
+ $config = array(
+ 'clients' => array(
+ 'default' => array(
+ 'url' => 'http://www.github.com',
+ ),
+ ),
+ );
+
+ $processor = new Processor();
+
+ $configuration = $processor->processConfiguration($this->configuration, array($config));
+
+ $this->assertEquals('http://www.github.com/', $configuration['clients']['default']['servers'][0]['url']);
+ }
+
+ public function testEmptyFieldsIndexIsUnset()
+ {
+ $config = array(
+ 'indexes' => array(
+ 'test' => array(
+ 'types' => array(
+ 'test' => array(
+ 'mappings' => array(
+ 'title' => array(
+ 'type' => 'string',
+ 'fields' => array(
+ 'autocomplete' => null
+ )
+ ),
+ 'content' => null
+ )
+ )
+ )
+ )
+ )
+ );
+
+ $processor = new Processor();
+
+ $configuration = $processor->processConfiguration(new Configuration(array($config)), array($config));
+
+ $this->assertArrayNotHasKey('fields', $configuration['indexes']['test']['types']['test']['mappings']['content']);
+ $this->assertArrayHasKey('fields', $configuration['indexes']['test']['types']['test']['mappings']['title']);
+ }
}
diff --git a/Tests/Doctrine/AbstractListenerTest.php b/Tests/Doctrine/AbstractListenerTest.php
index e99e26d..a9eff66 100644
--- a/Tests/Doctrine/AbstractListenerTest.php
+++ b/Tests/Doctrine/AbstractListenerTest.php
@@ -3,9 +3,11 @@
namespace FOS\ElasticaBundle\Tests\Doctrine;
/**
+ * See concrete MongoDB/ORM instances of this abstract test
+ *
* @author Richard Miller
*/
-abstract class AbstractListenerTest extends \PHPUnit_Framework_TestCase
+abstract class ListenerTest extends \PHPUnit_Framework_TestCase
{
public function testObjectInsertedOnPersist()
{
@@ -14,12 +16,16 @@ abstract class AbstractListenerTest extends \PHPUnit_Framework_TestCase
$entity = new Listener\Entity(1);
$eventArgs = $this->createLifecycleEventArgs($entity, $this->getMockObjectManager());
- $persister->expects($this->once())
- ->method('insertOne')
- ->with($entity);
-
$listener = $this->createListener($persister, get_class($entity), array());
$listener->postPersist($eventArgs);
+
+ $this->assertEquals($entity, current($listener->scheduledForInsertion));
+
+ $persister->expects($this->once())
+ ->method('insertMany')
+ ->with($listener->scheduledForInsertion);
+
+ $listener->postFlush($eventArgs);
}
/**
@@ -32,12 +38,18 @@ abstract class AbstractListenerTest extends \PHPUnit_Framework_TestCase
$entity = new Listener\Entity(1, false);
$eventArgs = $this->createLifecycleEventArgs($entity, $this->getMockObjectManager());
- $persister->expects($this->never())
- ->method('insertOne');
-
$listener = $this->createListener($persister, get_class($entity), array());
$listener->setIsIndexableCallback($isIndexableCallback);
$listener->postPersist($eventArgs);
+
+ $this->assertEmpty($listener->scheduledForInsertion);
+
+ $persister->expects($this->never())
+ ->method('insertOne');
+ $persister->expects($this->never())
+ ->method('insertMany');
+
+ $listener->postFlush($eventArgs);
}
public function testObjectReplacedOnUpdate()
@@ -47,15 +59,18 @@ abstract class AbstractListenerTest extends \PHPUnit_Framework_TestCase
$entity = new Listener\Entity(1);
$eventArgs = $this->createLifecycleEventArgs($entity, $this->getMockObjectManager());
- $persister->expects($this->once())
- ->method('replaceOne')
- ->with($entity);
+ $listener = $this->createListener($persister, get_class($entity), array());
+ $listener->postUpdate($eventArgs);
+ $this->assertEquals($entity, current($listener->scheduledForUpdate));
+
+ $persister->expects($this->once())
+ ->method('replaceMany')
+ ->with(array($entity));
$persister->expects($this->never())
->method('deleteById');
- $listener = $this->createListener($persister, get_class($entity), array());
- $listener->postUpdate($eventArgs);
+ $listener->postFlush($eventArgs);
}
/**
@@ -80,16 +95,20 @@ abstract class AbstractListenerTest extends \PHPUnit_Framework_TestCase
->with($entity, 'id')
->will($this->returnValue($entity->getId()));
- $persister->expects($this->never())
- ->method('replaceOne');
-
- $persister->expects($this->once())
- ->method('deleteById')
- ->with($entity->getId());
-
$listener = $this->createListener($persister, get_class($entity), array());
$listener->setIsIndexableCallback($isIndexableCallback);
$listener->postUpdate($eventArgs);
+
+ $this->assertEmpty($listener->scheduledForUpdate);
+ $this->assertEquals($entity, current($listener->scheduledForDeletion));
+
+ $persister->expects($this->never())
+ ->method('replaceOne');
+ $persister->expects($this->once())
+ ->method('deleteMany')
+ ->with(array($entity));
+
+ $listener->postFlush($eventArgs);
}
public function testObjectDeletedOnRemove()
@@ -111,13 +130,16 @@ abstract class AbstractListenerTest extends \PHPUnit_Framework_TestCase
->with($entity, 'id')
->will($this->returnValue($entity->getId()));
- $persister->expects($this->once())
- ->method('deleteById')
- ->with($entity->getId());
-
$listener = $this->createListener($persister, get_class($entity), array());
$listener->preRemove($eventArgs);
- $listener->postRemove($eventArgs);
+
+ $this->assertEquals($entity, current($listener->scheduledForDeletion));
+
+ $persister->expects($this->once())
+ ->method('deleteMany')
+ ->with(array($entity));
+
+ $listener->postFlush($eventArgs);
}
public function testObjectWithNonStandardIdentifierDeletedOnRemove()
@@ -139,13 +161,16 @@ abstract class AbstractListenerTest extends \PHPUnit_Framework_TestCase
->with($entity, 'identifier')
->will($this->returnValue($entity->getId()));
- $persister->expects($this->once())
- ->method('deleteById')
- ->with($entity->getId());
-
$listener = $this->createListener($persister, get_class($entity), array(), 'identifier');
$listener->preRemove($eventArgs);
- $listener->postRemove($eventArgs);
+
+ $this->assertEquals($entity, current($listener->scheduledForDeletion));
+
+ $persister->expects($this->once())
+ ->method('deleteMany')
+ ->with(array($entity));
+
+ $listener->postFlush($eventArgs);
}
/**
diff --git a/Tests/Doctrine/AbstractProviderTest.php b/Tests/Doctrine/AbstractProviderTest.php
index 0a9aceb..2492eed 100644
--- a/Tests/Doctrine/AbstractProviderTest.php
+++ b/Tests/Doctrine/AbstractProviderTest.php
@@ -135,6 +135,30 @@ class AbstractProviderTest extends \PHPUnit_Framework_TestCase
$this->assertTrue($loggerClosureInvoked);
}
+ public function testPopulateNotStopOnError()
+ {
+ $nbObjects = 1;
+ $objects = array(1);
+
+ $provider = $this->getMockAbstractProvider();
+
+ $provider->expects($this->any())
+ ->method('countObjects')
+ ->will($this->returnValue($nbObjects));
+
+ $provider->expects($this->any())
+ ->method('fetchSlice')
+ ->will($this->returnValue($objects));
+
+ $this->objectPersister->expects($this->any())
+ ->method('insertMany')
+ ->will($this->throwException($this->getMockBulkResponseException()));
+
+ $this->setExpectedException('Elastica\Exception\Bulk\ResponseException');
+
+ $provider->populate(null, array('ignore-errors' => false));
+ }
+
/**
* @return \FOS\ElasticaBundle\Doctrine\AbstractProvider|\PHPUnit_Framework_MockObject_MockObject
*/
@@ -148,6 +172,16 @@ class AbstractProviderTest extends \PHPUnit_Framework_TestCase
));
}
+ /**
+ * @return \Elastica\Exception\Bulk\ResponseException
+ */
+ private function getMockBulkResponseException()
+ {
+ return $this->getMockBuilder('Elastica\Exception\Bulk\ResponseException')
+ ->disableOriginalConstructor()
+ ->getMock();
+ }
+
/**
* @return \Doctrine\Common\Persistence\ManagerRegistry|\PHPUnit_Framework_MockObject_MockObject
*/
diff --git a/Tests/Doctrine/MongoDB/ListenerTest.php b/Tests/Doctrine/MongoDB/ListenerTest.php
index 7f1a9ab..37a0203 100644
--- a/Tests/Doctrine/MongoDB/ListenerTest.php
+++ b/Tests/Doctrine/MongoDB/ListenerTest.php
@@ -2,9 +2,9 @@
namespace FOS\ElasticaBundle\Tests\Doctrine\MongoDB;
-use FOS\ElasticaBundle\Tests\Doctrine\AbstractListenerTest;
+use FOS\ElasticaBundle\Tests\Doctrine\ListenerTest as BaseListenerTest;
-class ListenerTest extends AbstractListenerTest
+class ListenerTest extends BaseListenerTest
{
public function setUp()
{
@@ -25,7 +25,7 @@ class ListenerTest extends AbstractListenerTest
protected function getListenerClass()
{
- return 'FOS\ElasticaBundle\Doctrine\MongoDB\Listener';
+ return 'FOS\ElasticaBundle\Doctrine\Listener';
}
protected function getObjectManagerClass()
diff --git a/Tests/Doctrine/ORM/ListenerTest.php b/Tests/Doctrine/ORM/ListenerTest.php
index 48702c0..12a89b2 100644
--- a/Tests/Doctrine/ORM/ListenerTest.php
+++ b/Tests/Doctrine/ORM/ListenerTest.php
@@ -2,9 +2,9 @@
namespace FOS\ElasticaBundle\Tests\Doctrine\ORM;
-use FOS\ElasticaBundle\Tests\Doctrine\AbstractListenerTest;
+use FOS\ElasticaBundle\Tests\Doctrine\ListenerTest as BaseListenerTest;
-class ListenerTest extends AbstractListenerTest
+class ListenerTest extends BaseListenerTest
{
public function setUp()
{
@@ -25,7 +25,7 @@ class ListenerTest extends AbstractListenerTest
protected function getListenerClass()
{
- return 'FOS\ElasticaBundle\Doctrine\ORM\Listener';
+ return 'FOS\ElasticaBundle\Doctrine\Listener';
}
protected function getObjectManagerClass()
diff --git a/Tests/FOSElasticaBundleTest.php b/Tests/FOSElasticaBundleTest.php
new file mode 100644
index 0000000..2bfc7f9
--- /dev/null
+++ b/Tests/FOSElasticaBundleTest.php
@@ -0,0 +1,39 @@
+getMock('Symfony\Component\DependencyInjection\ContainerBuilder');
+
+ $container
+ ->expects($this->at(0))
+ ->method('addCompilerPass')
+ ->with($this->isInstanceOf($passes[0][0]), $passes[0][1]);
+
+ $container
+ ->expects($this->at(1))
+ ->method('addCompilerPass')
+ ->with($this->isInstanceOf($passes[1][0]));
+
+ $bundle = new FOSElasticaBundle();
+
+ $bundle->build($container);
+ }
+}
diff --git a/Tests/HybridResultTest.php b/Tests/HybridResultTest.php
new file mode 100644
index 0000000..cb382d1
--- /dev/null
+++ b/Tests/HybridResultTest.php
@@ -0,0 +1,19 @@
+assertSame($result, $hybridResult->getResult());
+ $this->assertNull($hybridResult->getTransformed());
+ }
+}
diff --git a/Tests/Logger/ElasticaLoggerTest.php b/Tests/Logger/ElasticaLoggerTest.php
index 05624cc..96adf53 100644
--- a/Tests/Logger/ElasticaLoggerTest.php
+++ b/Tests/Logger/ElasticaLoggerTest.php
@@ -9,6 +9,40 @@ use FOS\ElasticaBundle\Logger\ElasticaLogger;
*/
class ElasticaLoggerTest extends \PHPUnit_Framework_TestCase
{
+ /**
+ * @return \PHPUnit_Framework_MockObject_MockObject|\Symfony\Component\HttpKernel\Log\LoggerInterface
+ */
+ private function getMockLogger()
+ {
+ return $this->getMockBuilder('Symfony\Component\HttpKernel\Log\LoggerInterface')
+ ->disableOriginalConstructor()
+ ->getMock();
+ }
+
+ /**
+ * @param string $level
+ * @param string $message
+ * @param array $context
+ * @return ElasticaLogger
+ */
+ private function getMockLoggerForLevelMessageAndContext($level, $message, $context)
+ {
+ $loggerMock = $this->getMockBuilder('Symfony\Component\HttpKernel\Log\LoggerInterface')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $loggerMock->expects($this->once())
+ ->method($level)
+ ->with(
+ $this->equalTo($message),
+ $this->equalTo($context)
+ );
+
+ $elasticaLogger = new ElasticaLogger($loggerMock);
+
+ return $elasticaLogger;
+ }
+
public function testGetZeroIfNoQueriesAdded()
{
$elasticaLogger = new ElasticaLogger;
@@ -36,6 +70,7 @@ class ElasticaLoggerTest extends \PHPUnit_Framework_TestCase
$data = array('data');
$time = 12;
$connection = array('host' => 'localhost', 'port' => '8999', 'transport' => 'https');
+ $query = array('search_type' => 'dfs_query_then_fetch');
$expected = array(
'path' => $path,
@@ -43,9 +78,10 @@ class ElasticaLoggerTest extends \PHPUnit_Framework_TestCase
'data' => $data,
'executionMS' => $time,
'connection' => $connection,
+ 'queryString' => $query,
);
- $elasticaLogger->logQuery($path, $method, $data, $time, $connection);
+ $elasticaLogger->logQuery($path, $method, $data, $time, $connection, $query);
$returnedQueries = $elasticaLogger->getQueries();
$this->assertEquals($expected, $returnedQueries[0]);
}
@@ -64,10 +100,7 @@ class ElasticaLoggerTest extends \PHPUnit_Framework_TestCase
public function testQueryIsLogged()
{
- /** @var $loggerMock \PHPUnit_Framework_MockObject_MockObject|\Symfony\Component\HttpKernel\Log\LoggerInterface */
- $loggerMock = $this->getMockBuilder('Symfony\Component\HttpKernel\Log\LoggerInterface')
- ->disableOriginalConstructor()
- ->getMock();
+ $loggerMock = $this->getMockLogger();
$elasticaLogger = new ElasticaLogger($loggerMock);
@@ -87,4 +120,55 @@ class ElasticaLoggerTest extends \PHPUnit_Framework_TestCase
$elasticaLogger->logQuery($path, $method, $data, $time);
}
+
+ /**
+ * @return array
+ */
+ public function logLevels()
+ {
+ return array(
+ array('emergency'),
+ array('alert'),
+ array('critical'),
+ array('error'),
+ array('warning'),
+ array('notice'),
+ array('info'),
+ array('debug'),
+ );
+ }
+
+ /**
+ * @dataProvider logLevels
+ */
+ public function testMessagesCanBeLoggedAtSpecificLogLevels($level)
+ {
+ $message = 'foo';
+ $context = array('data');
+
+ $loggerMock = $this->getMockLoggerForLevelMessageAndContext($level, $message, $context);
+
+ call_user_func(array($loggerMock, $level), $message, $context);
+ }
+
+ public function testMessagesCanBeLoggedToArbitraryLevels()
+ {
+ $loggerMock = $this->getMockLogger();
+
+ $level = 'info';
+ $message = 'foo';
+ $context = array('data');
+
+ $loggerMock->expects($this->once())
+ ->method('log')
+ ->with(
+ $level,
+ $message,
+ $context
+ );
+
+ $elasticaLogger = new ElasticaLogger($loggerMock);
+
+ $elasticaLogger->log($level, $message, $context);
+ }
}
diff --git a/Tests/RepositoryTest.php b/Tests/RepositoryTest.php
index 6eabe7b..c4d4efc 100644
--- a/Tests/RepositoryTest.php
+++ b/Tests/RepositoryTest.php
@@ -58,6 +58,22 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
$repository->findPaginated($testQuery);
}
+ public function testThatCreatePaginatorCreatesAPaginatorViaFinder()
+ {
+ $testQuery = 'Test Query';
+
+ /** @var $typeMock \PHPUnit_Framework_MockObject_MockObject|\FOS\ElasticaBundle\Finder\TransformedFinder */
+ $finderMock = $this->getMockBuilder('FOS\ElasticaBundle\Finder\TransformedFinder')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $finderMock->expects($this->once())
+ ->method('createPaginatorAdapter')
+ ->with($this->equalTo($testQuery));
+
+ $repository = new Repository($finderMock);
+ $repository->createPaginatorAdapter($testQuery);
+ }
+
public function testThatFindHybridCallsFindHybridOnFinder()
{
$testQuery = 'Test Query';
diff --git a/Tests/ResetterTest.php b/Tests/ResetterTest.php
index aa0fbcc..b4e5649 100644
--- a/Tests/ResetterTest.php
+++ b/Tests/ResetterTest.php
@@ -2,6 +2,9 @@
namespace FOS\ElasticaBundle\Tests\Resetter;
+use Elastica\Exception\ResponseException;
+use Elastica\Request;
+use Elastica\Response;
use FOS\ElasticaBundle\Resetter;
use Elastica\Type\Mapping;
@@ -130,6 +133,32 @@ class ResetterTest extends \PHPUnit_Framework_TestCase
$resetter->resetIndexType('foo', 'c');
}
+ public function testResetIndexTypeIgnoreTypeMissingException()
+ {
+ $type = $this->getMockElasticaType();
+
+ $this->indexConfigsByName['foo']['index']->expects($this->once())
+ ->method('getType')
+ ->with('a')
+ ->will($this->returnValue($type));
+
+ $type->expects($this->once())
+ ->method('delete')
+ ->will($this->throwException(new ResponseException(
+ new Request(''),
+ new Response(array('error' => 'TypeMissingException[[de_20131022] type[bla] missing]', 'status' => 404)))
+ ));
+
+ $mapping = Mapping::create($this->indexConfigsByName['foo']['config']['mappings']['a']['properties']);
+ $mapping->setParam('dynamic_templates', $this->indexConfigsByName['foo']['config']['mappings']['a']['dynamic_templates']);
+ $type->expects($this->once())
+ ->method('setMapping')
+ ->with($mapping);
+
+ $resetter = new Resetter($this->indexConfigsByName);
+ $resetter->resetIndexType('foo', 'a');
+ }
+
public function testIndexMappingForParent()
{
$type = $this->getMockElasticaType();
diff --git a/Tests/Transformer/ElasticaToModelTransformerCollectionTest.php b/Tests/Transformer/ElasticaToModelTransformerCollectionTest.php
index d33708e..eb4d8e4 100644
--- a/Tests/Transformer/ElasticaToModelTransformerCollectionTest.php
+++ b/Tests/Transformer/ElasticaToModelTransformerCollectionTest.php
@@ -3,6 +3,7 @@
namespace FOS\ElasticaBundle\Tests\Transformer;
use Elastica\Document;
+use Elastica\Result;
use FOS\ElasticaBundle\Transformer\ElasticaToModelTransformerCollection;
class ElasticaToModelTransformerCollectionTest extends \PHPUnit_Framework_TestCase
@@ -98,6 +99,57 @@ class ElasticaToModelTransformerCollectionTest extends \PHPUnit_Framework_TestCa
$result2,
), $results);
}
+
+ public function testGetIdentifierFieldReturnsAMapOfIdentifiers()
+ {
+ $collection = new ElasticaToModelTransformerCollection(array());
+ $identifiers = $collection->getIdentifierField();
+ $this->assertInternalType('array', $identifiers);
+ $this->assertEmpty($identifiers);
+
+ $this->collectionSetup();
+ $identifiers = $this->collection->getIdentifierField();
+ $this->assertInternalType('array', $identifiers);
+ $this->assertEquals(array('type1' => 'id', 'type2' => 'id'), $identifiers);
+ }
+
+ public function elasticaResults()
+ {
+ $result = new Result(array('_id' => 123, '_type' => 'type1'));
+ $transformedObject = new POPO(123, array());
+
+ return array(
+ array(
+ $result, $transformedObject
+ )
+ );
+ }
+
+ /**
+ * @dataProvider elasticaResults
+ */
+ public function testHybridTransformDecoratesResultsWithHybridResultObjects($result, $transformedObject)
+ {
+ $transformer = $this->getMock('FOS\ElasticaBundle\Transformer\ElasticaToModelTransformerInterface');
+ $transformer->expects($this->any())->method('getIdentifierField')->will($this->returnValue('id'));
+
+ $transformer
+ ->expects($this->any())
+ ->method('transform')
+ ->will($this->returnValue(array($transformedObject)));
+
+ $collection = new ElasticaToModelTransformerCollection(array('type1' => $transformer));
+
+ $hybridResults = $collection->hybridTransform(array($result));
+
+ $this->assertInternalType('array', $hybridResults);
+ $this->assertNotEmpty($hybridResults);
+ $this->assertContainsOnlyInstancesOf('FOS\ElasticaBundle\HybridResult', $hybridResults);
+
+ $hybridResult = array_pop($hybridResults);
+ $this->assertEquals($result, $hybridResult->getResult());
+ $this->assertEquals($transformedObject, $hybridResult->getTransformed());
+ }
}
class POPO
diff --git a/Transformer/ElasticaToModelTransformerCollection.php b/Transformer/ElasticaToModelTransformerCollection.php
index 6264959..f65f8db 100644
--- a/Transformer/ElasticaToModelTransformerCollection.php
+++ b/Transformer/ElasticaToModelTransformerCollection.php
@@ -67,7 +67,9 @@ class ElasticaToModelTransformerCollection implements ElasticaToModelTransformer
$result = array();
foreach ($elasticaObjects as $object) {
- $result[] = $transformed[$object->getType()][$object->getId()];
+ if (array_key_exists($object->getId(), $transformed[$object->getType()])) {
+ $result[] = $transformed[$object->getType()][$object->getId()];
+ }
}
return $result;
@@ -84,11 +86,4 @@ class ElasticaToModelTransformerCollection implements ElasticaToModelTransformer
return $result;
}
-
- protected function getTypeToClassMap()
- {
- return array_map(function (ElasticaToModelTransformerInterface $transformer) {
- return $transformer->getObjectClass();
- }, $this->transformers);
- }
}
diff --git a/composer.json b/composer.json
index 094eba5..8f22393 100644
--- a/composer.json
+++ b/composer.json
@@ -12,11 +12,11 @@
],
"require": {
"php": ">=5.3.2",
- "symfony/framework-bundle": "~2.1",
+ "symfony/framework-bundle": "~2.3",
"symfony/console": "~2.1",
"symfony/form": "~2.1",
"symfony/property-access": "~2.2",
- "ruflin/elastica": "~0.20",
+ "ruflin/elastica": ">=0.20, <1.1-dev",
"psr/log": "~1.0"
},
"require-dev":{