using Giants.Application; using Giants.Core.Commands; using Giants.Core.Enums; using Giants.Core.Interfaces; using Giants.Infrastructure; namespace Giants.Core.Tests; public class PrepareMatchCommandTest { private readonly IMatchRepository _repo; public PrepareMatchCommandTest() { IHexagonalGrid _grid = new HexagonalGridImpl(); BoardLayout layout = new BoardLayout(_grid); _repo = new MatchRepositoryMock(layout); } [Fact] void SimpleInit5Players() { Random random = new Random(1); NewMatchCommand command = new NewMatchCommand(_repo) { Random = random }; NewMatchResult result = command.Execute(); Match? m = result.Match; Assert.NotNull(m); PrepareMatchCommand prepCommand = new PrepareMatchCommand() { InputMatch = m, PlayerIDs = new List() { 12, 15, 5, 14, 9 }, Random = random }; var resultPrep = prepCommand.Execute(); Assert.True(resultPrep.Success); Assert.NotNull(resultPrep?.Match); for (int i = 0; i < 5; i++) { Player? p = resultPrep.Match.GetPlayer(i); Assert.NotNull(p); Assert.Equal(0, p.NbVisibleTribalTokenCount); Assert.Equal(2, p.NbHiddenTribalTokenCount); Assert.Equal(4, p.NbUrnTribalTokenCount); Assert.Equal(5, p.NbHiddenBase); Assert.Equal(p.HiddenPosition, resultPrep.Match.GetPiece(p.Chef)); Assert.Equal(p.HiddenPosition, resultPrep.Match.GetPiece(p.Shaman)); Assert.Equal(1, p.Workers.Count(w => resultPrep.Match.GetPiece(w) == p.HiddenPosition)); Assert.Equal(5, p.Workers.Count(w => resultPrep.Match.GetPiece(w) == Enums.PiecePosition.Urne)); Assert.Equal(0, p.Score); Assert.NotEqual(PiecePosition.boite, resultPrep.Match.GetPiece(PieceIndex.StartPlayer)); } } [Fact] void SimpleInit4Players() { Random random = new Random(1); NewMatchCommand command = new NewMatchCommand(_repo) { Random = random }; NewMatchResult result = command.Execute(); Match? m = result.Match; Assert.NotNull(m); PrepareMatchCommand prepCommand = new PrepareMatchCommand() { InputMatch = m, PlayerIDs = new List() { 12, 15, 5, 14 }, Random = random }; var resultPrep = prepCommand.Execute(); Assert.True(resultPrep.Success); Assert.NotNull(resultPrep?.Match); for (int i = 0; i < 4; i++) { Player? p = resultPrep.Match.GetPlayer(i); Assert.NotNull(p); Assert.Equal(0, p.NbVisibleTribalTokenCount); Assert.Equal(2, p.NbHiddenTribalTokenCount); Assert.Equal(4, p.NbUrnTribalTokenCount); Assert.Equal(6, p.NbHiddenBase); Assert.Equal(p.HiddenPosition, resultPrep.Match.GetPiece(p.Chef)); Assert.Equal(p.HiddenPosition, resultPrep.Match.GetPiece(p.Shaman)); Assert.Equal(1, p.Workers.Count(w => resultPrep.Match.GetPiece(w) == p.HiddenPosition)); Assert.Equal(5, p.Workers.Count(w => resultPrep.Match.GetPiece(w) == Enums.PiecePosition.Urne)); Assert.Equal(0, p.Score); Assert.NotEqual(PiecePosition.boite, resultPrep.Match.GetPiece(PieceIndex.StartPlayer)); } } [Fact] void SimpleInit3Players() { Random random = new Random(1); NewMatchCommand command = new NewMatchCommand(_repo) { Random = random }; NewMatchResult result = command.Execute(); Match? m = result.Match; Assert.NotNull(m); PrepareMatchCommand prepCommand = new PrepareMatchCommand() { InputMatch = m, PlayerIDs = new List() { 12, 15, 5 }, Random = random }; var resultPrep = prepCommand.Execute(); Assert.True(resultPrep.Success); Assert.NotNull(resultPrep?.Match); for (int i = 0; i < 3; i++) { Player? p = resultPrep.Match.GetPlayer(i); Assert.NotNull(p); Assert.Equal(0, p.NbVisibleTribalTokenCount); Assert.Equal(2, p.NbHiddenTribalTokenCount); Assert.Equal(4, p.NbUrnTribalTokenCount); Assert.Equal(7, p.NbHiddenBase); Assert.Equal(p.HiddenPosition, resultPrep.Match.GetPiece(p.Chef)); Assert.Equal(p.HiddenPosition, resultPrep.Match.GetPiece(p.Shaman)); Assert.Equal(1, p.Workers.Count(w => resultPrep.Match.GetPiece(w) == p.HiddenPosition)); Assert.Equal(5, p.Workers.Count(w => resultPrep.Match.GetPiece(w) == Enums.PiecePosition.Urne)); Assert.Equal(0, p.Score); Assert.NotEqual(PiecePosition.boite, resultPrep.Match.GetPiece(PieceIndex.StartPlayer)); } } }