eZ\Publish\Core\Persistence\Legacy\Tests\Content\LocationHandlerTest::testCopySubtree PHP Method

testCopySubtree() public method

Test for the copySubtree() method.
public testCopySubtree ( )
    public function testCopySubtree()
    {
        $handler = $this->getPartlyMockedHandler(array('load', 'changeMainLocation', 'setSectionForSubtree', 'create'));
        $subtreeContentRows = array(array('node_id' => 10, 'main_node_id' => 1, 'parent_node_id' => 3, 'contentobject_id' => 21, 'contentobject_version' => 1, 'is_hidden' => 0, 'is_invisible' => 0, 'priority' => 0, 'path_identification_string' => 'test_10', 'sort_field' => 2, 'sort_order' => 1), array('node_id' => 11, 'main_node_id' => 11, 'parent_node_id' => 10, 'contentobject_id' => 211, 'contentobject_version' => 1, 'is_hidden' => 0, 'is_invisible' => 0, 'priority' => 0, 'path_identification_string' => 'test_11', 'sort_field' => 2, 'sort_order' => 1), array('node_id' => 12, 'main_node_id' => 15, 'parent_node_id' => 10, 'contentobject_id' => 215, 'contentobject_version' => 1, 'is_hidden' => 0, 'is_invisible' => 0, 'priority' => 0, 'path_identification_string' => 'test_12', 'sort_field' => 2, 'sort_order' => 1), array('node_id' => 13, 'main_node_id' => 2, 'parent_node_id' => 10, 'contentobject_id' => 22, 'contentobject_version' => 1, 'is_hidden' => 0, 'is_invisible' => 0, 'priority' => 0, 'path_identification_string' => 'test_13', 'sort_field' => 2, 'sort_order' => 1), array('node_id' => 14, 'main_node_id' => 11, 'parent_node_id' => 13, 'contentobject_id' => 211, 'contentobject_version' => 1, 'is_hidden' => 0, 'is_invisible' => 0, 'priority' => 0, 'path_identification_string' => 'test_14', 'sort_field' => 2, 'sort_order' => 1), array('node_id' => 15, 'main_node_id' => 15, 'parent_node_id' => 13, 'contentobject_id' => 215, 'contentobject_version' => 1, 'is_hidden' => 0, 'is_invisible' => 0, 'priority' => 0, 'path_identification_string' => 'test_15', 'sort_field' => 2, 'sort_order' => 1), array('node_id' => 16, 'main_node_id' => 16, 'parent_node_id' => 15, 'contentobject_id' => 216, 'contentobject_version' => 1, 'is_hidden' => 0, 'is_invisible' => 0, 'priority' => 0, 'path_identification_string' => 'test_16', 'sort_field' => 2, 'sort_order' => 1));
        $destinationData = array('node_id' => 5, 'main_node_id' => 5, 'parent_node_id' => 4, 'contentobject_id' => 200, 'contentobject_version' => 1, 'is_hidden' => 0, 'is_invisible' => 1, 'path_identification_string' => 'test_destination');
        $mainLocationsMap = array(true, true, true, true, 1011, 1012, true);
        $updateMainLocationsMap = array(1215 => 1015);
        $offset = 1000;
        $this->locationGateway->expects($this->once())->method('getSubtreeContent')->with($subtreeContentRows[0]['node_id'])->will($this->returnValue($subtreeContentRows));
        $this->locationGateway->expects($this->once())->method('getBasicNodeData')->with($destinationData['node_id'])->will($this->returnValue($destinationData));
        $objectStateHandlerCall = 0;
        $this->objectStateHandler->expects($this->at($objectStateHandlerCall++))->method('loadAllGroups')->will($this->returnValue(array(new ObjectStateGroup(array('id' => 10)), new ObjectStateGroup(array('id' => 20)))));
        $this->objectStateHandler->expects($this->at($objectStateHandlerCall++))->method('loadObjectStates')->with($this->equalTo(10))->will($this->returnValue(array(new ObjectState(array('id' => 11, 'groupId' => 10)), new ObjectState(array('id' => 12, 'groupId' => 10)))));
        $this->objectStateHandler->expects($this->at($objectStateHandlerCall++))->method('loadObjectStates')->with($this->equalTo(20))->will($this->returnValue(array(new ObjectState(array('id' => 21, 'groupId' => 20)), new ObjectState(array('id' => 22, 'groupId' => 20)))));
        $defaultObjectStates = array(new ObjectState(array('id' => 11, 'groupId' => 10)), new ObjectState(array('id' => 21, 'groupId' => 20)));
        $contentIds = array_values(array_unique(array_map(function ($row) {
            return $row['contentobject_id'];
        }, $subtreeContentRows)));
        foreach ($contentIds as $index => $contentId) {
            $this->contentHandler->expects($this->at($index * 2))->method('copy')->with($contentId, 1)->will($this->returnValue(new Content(array('versionInfo' => new VersionInfo(array('contentInfo' => new ContentInfo(array('id' => $contentId + $offset, 'currentVersionNo' => 1))))))));
            foreach ($defaultObjectStates as $objectState) {
                $this->objectStateHandler->expects($this->at($objectStateHandlerCall++))->method('setContentState')->with($contentId + $offset, $objectState->groupId, $objectState->id);
            }
            $this->contentHandler->expects($this->at($index * 2 + 1))->method('publish')->with($contentId + $offset, 1, $this->isInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\MetadataUpdateStruct'))->will($this->returnValue(new Content(array('versionInfo' => new VersionInfo(array('contentInfo' => new ContentInfo(array('id' => $contentId + $offset))))))));
        }
        $lastContentHandlerIndex = $index * 2 + 1;
        $pathStrings = array($destinationData['node_id'] => $destinationData['path_identification_string']);
        foreach ($subtreeContentRows as $index => $row) {
            $mapper = new Mapper();
            $createStruct = $mapper->getLocationCreateStruct($row);
            $this->locationMapper->expects($this->at($index))->method('getLocationCreateStruct')->with($row)->will($this->returnValue($createStruct));
            $createStruct = clone $createStruct;
            $createStruct->contentId = $createStruct->contentId + $offset;
            $createStruct->parentId = $index === 0 ? $destinationData['node_id'] : $createStruct->parentId + $offset;
            $createStruct->invisible = true;
            $createStruct->mainLocationId = $mainLocationsMap[$index];
            $createStruct->pathIdentificationString = $pathStrings[$createStruct->parentId] . '/' . $row['path_identification_string'];
            $pathStrings[$row['node_id'] + $offset] = $createStruct->pathIdentificationString;
            $handler->expects($this->at($index))->method('create')->with($createStruct)->will($this->returnValue(new Location(array('id' => $row['node_id'] + $offset, 'contentId' => $row['contentobject_id'], 'hidden' => false, 'invisible' => true, 'pathIdentificationString' => $createStruct->pathIdentificationString))));
        }
        foreach ($updateMainLocationsMap as $contentId => $locationId) {
            $handler->expects($this->any())->method('changeMainLocation')->with($contentId, $locationId);
        }
        $this->contentHandler->expects($this->at($lastContentHandlerIndex + 1))->method('loadContentInfo')->with(21)->will($this->returnValue(new ContentInfo(array('mainLocationId' => 1010))));
        $handler->expects($this->once())->method('load')->with($destinationData['node_id'])->will($this->returnValue(new Location(array('contentId' => $destinationData['contentobject_id']))));
        $this->contentHandler->expects($this->at($lastContentHandlerIndex + 2))->method('loadContentInfo')->with($destinationData['contentobject_id'])->will($this->returnValue(new ContentInfo(array('sectionId' => 12345))));
        $handler->expects($this->once())->method('setSectionForSubtree')->with($subtreeContentRows[0]['node_id'] + $offset, 12345);
        $handler->copySubtree($subtreeContentRows[0]['node_id'], $destinationData['node_id']);
    }