public void PlayerHasReflectDamageEffectUnitTest() { Player player = new Player("test", PlayerClassType.Mage); EffectAmountSettings effectAmountSettings = new EffectAmountSettings { Amount = 50, EffectHolder = player, MaxRound = 4, Name = "reflect damage test" }; IEffect reflectEffect = new ReflectDamageEffect(effectAmountSettings); player.Effects.Add(reflectEffect); Assert.AreEqual(1, player.Effects.Count); Assert.AreEqual(true, player.Effects[0] is ReflectDamageEffect); Assert.AreEqual(1, player.Effects[0].CurrentRound); Assert.AreEqual(effectAmountSettings.MaxRound, player.Effects[0].MaxRound); Assert.AreEqual(false, player.Effects[0].IsHarmful); Assert.AreEqual(reflectEffect.EffectHolder, player); }
public void ProcessReflectDamageEffectOutOfCombatRoundUnitTest() { OutputHelper.Display.ClearUserOutput(); Player player = new Player("test", PlayerClassType.Mage); EffectAmountSettings effectAmountSettings = new EffectAmountSettings { Amount = 50, EffectHolder = player, MaxRound = 4, Name = "reflect damage test" }; ReflectDamageEffect reflectEffect = new ReflectDamageEffect(effectAmountSettings); player.Effects.Add(reflectEffect); const string reflectMessage = "Your spell reflect is slowly fading away."; reflectEffect.ProcessRound(); Assert.AreEqual(reflectMessage, OutputHelper.Display.Output[0][2]); Assert.AreEqual(effectAmountSettings.Amount, reflectEffect.ReflectDamageAmount); Assert.AreEqual(2, player.Effects[0].CurrentRound); Assert.AreEqual(false, reflectEffect.IsEffectExpired); }
public void ProcessReflectDamageEffectInCombatRoundUnitTest() { OutputHelper.Display.ClearUserOutput(); Player player = new Player("test", PlayerClassType.Mage); EffectAmountSettings effectAmountSettings = new EffectAmountSettings { Amount = 50, EffectHolder = player, MaxRound = 4, Name = "reflect damage test" }; ReflectDamageEffect reflectEffect = new ReflectDamageEffect(effectAmountSettings); player.Effects.Add(reflectEffect); const int incomingDamage = 30; string reflectMessage = $"You reflected {incomingDamage} damage back at your opponent!"; reflectEffect.ProcessChangeDamageRound(incomingDamage); Assert.AreEqual(reflectMessage, OutputHelper.Display.Output[0][2]); Assert.AreEqual(2, player.Effects[0].CurrentRound); Assert.AreEqual(false, reflectEffect.IsEffectExpired); }
public void ReflectDamageSpellUnitTest() { OutputHelper.Display.ClearUserOutput(); Player player = new Player("test", PlayerClassType.Mage) { MaxManaPoints = 100, ManaPoints = 100 }; Monster monster = new Monster(3, MonsterType.Zombie) { HitPoints = 100, MaxHitPoints = 100 }; MonsterBuilder.BuildMonster(monster); foreach (IItem item in monster.MonsterItems.Where(item => item is IEquipment eItem && eItem.Equipped)) { IEquipment eItem = item as IEquipment; eItem.Equipped = false; } player.Spellbook.Add(new PlayerSpell( "reflect", 100, 1, SpellType.Reflect, 4)); string[] inputInfo = new[] { "spell", "reflect" }; int spellIndex = player.Spellbook.FindIndex( f => f.SpellCategory == SpellType.Reflect); PlayerHelper.SpellInfo(player, inputInfo); Assert.AreEqual("Reflect", OutputHelper.Display.Output[0][2]); Assert.AreEqual("Rank: 1", OutputHelper.Display.Output[1][2]); Assert.AreEqual("Mana Cost: 100", OutputHelper.Display.Output[2][2]); Assert.AreEqual("Reflect Damage Amount: 25", OutputHelper.Display.Output[3][2]); string reflectInfoString = $"Damage up to {player.Spellbook[spellIndex].ChangeAmount.Amount} will be reflected for " + $"{player.Spellbook[spellIndex].ChangeAmount.ChangeMaxRound} rounds."; Assert.AreEqual(reflectInfoString, OutputHelper.Display.Output[4][2]); string[] input = new[] { "cast", "reflect" }; string spellName = InputHelper.ParseInput(input); Assert.AreEqual("reflect", spellName); player.CastSpell(spellName); Assert.AreEqual(player.MaxManaPoints - player.Spellbook[spellIndex].ManaCost, player.ManaPoints); Assert.AreEqual("You create a shield around you that will reflect damage.", OutputHelper.Display.Output[5][2]); Assert.AreEqual(true, player.Effects.Any()); Assert.AreEqual(true, player.Effects[0] is ReflectDamageEffect); ReflectDamageEffect reflectDmgEffect = player.Effects[0] as ReflectDamageEffect; OutputHelper.Display.ClearUserOutput(); for (int i = 2; i < 5; i++) { int attackDamageM = monster.MonsterWeapon.Attack(); int reflectAmount = reflectDmgEffect.ReflectDamageAmount < attackDamageM ? reflectDmgEffect.ReflectDamageAmount : attackDamageM; Assert.AreEqual(true, reflectAmount <= reflectDmgEffect.ReflectDamageAmount); monster.HitPoints -= reflectAmount; Assert.AreEqual(monster.HitPoints, monster.MaxHitPoints - (reflectAmount * (i - 1))); reflectDmgEffect.ProcessChangeDamageRound(reflectAmount); Assert.AreEqual( $"You reflected {reflectAmount} damage back at your opponent!", OutputHelper.Display.Output[i - 2][2]); } GameHelper.RemovedExpiredEffectsAsync(player); Thread.Sleep(1000); Assert.AreEqual(false, player.Effects.Any()); }