public void AttemptToApplyDamage_ReturnsInformationAboutPlay_ForEvade() { var character = CreateTestCharacter(); character.SetAbilityScoreMultiplier(AbilityScore.Defense, 1); // Ensure no defense var testRandom = new TestRandomWrapper(); Character.Random = testRandom; // Evade 1 is 2.5% chance of miss character.SetAbilityScoreMultiplier(AbilityScore.Evade, 1); character.SetCurrentHealth(20); testRandom.Double = 0.025d; // 0.025 roll > 0.025 evade is false, so no damage var playStatus = character.AttemptToApplyDamage(20); Assert.That(playStatus.CardType, Is.EqualTo(CardType.Damage)); Assert.That(playStatus.PlayCancelled, Is.EqualTo(false)); Assert.That(playStatus.Status, Is.EqualTo(PlayStatusDetails.FailedEvaded)); Assert.That(playStatus.ActualDamageOrHealingDone, Is.EqualTo(0)); character.SetCurrentHealth(20); testRandom.Double = 0.0251d; // 0.0251 roll > 0.025 evade is true, so damage playStatus = character.AttemptToApplyDamage(20); Assert.That(character.GetBaseAbilityScore(AbilityScore.Health), Is.EqualTo(0)); Assert.That(playStatus.CardType, Is.EqualTo(CardType.Damage)); Assert.That(playStatus.PlayCancelled, Is.EqualTo(false)); Assert.That(playStatus.Status, Is.EqualTo(PlayStatusDetails.Success)); Assert.That(playStatus.ActualDamageOrHealingDone, Is.EqualTo(20)); }
public void AttemptToApplyDamage_AccountsForEvade() { var character = CreateTestCharacter(); character.SetAbilityScoreMultiplier(AbilityScore.Defense, 1); // Ensure no defense var testRandom = new TestRandomWrapper(); Character.Random = testRandom; // Evade 1 is 2.5% chance of miss character.SetAbilityScoreMultiplier(AbilityScore.Evade, 1); character.SetCurrentHealth(20); testRandom.Double = 0.025d; // 0.025 roll > 0.025 evade is false, so no damage character.AttemptToApplyDamage(20); Assert.That(character.GetBaseAbilityScore(AbilityScore.Health), Is.EqualTo(20)); character.SetCurrentHealth(20); testRandom.Double = 0.0251d; // 0.0251 roll > 0.025 evade is true, so damage character.AttemptToApplyDamage(20); Assert.That(character.GetBaseAbilityScore(AbilityScore.Health), Is.EqualTo(0)); // Evade 2 is 10% chance of miss character.SetAbilityScoreMultiplier(AbilityScore.Evade, 2); character.SetCurrentHealth(20); testRandom.Double = 0.1d; // 0.1 roll > 0.1 evade is false, so no damage character.AttemptToApplyDamage(20); Assert.That(character.GetBaseAbilityScore(AbilityScore.Health), Is.EqualTo(20)); character.SetCurrentHealth(20); testRandom.Double = 0.11d; // 0.11 roll > 0.1 evade is true, so damage character.AttemptToApplyDamage(20); Assert.That(character.GetBaseAbilityScore(AbilityScore.Health), Is.EqualTo(0)); // Evade 3 is 22.5% chance of miss character.SetAbilityScoreMultiplier(AbilityScore.Evade, 3); character.SetCurrentHealth(20); testRandom.Double = 0.225d; // 0.225 roll > 0.225 evade is false, so no damage character.AttemptToApplyDamage(20); Assert.That(character.GetBaseAbilityScore(AbilityScore.Health), Is.EqualTo(20)); character.SetCurrentHealth(20); testRandom.Double = 0.2251d; // 0.2251 roll > 0.225 evade is true, so damage character.AttemptToApplyDamage(20); Assert.That(character.GetBaseAbilityScore(AbilityScore.Health), Is.EqualTo(0)); // Evade 4 is 40% chance of msis character.SetAbilityScoreMultiplier(AbilityScore.Evade, 4); character.SetCurrentHealth(20); testRandom.Double = 0.4d; // 0.4 roll > 0.4 evade is false, so no damage character.AttemptToApplyDamage(20); Assert.That(character.GetBaseAbilityScore(AbilityScore.Health), Is.EqualTo(20)); character.SetCurrentHealth(20); testRandom.Double = 41; // 0.41 roll > 0.4 evade is true, so damage character.AttemptToApplyDamage(20); Assert.That(character.GetBaseAbilityScore(AbilityScore.Health), Is.EqualTo(0)); }