diff --git a/Sources/Model/Games/Game.cs b/Sources/Model/Games/Game.cs index 5dbc893..d77284e 100644 --- a/Sources/Model/Games/Game.cs +++ b/Sources/Model/Games/Game.cs @@ -35,7 +35,7 @@ namespace Model.Games /// /// references the position in list of the current player, for a given game. /// - private int nextIndex = 0; + private int nextIndex; /// /// the turns that have been done so far @@ -70,9 +70,10 @@ namespace Model.Games public Game(string name, IManager playerManager, IEnumerable> dice, IEnumerable turns) { Name = name; - this.turns = turns.ToList() ?? new List(); + this.turns = turns is null ? new List() : turns.ToList(); this.playerManager = playerManager; this.dice = dice; + this.nextIndex = 0; } /// @@ -92,7 +93,7 @@ namespace Model.Games public void PerformTurn(Player player) { Turn turn = Turn.CreateWithDefaultTime( - new Player(player), //using a copy so that next lines can't "change history" + player, ThrowAll() ); turns.Add(turn); diff --git a/Sources/Tests/Model_UTs/GameTest.cs b/Sources/Tests/Model_UTs/GameTest.cs index f9b3317..f38054a 100644 --- a/Sources/Tests/Model_UTs/GameTest.cs +++ b/Sources/Tests/Model_UTs/GameTest.cs @@ -8,6 +8,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Xunit; +using static System.Collections.Specialized.BitVector32; +using System.Diagnostics; namespace Tests.Model_UTs { @@ -18,9 +21,13 @@ namespace Tests.Model_UTs private static readonly Player PLAYER_1 = new("Alice"), PLAYER_2 = new("Bob"), PLAYER_3 = new("Clyde"); + private readonly static NumberDieFace FACE_NUM = new(1); + private readonly static ImageDieFace FACE_IMG = new(10); + private readonly static ColorDieFace FACE_CLR = new(1000); + private readonly static NumberDieFace[] FACES_1 = new NumberDieFace[] { - new(1), + FACE_NUM, new(2), new(3), new(4) @@ -28,7 +35,7 @@ namespace Tests.Model_UTs private readonly static ImageDieFace[] FACES_2 = new ImageDieFace[] { - new(10), + FACE_IMG, new(20), new(30), new(40) @@ -36,7 +43,7 @@ namespace Tests.Model_UTs private readonly static ColorDieFace[] FACES_3 = new ColorDieFace[] { - new(1000), + FACE_CLR, new(2000), new(3000), new(4000) @@ -44,18 +51,143 @@ namespace Tests.Model_UTs private static readonly AbstractDie NUM = new NumberDie(FACES_1), IMG = new ImageDie(FACES_2), CLR = new ColorDie(FACES_3); - private static readonly IEnumerable> dice = + private static readonly IEnumerable> DICE = new List>() { NUM, IMG, CLR } .AsEnumerable(); - public GameTest() + [Fact] + public void TestNamePropertyGet() + { + // Arrange + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + + // Act + string actual = game.Name; + + // Assert + Assert.Equal(GAME_NAME, actual); + } + + [Fact] + public void TestNamePropertySetWhenValidThenCorrect() + { + // Arrange + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + string expected = "shitty marmot"; + + + // Act + game.Name = expected; + string actual = game.Name; + + // Assert + Assert.Equal(expected, actual); + } + + [Theory] + [InlineData("")] + [InlineData(null)] + [InlineData(" ")] + public void TestNamePropertySetWhenInvalidThenException(string name) + { + // Arrange + Game game; + + // Act + void action() => game = new(name: name, playerManager: new PlayerManager(), dice: DICE); + + // Assert + Assert.Throws(action); + } + + [Fact] + public void TestGetHistory() { + // Arrange + Dictionary, AbstractDieFace> diceNFaces = new() + { + { CLR, FACE_CLR }, + { IMG, FACE_IMG }, + { NUM, FACE_NUM } + }; - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: dice); + Turn turn1 = Turn.CreateWithDefaultTime(PLAYER_1, diceNFaces); + Turn turn2 = Turn.CreateWithDefaultTime(PLAYER_2, diceNFaces); // yeah they rolled the same + IEnumerable expected = new List() { turn1, turn2 }; + + // Act + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE, expected); + IEnumerable actual = game.GetHistory(); + + // Assert + Assert.Equal(expected, actual); + } + + [Fact] + public void TestDicePropertyGet() + { + // Arrange + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + + + // Act + IEnumerable> actual = game.Dice; + IEnumerable> expected = DICE; + + // Assert + Assert.Equal(expected, actual); + } + + [Fact] + public void TestGetWhoPlaysNow() + { + // Arrange + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); game.AddPlayerToGame(PLAYER_1); game.AddPlayerToGame(PLAYER_2); - game.AddPlayerToGame(PLAYER_3); + + // Act + Player actual = game.GetWhoPlaysNow(); + Player expected = PLAYER_1; + + game.PrepareNextPlayer(actual); + + Player actual2 = game.GetWhoPlaysNow(); + Player expected2 = PLAYER_2; + + // Assert + Assert.Equal(expected, actual); + + Assert.Equal(expected2, actual2); + } + + [Fact] + public void TestPerformTurnDoesAddOneTurn() + { + // Arrange + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + game.AddPlayerToGame(PLAYER_1); + game.AddPlayerToGame(PLAYER_2); + + int n = 5; + + IEnumerable players = game.GetPlayersFromGame(); + Debug.WriteLine(players); + + for (int i = 0; i < n; i++) + { + Player currentPlayer = game.GetWhoPlaysNow(); + game.PerformTurn(currentPlayer); + game.PrepareNextPlayer(currentPlayer); + } + + // Act + int actual = game.GetHistory().Count(); + int expected = n; + + // Assert + Assert.Equal(expected, actual); } } }