private static function createPhysicalSkillEntities(Tables $tables, ProfessionFirstLevel $firstLevel)
 {
     $physicalSkillClasses = self::getListOfSkillClasses(PhysicalSkill::class);
     $physicalSkillPoint = PhysicalSkillPoint::createFromFirstLevelBackgroundSkillPoints($firstLevel, BackgroundSkillPoints::getIt(3, Heritage::getIt(5)), $tables);
     $requiredRankValue = new PositiveIntegerObject(1);
     $physicalSkillList = array_map(function ($physicalSkillClass) use($firstLevel, $physicalSkillPoint, $requiredRankValue) {
         /** @var PhysicalSkill $physicalSkill */
         $physicalSkill = new $physicalSkillClass($firstLevel);
         $physicalSkill->addSkillRank($physicalSkillPoint);
         return $physicalSkill;
     }, $physicalSkillClasses);
     $physicalSkills = new PhysicalSkills();
     foreach ($physicalSkillList as $physicalSkill) {
         $physicalSkills->addPhysicalSkill($physicalSkill);
     }
     $physicalSkillPoint = PhysicalSkillPoint::createFromFirstLevelBackgroundSkillPoints($firstLevel, BackgroundSkillPoints::getIt(3, Heritage::getIt(5)), $tables);
     $physicalSkillRank = new PhysicalSkillRank(new Swimming($firstLevel), PhysicalSkillPoint::createFromFirstLevelBackgroundSkillPoints($firstLevel, BackgroundSkillPoints::getIt(4, Heritage::getIt(5)), $tables), new PositiveIntegerObject(1));
     return array_merge($physicalSkillList, [$physicalSkills, $physicalSkillPoint, $physicalSkillRank]);
 }
 /**
  * @test
  */
 public function I_can_get_malus_to_cover_with_shield()
 {
     $missingShieldSkillsTable = $this->createMissingShieldSkillsTable();
     /*$missingShieldSkillsTable->shouldReceive('getCoverMalusForSkill')
                 ->with(\Mockery::type(PhysicalSkillRank::class))
                 ->andReturnUsing(function (PhysicalSkillRank $physicalSkillRank) {
                     self::assertSame(0, $physicalSkillRank->getValue());
     
                     return 'foo';
                 });*/
     $missingShieldSkillsTable->shouldReceive('getCoverMalusForSkill')->with(0)->andReturn('foo');
     self::assertSame('foo', (new PhysicalSkills())->getMalusToCoverWithShield($missingShieldSkillsTable));
     $physicalSkills = new PhysicalSkills();
     $physicalSkills->addPhysicalSkill($this->createPhysicalSkill(1, 1, ShieldUsage::class));
     $missingShieldSkillsTable = $this->createMissingShieldSkillsTable();
     $missingShieldSkillsTable->shouldReceive('getCoverMalusForSkill')->with(\Mockery::type(PhysicalSkillRank::class))->andReturnUsing(function (PhysicalSkillRank $physicalSkillRank) {
         self::assertSame(1, $physicalSkillRank->getValue());
         return 'bar';
     });
     self::assertSame('bar', $physicalSkills->getMalusToCoverWithShield($missingShieldSkillsTable));
     $physicalSkills = new PhysicalSkills();
     $physicalSkills->addPhysicalSkill($this->createPhysicalSkill(2, 1, ShieldUsage::class));
     $missingShieldSkillsTable = $this->createMissingShieldSkillsTable();
     $missingShieldSkillsTable->shouldReceive('getCoverMalusForSkill')->with(\Mockery::type(PhysicalSkillRank::class))->andReturnUsing(function (PhysicalSkillRank $physicalSkillRank) {
         self::assertSame(2, $physicalSkillRank->getValue());
         return 'baz';
     });
     self::assertSame('baz', $physicalSkills->getMalusToCoverWithShield($missingShieldSkillsTable));
     $physicalSkills = new PhysicalSkills();
     $physicalSkills->addPhysicalSkill($this->createPhysicalSkill(3, 2, ShieldUsage::class));
     $missingShieldSkillsTable = $this->createMissingShieldSkillsTable();
     $missingShieldSkillsTable->shouldReceive('getCoverMalusForSkill')->with(\Mockery::type(PhysicalSkillRank::class))->andReturnUsing(function (PhysicalSkillRank $physicalSkillRank) {
         self::assertSame(3, $physicalSkillRank->getValue());
         return 'qux';
     });
     self::assertSame('qux', $physicalSkills->getMalusToCoverWithShield($missingShieldSkillsTable));
 }