public function resolveValueCreatesAndStoresANewObjectPathMappingIfNoMatchingObjectPathMappingWasFound()
{
$object = new \stdClass();
$this->mockPersistenceManager->expects($this->atLeastOnce())->method('getIdentifierByObject')->with($object)->will($this->returnValue('TheIdentifier'));
$this->mockPersistenceManager->expects($this->atLeastOnce())->method('getObjectByIdentifier')->with('TheIdentifier')->will($this->returnValue($object));
$this->mockObjectPathMappingRepository->expects($this->once())->method('findOneByObjectTypeUriPatternAndIdentifier')->with('stdClass', 'SomeUriPattern', 'TheIdentifier')->will($this->returnValue(null));
$this->identityRoutePart->expects($this->once())->method('createPathSegmentForObject')->with($object)->will($this->returnValue('The/Path/Segment'));
$this->mockObjectPathMappingRepository->expects($this->once())->method('findOneByObjectTypeUriPatternAndPathSegment')->with('stdClass', 'SomeUriPattern', 'The/Path/Segment', false)->will($this->returnValue(null));
$expectedObjectPathMapping = new ObjectPathMapping();
$expectedObjectPathMapping->setObjectType('stdClass');
$expectedObjectPathMapping->setUriPattern('SomeUriPattern');
$expectedObjectPathMapping->setPathSegment('The/Path/Segment');
$expectedObjectPathMapping->setIdentifier('TheIdentifier');
$this->mockObjectPathMappingRepository->expects($this->once())->method('add')->with($expectedObjectPathMapping);
$this->mockObjectPathMappingRepository->expects($this->once())->method('persistEntities');
$this->identityRoutePart->setObjectType('stdClass');
$this->identityRoutePart->setUriPattern('SomeUriPattern');
$this->assertTrue($this->identityRoutePart->_call('resolveValue', $object));
$this->assertSame('the/path/segment', $this->identityRoutePart->getValue());
}