/** * @test * @dataProvider provideBasePropertyValues * @param $strength * @param $agility * @param $knack * @param $will * @param $intelligence * @param $charisma */ public function I_can_get_every_property_both_limited_and_unlimited($strength, $agility, $knack, $will, $intelligence, $charisma) { $race = CommonHuman::getIt(); $female = GenderCode::getIt(GenderCode::FEMALE); $exceptionalityProperties = $this->createExceptionalityProperties($strength, $agility, $knack, $will, $intelligence, $charisma); $professionLevels = $this->createProfessionLevels(); $weightInKgAdjustment = WeightInKg::getIt(12.3); $heightInCmAdjustment = HeightInCm::getIt(123.45); $age = Age::getIt(32); $tables = new Tables(); $firstLevelProperties = new FirstLevelProperties($race, $female, $exceptionalityProperties, $professionLevels, $weightInKgAdjustment, $heightInCmAdjustment, $age, $tables); self::assertSame($exceptionalityProperties, $firstLevelProperties->getExceptionalityProperties()); $expectedStrength = min($strength, 3) - 1; /* female */ self::assertInstanceOf(Strength::class, $firstLevelProperties->getFirstLevelStrength()); self::assertSame($expectedStrength, $firstLevelProperties->getFirstLevelStrength()->getValue()); self::assertSame(max(0, $strength - 3), $firstLevelProperties->getStrengthLossBecauseOfLimit()); $expectedAgility = min($agility, 3); self::assertInstanceOf(Agility::class, $firstLevelProperties->getFirstLevelAgility()); self::assertEquals($expectedAgility, $firstLevelProperties->getFirstLevelAgility()->getValue()); self::assertSame(max(0, $agility - 3), $firstLevelProperties->getAgilityLossBecauseOfLimit()); $expectedKnack = min($knack, 3); self::assertInstanceOf(Knack::class, $firstLevelProperties->getFirstLevelKnack()); self::assertEquals($expectedKnack, $firstLevelProperties->getFirstLevelKnack()->getValue()); self::assertSame(max(0, $knack - 3), $firstLevelProperties->getKnackLossBecauseOfLimit()); $expectedWill = min($will, 3); self::assertInstanceOf(Will::class, $firstLevelProperties->getFirstLevelWill()); self::assertEquals($expectedWill, $firstLevelProperties->getFirstLevelWill()->getValue()); self::assertSame(max(0, $will - 3), $firstLevelProperties->getWillLossBecauseOfLimit()); $expectedIntelligence = min($intelligence, 3); self::assertInstanceOf(Intelligence::class, $firstLevelProperties->getFirstLevelIntelligence()); self::assertEquals($expectedIntelligence, $firstLevelProperties->getFirstLevelIntelligence()->getValue()); self::assertSame(max(0, $intelligence - 3), $firstLevelProperties->getIntelligenceLossBecauseOfLimit()); $expectedCharisma = min($charisma, 3) + 1; /* female */ self::assertInstanceOf(Charisma::class, $firstLevelProperties->getFirstLevelCharisma()); self::assertEquals($expectedCharisma, $firstLevelProperties->getFirstLevelCharisma()->getValue()); self::assertSame(max(0, $charisma - 3), $firstLevelProperties->getCharismaLossBecauseOfLimit()); $expectedSize = -1; /* female */ if ($strength === 0) { $expectedSize--; } else { if ($strength > 1) { $expectedSize++; } } self::assertInstanceOf(Size::class, $firstLevelProperties->getFirstLevelSize()); self::assertSame($expectedSize, $firstLevelProperties->getFirstLevelSize()->getValue()); self::assertSame($weightInKgAdjustment, $firstLevelProperties->getFirstLevelWeightInKgAdjustment()); self::assertEquals(WeightInKg::getIt(70 + $weightInKgAdjustment->getValue()), $firstLevelProperties->getFirstLevelWeightInKg()); self::assertSame($heightInCmAdjustment, $firstLevelProperties->getFirstLevelHeightInCmAdjustment()); self::assertSame($heightInCm = HeightInCm::getIt(180 + $heightInCmAdjustment->getValue()), $firstLevelProperties->getFirstLevelHeightInCm()); self::assertEquals(new Height($heightInCm, $tables->getDistanceTable()), $firstLevelProperties->getFirstLevelHeight()); self::assertSame($age, $firstLevelProperties->getFirstLevelAge()); }