using SlaySharp.Core.Catalogs; using SlaySharp.Core.Models; using SlaySharp.Core.Run; using Xunit; namespace SlaySharp.Tests; public class GameRunTests { [Fact] public void MapGraph_GeneratesSevenFloors_WithBossAtTop() { var map = MapGraph.GenerateAct1Map(seed: 42); Assert.Equal(7, map.Floors.Count); Assert.NotEmpty(map.Floors[0]); Assert.Single(map.Floors[6]); Assert.Equal(MapNodeType.Boss, map.Floors[6][0].Type); } [Fact] public void GameRun_StartNewRun_InitializesCorrectly() { var run = new GameRun(); run.StartNewRun(seed: 42); Assert.NotNull(run.Player); Assert.Equal(70, run.Player.MaxHp); Assert.Equal(70, run.Player.CurrentHp); Assert.Equal(60, run.DevCredits); Assert.Equal(RunScreen.Map, run.CurrentScreen); Assert.NotEmpty(run.Player.MasterDeck); Assert.Equal(3, run.Player.Relics.Count); } [Fact] public void GameRun_SelectFloor0Node_TransitionsToCorrectScreen() { var run = new GameRun(); run.StartNewRun(seed: 42); var firstFloorNode = run.Map.Floors[0][0]; Assert.True(run.CanVisitNode(firstFloorNode)); run.SelectNode(firstFloorNode); Assert.Contains(firstFloorNode.Id, run.VisitedNodeIds); Assert.Equal(RunScreen.Combat, run.CurrentScreen); Assert.NotNull(run.ActiveCombat); } [Fact] public void StoryEvent_StackOverflowOption_ModifiesDeckAndHp() { var run = new GameRun(); run.StartNewRun(seed: 42); var initialDeckCount = run.Player.MasterDeck.Count; var initialMaxHp = run.Player.MaxHp; var stackOverflowEvent = StoryEvent.GetAct1Events().First(e => e.Id == "stackoverflow"); var copyPasteOption = stackOverflowEvent.Options[0]; copyPasteOption.ApplyEffect(run); Assert.Equal(initialDeckCount + 1, run.Player.MasterDeck.Count); Assert.True(run.Player.MasterDeck.Last().Upgraded); Assert.Equal(initialMaxHp - 8, run.Player.MaxHp); } [Fact] public void GameRun_CompleteCombat_AwardsDevCredits() { var run = new GameRun(); run.StartNewRun(seed: 42); var startCredits = run.DevCredits; var firstFloorNode = run.Map.Floors[0][0]; run.SelectNode(firstFloorNode); run.CompleteCombatAndClaimRewards(bonusCredits: 35); Assert.Equal(startCredits + 35, run.DevCredits); Assert.Equal(RunScreen.Map, run.CurrentScreen); Assert.Null(run.ActiveCombat); } }