public void CannotSellTwice()
        {
            RoleOwner.Goods.Add(new Coffee());
            RoleOwner.Goods.Add(new Sugar());
            ReselectRole();
            var action = new SellGood {
                GoodType = GoodType.Coffee
            };

            CanExecuteActionOnce(action, RoleOwner);
        }
        public void CanUsePrivilege()
        {
            RoleOwner.Goods.Add(new Coffee());
            ReselectRole();
            var action = new SellGood {
                GoodType = GoodType.Coffee
            };

            CanExecuteActionOnce(action, RoleOwner);

            Assert.Equal(DoubloonsOnRole + 5, RoleOwner.Doubloons);
        }
Example #3
0
        private void ExecuteSellGood(SellGood sellGood, IPlayer player)
        {
            if (!_tradeHouse.CanBeSoldBy(sellGood.GoodType, player))
            {
                throw new GameException($"{sellGood.GoodType} cannot be sold");
            }

            var good = player.Goods.First(g => g.Type == sellGood.GoodType);

            player.Goods.Remove(good);
            var income = _tradeHouse.Sell(good);

            player.Doubloons += income + CalculateIncomeBonusFor(player);

            SetPlayerPhase(player, EndedPhase);
        }
        public void SameGoodCannotBeSold()
        {
            var player = GetPlayerWithoutPrivilege();

            RoleOwner.Goods.Add(new Coffee());
            player.Goods.Add(new Coffee());
            player.Goods.Add(new Tobacco());
            ReselectRole();
            var action = new SellGood {
                GoodType = GoodType.Coffee
            };

            CanExecuteActionOnce(action, RoleOwner);
            Assert.Throws <GameException>(() => CanExecuteActionOnce(action, player));

            Assert.Equal(0, player.Doubloons);
        }
        public void CanUseSmallMarket()
        {
            var player = GetPlayerWithoutPrivilege();

            player.Goods.Add(new Coffee());
            var smallMarket = new SmallMarket();

            smallMarket.AddWorker(new Colonist());
            player.Build(smallMarket);
            ReselectRole();
            var action = new SellGood {
                GoodType = GoodType.Coffee
            };

            CanExecuteActionOnce(action, player);

            Assert.Equal(5, player.Doubloons);
        }
        public void CanUseOffice()
        {
            var player = GetPlayerWithoutPrivilege();

            RoleOwner.Goods.Add(new Coffee());
            player.Goods.Add(new Coffee());
            ReselectRole();
            var office = new Office();

            office.AddWorker(new Colonist());
            player.Build(office);
            var action = new SellGood {
                GoodType = GoodType.Coffee
            };

            CanExecuteActionOnce(action, RoleOwner);
            CanExecuteActionOnce(action, player);

            Assert.Equal(4, player.Doubloons);
        }
        public void CanCombinePrivilegeAndSmallMarketAndLargeMarket()
        {
            var player = RoleOwner;

            player.Goods.Add(new Coffee());
            var largeMarket = new LargeMarket();

            largeMarket.AddWorker(new Colonist());
            player.Build(largeMarket);
            var smallMarket = new SmallMarket();

            smallMarket.AddWorker(new Colonist());
            player.Build(smallMarket);
            ReselectRole();
            var action = new SellGood {
                GoodType = GoodType.Coffee
            };

            CanExecuteActionOnce(action, player);

            Assert.Equal(DoubloonsOnRole + 8, player.Doubloons);
        }