public void StartAFight_ThenAnotherPlayerJoins_ResultsInRaisedHeroStrength_Test()
        {
            var quest = QuestFactory.CreateStartedWithMaleHero(
                out var gameStore,
                out var gameId,
                out var playerId,
                out var sequence);

            var xena = new Hero(PlayerFactory.CreateFemale("Xena"));
            var game = quest.GetState(gameId);
            var hero = game.GetHero(playerId);

            var heroLevelRaise = LevelMessage.Create(sequence.Next, playerId, 1);
            var heroBonusRaise = BonusMessage.Create(sequence.Next, playerId, 1);
            var addXena        = PlayerMessage.CreateAdd(sequence.Next, new[] { xena.Player });
            var xenaLevelRaise = LevelMessage.Create(sequence.Next, xena.Player.Id, 1);
            var xenaBonusRaise = BonusMessage.Create(sequence.Next, xena.Player.Id, 1);
            var startFight     = FightStartMessage.Create(sequence.Next, hero.Player.Id, zerschmetterling);
            var preparation    = new GameMessage[] { heroLevelRaise, heroBonusRaise, addXena, xenaLevelRaise, xenaBonusRaise, startFight };

            var xenaJoinsFight = FightJoinMessage.Create(sequence.Next, xena.Player.Id);

            quest.AddMessages(gameId, preparation);
            game = quest.AddMessage(gameId, xenaJoinsFight);

            Assert.NotNull(game.Score.Fight);
            Assert.Equal(2, game.Score.Fight.Heroes.Count);
            Assert.Equal(6, game.Score.Fight.TotalHeroesScore);
        }
        public void DecreaseBonusWhenGameIsNotStarted_ThrowsException_Test()
        {
            // Arrange
            var quest            = QuestFactory.CreateStored(out var gameStore, out var gameId);
            var decreaseBonusMsg = BonusMessage.Create(1, Guid.NewGuid(), -1);

            // Act & Assert
            Assert.Throws <InvalidActionException>(() => quest.AddMessage(gameId, decreaseBonusMsg));
        }
        public void DecreaseBonusOnUnknownHero_ThrowsException_Test()
        {
            // Arrange
            var quest            = QuestFactory.CreateStarted(out var gameStore, out var gameId, out var sequence);
            var decreaseBonusMsg = BonusMessage.Create(sequence.Next, Guid.NewGuid(), 1);

            // Act & Assert
            Assert.Throws <InvalidActionException>(() => quest.AddMessage(gameId, decreaseBonusMsg));
        }
        public void IncreaseBonusOnHero_ResultsInIncreasedBonus_Test()
        {
            // Arrange
            var quest            = QuestFactory.CreateStartedWithMaleHero(out var gameStore, out var gameId, out var playerId, out var sequence);
            var increaseBonusMsg = BonusMessage.Create(sequence.Next, playerId, 1);

            // Act
            var game = quest.AddMessage(gameId, increaseBonusMsg);

            // Assert
            Assert.Equal(1, game.Score.Heroes.First().Bonus);
        }
        public void LevelUpHeroThenKillHim_ResultsInBonusReset_Test()
        {
            // Arrange
            var quest = QuestFactory.CreateStartedWithMaleHero(
                out var gameStore,
                out var gameId,
                out var playerId,
                out var sequence);

            var bonusMsg = BonusMessage.Create(sequence.Next, playerId, 1);
            var deathMsg = DeathMessage.Create(sequence.Next, playerId);

            // Act
            quest.AddMessage(gameId, bonusMsg);
            var game = quest.AddMessage(gameId, deathMsg);

            // Assert
            var hero = game.GetHero(playerId);

            Assert.Equal(0, hero.Bonus);
        }