Skip to content

Commit 485396f

Browse files
authored
Add tests, fix UniqueId at setup (#82)
1 parent 4783176 commit 485396f

2 files changed

Lines changed: 106 additions & 7 deletions

File tree

Engine/src/Board/BoardManager.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,17 +114,22 @@ public void SetUpGame()
114114
EnemyPlayer.CoinsAmount = 1; // Second player starts with one gold
115115
Tavern.SetUp(_rng);
116116

117-
List<UniqueCard> starterDecks = new List<UniqueCard>();
117+
List<UniqueCard> starterDecksPlayer1 = new List<UniqueCard>();
118+
List<UniqueCard> starterDecksPlayer2 = new List<UniqueCard>();
118119

119-
foreach (var patron in this.Patrons)
120+
foreach (var patron in Patrons)
120121
{
121-
starterDecks.AddRange(
122-
patron.GetStarterCards().Select(cardId => GlobalCardDatabase.Instance.GetCard(cardId)).ToList()
122+
var starterIds = patron.GetStarterCards();
123+
starterDecksPlayer1.AddRange(
124+
starterIds.Select(cardId => GlobalCardDatabase.Instance.GetCard(cardId))
125+
);
126+
starterDecksPlayer2.AddRange(
127+
starterIds.Select(cardId => GlobalCardDatabase.Instance.GetCard(cardId))
123128
);
124129
}
125130

126-
CurrentPlayer.InitDrawPile(starterDecks);
127-
EnemyPlayer.InitDrawPile(starterDecks);
131+
CurrentPlayer.InitDrawPile(starterDecksPlayer1);
132+
EnemyPlayer.InitDrawPile(starterDecksPlayer2);
128133

129134
CurrentPlayer.Draw(5);
130135
EnemyPlayer.Draw(5);

ModuleTests/GameStateTests.cs

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
using ScriptsOfTribute;
2+
using ScriptsOfTribute.Board;
23
using ScriptsOfTribute.Board.Cards;
34
using ScriptsOfTribute.Serializers;
45

56
namespace ModuleTests;
67

78
public class GameStateTests
8-
{
9+
{
10+
private PatronId[] _patronsSetUp = {PatronId.RED_EAGLE, PatronId.ANSEI, PatronId.TREASURY, PatronId.HLAALU, PatronId.DUKE_OF_CROWS};
911
[Fact]
1012
void SeededGameStateShouldAllowToPlayAsEnemy()
1113
{
@@ -22,4 +24,96 @@ void SeededGameStateShouldAllowToPlayAsEnemy()
2224
(newState, possibleMoves) = newState.ApplyMove(Move.PlayCard(enemyHand[0]));
2325
Assert.Equal(1, newState.CurrentPlayer.Coins);
2426
}
27+
28+
[Fact]
29+
void HandsShouldHaveDifferentUniqueCards()
30+
{
31+
ulong seed = 42;
32+
33+
var api = new ScriptsOfTributeApi(_patronsSetUp, seed);
34+
35+
var currentHand = api.GetPlayer(PlayerEnum.PLAYER1).Hand;
36+
var enemyHand = api.GetPlayer(PlayerEnum.PLAYER2).Hand;
37+
38+
var currentHandIds = currentHand.Select(c => c.UniqueId).ToHashSet();
39+
var enemyHandIds = enemyHand.Select(c => c.UniqueId).ToHashSet();
40+
41+
bool anyOverlap = currentHandIds.Overlaps(enemyHandIds);
42+
Assert.False(anyOverlap, "Players should not share cards with the same UniqueId.");
43+
}
44+
45+
[Fact]
46+
void SetUpGame_ShouldGiveEachPlayer5CardsInHand()
47+
{
48+
var api = new ScriptsOfTributeApi(_patronsSetUp, 123);
49+
var p1 = api.GetPlayer(PlayerEnum.PLAYER1);
50+
var p2 = api.GetPlayer(PlayerEnum.PLAYER2);
51+
Assert.Equal(5, p1.Hand.Count);
52+
Assert.Equal(5, p2.Hand.Count);
53+
}
54+
55+
[Fact]
56+
void SetUpGame_ShouldGiveSecondPlayerOneCoin()
57+
{
58+
var api = new ScriptsOfTributeApi(_patronsSetUp, 123);
59+
var p1 = api.GetPlayer(PlayerEnum.PLAYER1);
60+
var p2 = api.GetPlayer(PlayerEnum.PLAYER2);
61+
Assert.Equal(0, p1.Coins);
62+
Assert.Equal(1, p2.Coins);
63+
}
64+
65+
[Fact]
66+
void SetUpGame_ShouldReduceDrawPileBy5Cards()
67+
{
68+
var api = new ScriptsOfTributeApi(_patronsSetUp, 123);
69+
var p1 = api.GetPlayer(PlayerEnum.PLAYER1);
70+
Assert.True(p1.DrawPile.Count > 0);
71+
Assert.Equal(10, p1.Hand.Count + p1.DrawPile.Count);
72+
}
73+
74+
[Fact]
75+
void PlayCard_ShouldMoveCardFromHandToPlayed()
76+
{
77+
var api = new ScriptsOfTributeApi(_patronsSetUp, 123);
78+
var cardToPlay = api.GetPlayer(PlayerEnum.PLAYER1).Hand.First();
79+
80+
api.PlayCard(cardToPlay);
81+
82+
var updated = api.GetPlayer(PlayerEnum.PLAYER1);
83+
Assert.DoesNotContain(cardToPlay, updated.Hand);
84+
Assert.Contains(cardToPlay, updated.Played);
85+
}
86+
87+
[Fact]
88+
void BuyCard_ShouldAddCardToCooldownAndRemoveFromTavern()
89+
{
90+
var board = new BoardManager(_patronsSetUp, 123);
91+
var player = board.CurrentPlayer;
92+
board.Tavern.AvailableCards.Add(GlobalCardDatabase.Instance.GetCard(CardId.THE_ARMORY));
93+
var cheapCard = board.Tavern.AvailableCards[0];
94+
95+
player.CoinsAmount += cheapCard.Cost;
96+
97+
board.BuyCard(cheapCard);
98+
99+
var newPlayer = board.CurrentPlayer;
100+
101+
Assert.DoesNotContain(cheapCard, board.GetAvailableTavernCards());
102+
Assert.Contains(cheapCard.UniqueId, newPlayer.CooldownPile.Select(c => c.UniqueId));
103+
}
104+
105+
[Fact]
106+
void IsMoveLegal_ShouldReturnTrueOnlyForLegalMoves()
107+
{
108+
var api = new ScriptsOfTributeApi(_patronsSetUp, 123);
109+
var possible = api.GetListOfPossibleMoves();
110+
111+
foreach (var move in possible)
112+
{
113+
Assert.True(api.IsMoveLegal(move));
114+
}
115+
116+
var enemyCard = api.GetPlayer(PlayerEnum.PLAYER2).Hand.First();
117+
Assert.False(api.IsMoveLegal(Move.PlayCard(enemyCard)));
118+
}
25119
}

0 commit comments

Comments
 (0)