public void TestMergeUserAndNeutralArmies()
        {
            var playerType        = PlayerType.FIRST;
            var userSpearmen      = 3;
            var neutralSpearmen   = 4;
            var userArchers       = 2;
            var neutralArchers    = 1;
            var userCavalrymen    = 5;
            var neutralCavalrymen = 5;

            var userArmy    = new UserArmy(playerType, new ArmyComposition(userSpearmen, userArchers, userCavalrymen));
            var neutralArmy = new NeutralFriendlyArmy(new ArmyComposition(neutralSpearmen, neutralArchers, neutralCavalrymen));
            var mergeArmy   = Army.Merge(userArmy, neutralArmy);

            Assert.True(mergeArmy.ArmyComposition.Spearmen == userSpearmen + neutralSpearmen);
            Assert.True(mergeArmy.ArmyComposition.Archers == userArchers + neutralArchers);
            Assert.True(mergeArmy.ArmyComposition.Cavalrymen == userCavalrymen + neutralCavalrymen);
            Assert.True(mergeArmy.PlayerType == playerType);
        }
        public void TestPerformAction()
        {
            var firstPlayerType = PlayerType.FIRST;
            var firstSpearmen   = 5;
            var firstArchers    = 6;
            var firstCavalrymen = 1;
            var firstUserArmy   = new UserArmy(firstPlayerType, new ArmyComposition(firstSpearmen, firstArchers, firstCavalrymen));

            var secondPlayerType = PlayerType.SECOND;
            var secondSpearmen   = 16;
            var secondArchers    = 5;
            var secondCavalrymen = 5;
            var secondUserArmy   = new UserArmy(secondPlayerType, new ArmyComposition(secondSpearmen, secondArchers, secondCavalrymen));

            var neutralFriendlySpearmen   = 12;
            var neutralFriendlyArchers    = 15;
            var neutralFriendlyCavalrymen = 17;
            var neutralFriendlyArmy       = new NeutralFriendlyArmy(new ArmyComposition(neutralFriendlySpearmen, neutralFriendlyArchers, neutralFriendlyCavalrymen));

            var neutralAggressiveSpearmen   = 15;
            var neutralAggressiveArchers    = 4;
            var neutralAggressiveCavalrymen = 5;
            var neutralAggressiveArmy       = new NeutralAggressiveArmy(new ArmyComposition(neutralAggressiveSpearmen, neutralAggressiveArchers, neutralAggressiveCavalrymen));

            var battleArmy = secondUserArmy.PerformAction(neutralAggressiveArmy);
            var mergeArmy  = neutralFriendlyArmy.PerformAction(firstUserArmy);

            Assert.True(battleArmy.PlayerType == secondPlayerType);
            Assert.True(mergeArmy.PlayerType == firstPlayerType);
            Assert.True(mergeArmy.ArmyComposition.Archers == firstArchers + neutralFriendlyArchers);
            Assert.True(mergeArmy.ArmyComposition.Spearmen == firstSpearmen + neutralFriendlySpearmen);
            Assert.True(mergeArmy.ArmyComposition.Cavalrymen == firstCavalrymen + neutralFriendlyCavalrymen);
            Assert.True(battleArmy.ArmyComposition.TotalUnitQuantity() < secondUserArmy.ArmyComposition.TotalUnitQuantity());

            var battleArmy2 = battleArmy.PerformAction(mergeArmy);

            Assert.True(battleArmy2.PlayerType == firstPlayerType);
        }