/** * @dataProvider moveNodeDataProvider * @param int $nodeId * @param int|null $parentNodeId * @param int $position * @param boolean $withException */ public function testMoveNode($nodeId, $parentNodeId, $position, $withException) { $this->prepareCategories($this->categories); $categories = $this->categoriesCollection; $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock(); $connection = $this->getMockBuilder('Doctrine\\DBAL\\Connection')->disableOriginalConstructor()->getMock(); $em->expects($this->once())->method('getConnection')->will($this->returnValue($connection)); $this->managerRegistry->expects($this->once())->method('getManagerForClass')->with('OroB2BCatalogBundle:Category')->will($this->returnValue($em)); $connection->expects($this->once())->method('beginTransaction'); $currentNode = $categories[$nodeId]; $parentNode = array_key_exists($parentNodeId, $categories) ? $categories[$parentNodeId] : null; if ($withException) { $this->repository->expects($this->at(0))->method('find')->willThrowException(new \Exception()); $connection->expects($this->once())->method('rollBack'); } else { $this->repository->expects($this->at(0))->method('find')->willReturn($currentNode); $this->repository->expects($this->at(1))->method('find')->willReturn($parentNode); if ($position) { $children = array_values($parentNode->getChildCategories()->toArray()); $this->repository->expects($this->at(2))->method('__call')->with('persistAsNextSiblingOf', [$currentNode, $children[$position - 1]]); } else { $this->repository->expects($this->at(2))->method('__call')->with('persistAsFirstChildOf', [$currentNode, $parentNode]); } $em->expects($this->at(0))->method('flush'); $connection->expects($this->once())->method('commit'); } $this->categoryTreeHandler->moveNode($nodeId, $parentNodeId, $position); }