eZ\Publish\Core\Repository\SearchService::findSingle PHP Method

findSingle() public method

Performs a query for a single content object.
public findSingle ( eZ\Publish\API\Repository\Values\Content\Query\Criterion $filter, array $languageFilter = [], boolean $filterOnUserPermissions = true ) : eZ\Publish\API\Repository\Values\Content\Content
$filter eZ\Publish\API\Repository\Values\Content\Query\Criterion
$languageFilter array Configuration for specifying prioritized languages query will be performed on. Currently supports: array("languages" => array(,..), "useAlwaysAvailable" => bool) useAlwaysAvailable defaults to true to avoid exceptions on missing translations.
$filterOnUserPermissions boolean if true only the objects which is the user allowed to read are returned.
return eZ\Publish\API\Repository\Values\Content\Content
    public function findSingle(Criterion $filter, array $languageFilter = array(), $filterOnUserPermissions = true)
    {
        $this->validateContentCriteria(array($filter), '$filter');
        if ($filterOnUserPermissions && !$this->permissionsCriterionHandler->addPermissionsCriterion($filter)) {
            throw new NotFoundException('Content', '*');
        }
        $contentInfo = $this->searchHandler->findSingle($filter, $languageFilter);
        return $this->repository->getContentService()->internalLoadContent($contentInfo->id, !empty($languageFilter['languages']) ? $languageFilter['languages'] : null, null, false, isset($languageFilter['useAlwaysAvailable']) ? $languageFilter['useAlwaysAvailable'] : true);
    }

Usage Example

    /**
     * Test for the findSingle() method.
     *
     * @covers \eZ\Publish\Core\Repository\PermissionsCriterionHandler::addPermissionsCriterion
     * @covers \eZ\Publish\Core\Repository\PermissionsCriterionHandler::getPermissionsCriterion
     * @covers \eZ\Publish\Core\Repository\SearchService::findSingle
     */
    public function testFindSingle()
    {
        $repositoryMock = $this->getRepositoryMock();
        /** @var \eZ\Publish\SPI\Search\Content\Handler $searchHandlerMock */
        $searchHandlerMock = $this->getSPIMockHandler( 'Search\\Content\\Handler' );
        /** @var \eZ\Publish\SPI\Search\Content\Location\Handler $locationSearchHandlerMock */
        $locationSearchHandlerMock = $this->getSPIMockHandler( 'Search\\Content\\Location\\Handler' );
        $domainMapperMock = $this->getDomainMapperMock();
        $permissionsCriterionHandlerMock = $this->getPermissionsCriterionHandlerMock();
        $service = new SearchService(
            $repositoryMock,
            $searchHandlerMock,
            $locationSearchHandlerMock,
            $domainMapperMock,
            $permissionsCriterionHandlerMock,
            array()
        );

        $repositoryMock
            ->expects( $this->once() )
            ->method( "getContentService" )
            ->will(
                $this->returnValue(
                    $contentServiceMock = $this
                        ->getMockBuilder( "eZ\\Publish\\Core\\Repository\\ContentService" )
                        ->disableOriginalConstructor()
                        ->getMock()
                )
            );

        /** @var \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterionMock */
        $criterionMock = $this
            ->getMockBuilder( "eZ\\Publish\\API\\Repository\\Values\\Content\\Query\\Criterion" )
            ->disableOriginalConstructor()
            ->getMock();

        $permissionsCriterionHandlerMock->expects( $this->once() )
            ->method( "addPermissionsCriterion" )
            ->with( $criterionMock )
            ->will( $this->returnValue( true ) );

        $fieldFilters = array();
        $spiContentInfo = new SPIContentInfo;
        $contentMock = $this->getMockForAbstractClass( "eZ\\Publish\\API\\Repository\\Values\\Content\\Content" );

        /** @var \PHPUnit_Framework_MockObject_MockObject $searchHandlerMock */
        $searchHandlerMock->expects( $this->once() )
            ->method( "findSingle" )
            ->with( $this->equalTo( $criterionMock ), $this->equalTo( $fieldFilters ) )
            ->will( $this->returnValue( $spiContentInfo ) );

        $domainMapperMock->expects( $this->never() )
            ->method( $this->anything() );

        $contentServiceMock
            ->expects( $this->once() )
            ->method( "internalLoadContent" )
            ->will( $this->returnValue( $contentMock ) );

        $result = $service->findSingle( $criterionMock, $fieldFilters, true );

        $this->assertEquals( $contentMock, $result );
    }