/**
  * @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);
 }