This commit is contained in:
Michal Vrba
2026-09-16 23:37:16 +02:00
parent 121d013d14
commit d3c419f8ce
30 changed files with 3151 additions and 350 deletions
+49 -15
View File
@@ -1,4 +1,4 @@
using SlaySharp.Core.Catalogs;
using SlaySharp.Core.Catalogs;
using SlaySharp.Core.Combat;
using SlaySharp.Core.Enums;
using SlaySharp.Core.Models;
@@ -22,7 +22,7 @@ public class CombatEngineTests
Assert.Equal(CombatPhase.PlayerTurn, engine.Phase);
Assert.Equal(3, player.CurrentEnergy);
Assert.Equal(5, player.Hand.Count);
Assert.Equal(7, player.DrawPile.Count);
Assert.Equal(player.MasterDeck.Count - 5, player.DrawPile.Count);
Assert.Empty(player.DiscardPile);
}
@@ -36,7 +36,6 @@ public class CombatEngineTests
var engine = new CombatEngine();
engine.StartCombat(player, new List<Enemy> { enemy });
// Force hand
player.Hand.Clear();
player.Hand.Add(card);
player.CurrentEnergy = 3;
@@ -45,10 +44,48 @@ public class CombatEngineTests
Assert.True(success);
Assert.Equal(2, player.CurrentEnergy);
Assert.Equal(39, enemy.CurrentHp);
Assert.True(enemy.CurrentHp <= 39);
Assert.Contains(card, player.DiscardPile);
}
[Fact]
public void CalculateDamagePreview_AccuratelyCalculatesHpLossAndShieldAbsorbed()
{
var player = new Player("Senior Dev", 70, maxEnergy: 3);
var card = new ThrowExceptionCard(); // 16 dmg
var enemy = new OffByOneBugEnemy(); // 22 HP
var engine = new CombatEngine();
engine.StartCombat(player, new List<Enemy> { enemy });
enemy.GainShield(6); // Set shield AFTER StartCombat
var preview = engine.CalculateDamagePreview(card, enemy);
Assert.Equal(16, preview.MinRawDamage);
Assert.Equal(6, preview.ShieldAbsorbed);
Assert.Equal(10, preview.MinHpLoss); // 16 - 6 shield = 10 HP loss
Assert.Equal(12, preview.ProjectedRemainingHp); // 22 - 10 = 12
Assert.False(preview.IsLethal);
}
[Fact]
public void CalculateDamagePreview_IdentifiesLethalDamage()
{
var player = new Player("Senior Dev", 70, maxEnergy: 3);
var card = new ThrowExceptionCard(); // 16 dmg
var enemy = new OffByOneBugEnemy(); // 22 HP
var engine = new CombatEngine();
engine.StartCombat(player, new List<Enemy> { enemy });
enemy.CurrentHp = 14;
var preview = engine.CalculateDamagePreview(card, enemy);
Assert.Equal(16, preview.MinHpLoss);
Assert.True(preview.IsLethal);
Assert.Equal(0, preview.ProjectedRemainingHp);
}
[Fact]
public void SpanSliceCard_PiercesThroughShield()
{
@@ -67,8 +104,8 @@ public class CombatEngineTests
var success = engine.PlayCard(card, enemy);
Assert.True(success);
Assert.Equal(10, enemy.Shield); // Shield remains 10!
Assert.Equal(37, enemy.CurrentHp); // 45 - 8 = 37
Assert.Equal(10, enemy.Shield);
Assert.True(enemy.CurrentHp <= 37);
}
[Fact]
@@ -81,8 +118,8 @@ public class CombatEngineTests
var engine = new CombatEngine();
engine.StartCombat(player, new List<Enemy> { enemy });
player.Statuses.Add(StatusType.Strength, 2); // Base 6 + 2 = 8
enemy.Statuses.Add(StatusType.Vulnerable, 1); // 8 * 1.5 = 12
player.Statuses.Add(StatusType.Strength, 2);
enemy.Statuses.Add(StatusType.Vulnerable, 1);
player.Hand.Clear();
player.Hand.Add(card);
@@ -90,14 +127,13 @@ public class CombatEngineTests
engine.PlayCard(card, enemy);
Assert.Equal(33, enemy.CurrentHp); // 45 - 12 = 33
Assert.True(enemy.CurrentHp <= 33);
}
[Fact]
public void DiscardPile_Reshuffles_WhenDrawPileEmpty()
{
var player = new Player("Senior Dev", 70, maxEnergy: 3, seed: 123);
// Only 3 cards in master deck
player.MasterDeck.Add(new ConsoleWriteLineCard());
player.MasterDeck.Add(new TryCatchCard());
player.MasterDeck.Add(new LinqWhereCard());
@@ -107,16 +143,13 @@ public class CombatEngineTests
engine.StartCombat(player, new List<Enemy> { enemy });
// All 3 cards drawn to hand, draw pile empty
Assert.Equal(3, player.Hand.Count);
Assert.Empty(player.DrawPile);
// Discard 2 cards
player.DiscardPile.Add(player.Hand[0]);
player.DiscardPile.Add(player.Hand[1]);
player.Hand.RemoveRange(0, 2);
// Request drawing 2 cards
player.DrawCards(2, engine.Log);
Assert.Equal(3, player.Hand.Count);
@@ -133,7 +166,7 @@ public class CombatEngineTests
var engine = new CombatEngine();
engine.StartCombat(player, new List<Enemy> { enemy });
enemy.CurrentHp = 10; // low HP
enemy.CurrentHp = 10;
player.Hand.Clear();
player.Hand.Add(card);
player.CurrentEnergy = 2;
@@ -142,5 +175,6 @@ public class CombatEngineTests
Assert.Equal(CombatPhase.Victory, engine.Phase);
Assert.Empty(engine.Enemies);
Assert.NotEmpty(engine.CardRewards);
}
}
}