public function getNodeReturnsTheSpecifiedNodeInTheCurrentNodesContext()
{
$currentNodeWorkspace = $this->getMockBuilder(Workspace::class)->disableOriginalConstructor()->getMock();
$mockFirstLevelNodeCache = $this->getFirstLevelNodeCache();
$context = $this->getMockBuilder(Context::class)->disableOriginalConstructor()->getMock();
$context->expects($this->any())->method('getWorkspace')->will($this->returnValue($currentNodeWorkspace));
$context->expects($this->any())->method('getFirstLevelNodeCache')->will($this->returnValue($mockFirstLevelNodeCache));
$expectedNodeData = $this->getMockBuilder(NodeData::class)->setConstructorArgs(array('/foo/bar', $currentNodeWorkspace))->getMock();
$expectedContextualizedNode = new Node($expectedNodeData, $context);
$nodeDataRepository = $this->getMockBuilder(NodeDataRepository::class)->disableOriginalConstructor()->setMethods(array('findOneByPathInContext'))->getMock();
$nodeDataRepository->expects($this->once())->method('findOneByPathInContext')->with('/foo/bar', $context)->will($this->returnValue($expectedContextualizedNode));
$currentNodeData = $this->getMockBuilder(NodeData::class)->setMethods(array('dummy'))->setConstructorArgs(array('/foo/baz', $currentNodeWorkspace))->getMock();
$nodeService = $this->getMockBuilder(NodeService::class)->disableOriginalConstructor()->getMock();
$nodeService->expects($this->once())->method('normalizePath')->with('../bar', '/foo/baz')->will($this->returnValue('/foo/bar'));
$currentContextualizedNode = $this->getAccessibleMock(Node::class, array('dummy'), array($currentNodeData, $context));
$currentContextualizedNode->_set('nodeDataRepository', $nodeDataRepository);
$currentContextualizedNode->_set('nodeService', $nodeService);
$actualNode = $currentContextualizedNode->getNode('../bar');
$this->assertSame($expectedContextualizedNode, $actualNode);
}