improvements

This commit is contained in:
Michal Vrba
2026-09-16 23:58:25 +02:00
parent d3c419f8ce
commit e7512f7c35
13 changed files with 1906 additions and 393 deletions
+107 -1
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;
@@ -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);
}
}