improvements
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using SlaySharp.Core.Catalogs;
|
||||
using SlaySharp.Core.Catalogs;
|
||||
using SlaySharp.Core.Combat;
|
||||
using SlaySharp.Core.Enums;
|
||||
using SlaySharp.Core.Models;
|
||||
@@ -177,4 +177,110 @@ public class CombatEngineTests
|
||||
Assert.Empty(engine.Enemies);
|
||||
Assert.NotEmpty(engine.CardRewards);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GameRun_StartNewRun_InitializesCorrectArchetypes()
|
||||
{
|
||||
var run = new SlaySharp.Core.Run.GameRun();
|
||||
|
||||
// Principal Architect
|
||||
run.StartNewRun(DeveloperArchetype.PrincipalArchitect);
|
||||
Assert.Equal("Principal Architect", run.Player.Name);
|
||||
Assert.Equal(70, run.Player.MaxHp);
|
||||
Assert.Equal(3, run.Player.MaxEnergy);
|
||||
Assert.Equal(3, run.Player.Relics.Count);
|
||||
|
||||
// Async Concurrency Master
|
||||
run.StartNewRun(DeveloperArchetype.AsyncConcurrencyMaster);
|
||||
Assert.Equal("Async Master", run.Player.Name);
|
||||
Assert.Equal(65, run.Player.MaxHp);
|
||||
Assert.Equal(4, run.Player.MaxEnergy);
|
||||
Assert.Equal(2, run.Player.Relics.Count);
|
||||
|
||||
// Unsafe Memory Hacker
|
||||
run.StartNewRun(DeveloperArchetype.UnsafeMemoryHacker);
|
||||
Assert.Equal("Unsafe Hacker", run.Player.Name);
|
||||
Assert.Equal(60, run.Player.MaxHp);
|
||||
Assert.Equal(3, run.Player.MaxEnergy);
|
||||
Assert.Equal(2, run.Player.Relics.Count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TaskWhenAllCard_DealsDamageToTargetEnemy()
|
||||
{
|
||||
var player = new Player("Async Master", 65, maxEnergy: 4);
|
||||
var card = new TaskWhenAllCard(); // 14 dmg single target
|
||||
var enemy = new NullReferenceExceptionEnemy(); // 45 HP
|
||||
|
||||
var engine = new CombatEngine();
|
||||
engine.StartCombat(player, new List<Enemy> { enemy });
|
||||
|
||||
player.Hand.Clear();
|
||||
player.Hand.Add(card);
|
||||
player.CurrentEnergy = 2;
|
||||
|
||||
var success = engine.PlayCard(card, enemy);
|
||||
|
||||
Assert.True(success);
|
||||
Assert.Equal(0, player.CurrentEnergy);
|
||||
Assert.True(enemy.CurrentHp <= 31);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FixedPointerCard_DealsPiercingDamageTwoTimes()
|
||||
{
|
||||
var player = new Player("Unsafe Hacker", 60, maxEnergy: 3);
|
||||
var card = new FixedPointerCard(); // 2 hits of 9 piercing dmg
|
||||
var enemy = new MemoryLeakSpectreEnemy(); // 35 HP
|
||||
|
||||
var engine = new CombatEngine();
|
||||
engine.StartCombat(player, new List<Enemy> { enemy });
|
||||
|
||||
enemy.GainShield(12);
|
||||
player.Hand.Clear();
|
||||
player.Hand.Add(card);
|
||||
player.CurrentEnergy = 2;
|
||||
|
||||
var success = engine.PlayCard(card, enemy);
|
||||
|
||||
Assert.True(success);
|
||||
Assert.Equal(12, enemy.Shield); // Pierced
|
||||
Assert.True(enemy.CurrentHp <= 17);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void KubernetesBoss_ExecutesRoutines()
|
||||
{
|
||||
var boss = new KubernetesClusterBossEnemy();
|
||||
Assert.Equal(110, boss.MaxHp);
|
||||
Assert.Equal(110, boss.CurrentHp);
|
||||
Assert.Equal("☸️", boss.Icon);
|
||||
|
||||
var player = new Player("Senior Dev", 70, maxEnergy: 3);
|
||||
var engine = new CombatEngine();
|
||||
engine.StartCombat(player, new List<Enemy> { boss });
|
||||
|
||||
// Verify intent is planned
|
||||
Assert.NotNull(boss.CurrentIntent);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RunRecord_Create_GeneratesValidGitCommitRecord()
|
||||
{
|
||||
var record = RunRecord.Create(
|
||||
DeveloperArchetype.AsyncConcurrencyMaster,
|
||||
true,
|
||||
55,
|
||||
65,
|
||||
120,
|
||||
14,
|
||||
7
|
||||
);
|
||||
|
||||
Assert.Equal(7, record.CommitHash.Length);
|
||||
Assert.True(record.IsVictory);
|
||||
Assert.Equal(55, record.FinalHp);
|
||||
Assert.Equal(120, record.DevCredits);
|
||||
Assert.Contains("feat(prod)", record.Message);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user