private function checkPaidFirstLevelSkillPoint(SkillPoint $paidSkillPoint)
 {
     if (!$paidSkillPoint->isPaidByFirstLevelBackgroundSkillPoints()) {
         $message = 'Skill point to-pay-with has to origin from first level background skills.';
         if ($paidSkillPoint->isPaidByNextLevelPropertyIncrease()) {
             $message .= ' Next level skill point is not allowed to trade.';
         }
         if ($paidSkillPoint->isPaidByOtherSkillPoints()) {
             $message .= ' There is no sense to trade first level skill point multiple times.';
         }
         throw new Exceptions\ProhibitedOriginOfPaidBySkillPoint($message);
     }
     if ($paidSkillPoint->getTypeName() === $this->getTypeName()) {
         throw new Exceptions\NonSensePaymentBySameType("There is no sense to pay for skill point by another one of the very same type ({$this->getTypeName()})." . ' Got paid skill point from level ' . $paidSkillPoint->getProfessionLevel()->getLevelRank() . ' of profession ' . $paidSkillPoint->getProfessionLevel()->getProfession()->getValue() . '.');
     }
 }
 protected function I_can_get_profession_level(SkillPoint $skillPoint, ProfessionLevel $expectedLevel)
 {
     self::assertSame($expectedLevel, $skillPoint->getProfessionLevel());
 }