protected function createFlowQuery(array $elements)
{
$flowQuery = $this->getAccessibleMock(FlowQuery::class, ['dummy'], [$elements]);
// Set up mock persistence manager to return dummy object identifiers
$this->mockPersistenceManager = $this->createMock(PersistenceManagerInterface::class);
$this->mockPersistenceManager->expects($this->any())->method('getIdentifierByObject')->will($this->returnCallback(function ($object) {
if (isset($object->__identity)) {
return $object->__identity;
}
}));
$mockPersistenceManager = $this->mockPersistenceManager;
$objectManager = $this->createMock(ObjectManagerInterface::class);
$objectManager->expects($this->any())->method('get')->will($this->returnCallback(function ($className) use($mockPersistenceManager) {
$instance = new $className();
// Special case to inject the mock persistence manager into the filter operation
if ($className === Operations\Object\FilterOperation::class) {
ObjectAccess::setProperty($instance, 'persistenceManager', $mockPersistenceManager, true);
}
return $instance;
}));
$operationResolver = $this->getAccessibleMock(OperationResolver::class, ['dummy']);
$operationResolver->_set('objectManager', $objectManager);
$operationResolver->_set('finalOperationNames', ['count' => 'count', 'get' => 'get', 'is' => 'is', 'property' => 'property']);
$operationResolver->_set('operations', ['count' => [300 => Operations\CountOperation::class], 'first' => [300 => Operations\FirstOperation::class], 'last' => [300 => Operations\LastOperation::class], 'slice' => [300 => Operations\SliceOperation::class], 'get' => [300 => Operations\GetOperation::class], 'is' => [300 => Operations\IsOperation::class], 'filter' => [300 => Operations\Object\FilterOperation::class], 'children' => [300 => Operations\Object\ChildrenOperation::class], 'property' => [300 => Operations\Object\PropertyOperation::class]]);
$flowQuery->_set('operationResolver', $operationResolver);
return $flowQuery;
}