11using ScriptsOfTribute ;
2+ using ScriptsOfTribute . Board ;
23using ScriptsOfTribute . Board . Cards ;
34using ScriptsOfTribute . Serializers ;
45
56namespace ModuleTests ;
67
78public 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