Пример #1
0
        public void _商品を購入する()
        {
            var racks = TestHelper.InitInfinityItems(ItemRackState.CanNotPurchase);

            var pool   = TestHelper.InitInfinityReservedChange();
            var credit = new CashDeal();

            var coinMeckRole = new CoinMeckRole();
            var itemRackRole = new  ItemRackRole();

            coinMeckRole.Receive(credit, Money.Coin100);
            coinMeckRole.Receive(credit, Money.Coin10);
            coinMeckRole.Receive(credit, Money.Coin10);

            var rack = itemRackRole.FindRackAt(racks, 0);

            itemRackRole.UpdateItemSelectionState(rack, credit, pool);

            var svCount = rack.Count;

            Assert.That(itemRackRole.CanItemPurchase(rack), Is.True);

            coinMeckRole.Purchase(credit, rack.Item.Price);
            var item = itemRackRole.Purchase(rack);

            Assert.That(item, Is.Not.Null);
            Assert.That(item.Name, Is.EqualTo("Item0"));

            Assert.That(credit.UsedAmount, Is.EqualTo(120));
            Assert.That(credit.ChangedAount, Is.EqualTo(0));

            Assert.That(rack.Count, Is.EqualTo(svCount - 1));
        }
Пример #2
0
        public void _お金投入による商品選択状態の変化(
            [ValueSource(typeof(商品選択状態の変化Params), "Source")]
            商品選択状態の変化Params.Param inParameter)
        {
            var racks = TestHelper.InitInfinityItems(ItemRackState.CanNotPurchase);

            var pool   = TestHelper.InitInfinityReservedChange();
            var credit = new CashDeal();

            var coinMeckRole = new CoinMeckRole();
            var itemRackRole = new  ItemRackRole();

            foreach (var c in inParameter.Credits)
            {
                coinMeckRole.Receive(credit, c);
            }

            foreach (var result in racks.Items.Zip(inParameter.States, (r, s) => Tuple.Create(r, s)))
            {
                itemRackRole.UpdateItemSelectionState(result.Item1, credit, pool);

                Assert.That(result.Item1.State, Is.EqualTo(result.Item2));
                Assert.That(itemRackRole.CanItemPurchase(result.Item1), Is.EqualTo(result.Item2 == ItemRackState.CanPurchase));
            }
        }
Пример #3
0
        public void _利用者がお金を投入する()
        {
            var role     = new CoinMeckRole();
            var received = new CashDeal();

            Assert.True(role.Receive(received, Money.Coin10));
            Assert.True(role.Receive(received, Money.Coin50));
            Assert.True(role.Receive(received, Money.Coin100));
            Assert.True(role.Receive(received, Money.Coin500));
            Assert.True(role.Receive(received, Money.Bill1000));
            Assert.False(role.Receive(received, Money.Coin1));
            Assert.False(role.Receive(received, Money.Coin5));
            Assert.False(role.Receive(received, Money.Bill2000));
            Assert.False(role.Receive(received, Money.Bill5000));
            Assert.False(role.Receive(received, Money.Bill10000));
            Assert.True(role.Receive(received, Money.Coin10));
            Assert.True(role.Receive(received, Money.Coin50));
            Assert.True(role.Receive(received, Money.Coin100));
            Assert.True(role.Receive(received, Money.Coin500));
            Assert.True(role.Receive(received, Money.Bill1000));
            Assert.False(role.Receive(received, Money.Coin1));
            Assert.False(role.Receive(received, Money.Coin5));
            Assert.False(role.Receive(received, Money.Bill2000));
            Assert.False(role.Receive(received, Money.Bill5000));
            Assert.False(role.Receive(received, Money.Bill10000));

            Assert.False(received.RecevedMoney.Contains(Money.Coin1));
            Assert.False(received.RecevedMoney.Contains(Money.Coin5));
            Assert.False(received.RecevedMoney.Contains(Money.Bill2000));
            Assert.False(received.RecevedMoney.Contains(Money.Bill5000));
            Assert.False(received.RecevedMoney.Contains(Money.Bill10000));

            Assert.That(received.ChangedAount, Is.EqualTo(3320));
        }
Пример #4
0
        public void _お金を入れず購入()
        {
            var role     = new CoinMeckRole();
            var received = new CashDeal();

            Assert.False(role.Purchase(received, 100));

            Assert.That(received.UsedAmount, Is.EqualTo(0));
        }
Пример #5
0
        public void _投入するお金の利用可不可を判定する()
        {
            var role = new CoinMeckRole();

            Assert.True(role.IsAvailableMoney(Money.Coin10), "10円は使用可能");
            Assert.True(role.IsAvailableMoney(Money.Coin50), "50円は使用可能");
            Assert.True(role.IsAvailableMoney(Money.Coin100), "100円は使用可能");
            Assert.True(role.IsAvailableMoney(Money.Coin500), "500円は使用可能");
            Assert.True(role.IsAvailableMoney(Money.Bill1000), "1000円は使用可能");

            Assert.False(role.IsAvailableMoney(Money.Coin1), "1円は使用不可");
            Assert.False(role.IsAvailableMoney(Money.Coin5), "5円は使用不可");
            Assert.False(role.IsAvailableMoney(Money.Bill2000), "2000円は使用不可");
            Assert.False(role.IsAvailableMoney(Money.Bill5000), "5000円は使用不可");
            Assert.False(role.IsAvailableMoney(Money.Bill10000), "10000円は使用不可");
        }
Пример #6
0
        public void _何も購入せずお金を排出する(Money inMoney, int inRepeat)
        {
            var role     = new CoinMeckRole();
            var received = new CashDeal();
            var pool     = TestHelper.InitInfinityReservedChange();

            for (var i = 0; i < inRepeat; ++i)
            {
                role.Receive(received, inMoney);
            }

            var changed = role.Eject(received, pool)
                          .GroupBy(m => m)
                          .ToDictionary(g => g.Key, g => g)
            ;

            Assert.That(received.RecevedMoney.Count, Is.EqualTo(0));

            Assert.That(changed.Count, Is.EqualTo(1));
            Assert.True(changed.ContainsKey(inMoney));
            Assert.That(changed[inMoney].Count(), Is.EqualTo(inRepeat));
        }
Пример #7
0
        public void _商品購入後お金を排出する(
            [ValueSource(typeof(_商品購入後お金を排出するParams), "Source")]
            _商品購入後お金を排出するParams.Parameter inParameter)
        {
            var role     = new CoinMeckRole();
            var received = new CashDeal();
            var pool     = TestHelper.InitInfinityReservedChange();

            foreach (var m in inParameter.ReceivedMoney)
            {
                for (var i = 0; i < m.Item2; ++i)
                {
                    role.Receive(received, m.Item1);
                }
            }

            Assert.True(role.Purchase(received, 100));

            var changed = role.Eject(received, pool)
                          .GroupBy(m => m)
                          .ToDictionary(g => g.Key, g => g)
            ;

            var lookup = inParameter.ChangedMoney.ToDictionary(m => m.Item1, m => m.Item2);

            Assert.That(received.RecevedMoney.Count, Is.EqualTo(0));

            Assert.That(received.UsedAmount, Is.EqualTo(100));

            Assert.That(changed.Count, Is.EqualTo(lookup.Count), "count money type (id = {0})", inParameter.Id);

            foreach (var pair in changed)
            {
                Assert.True(lookup.ContainsKey(pair.Key), "money ({0}) should be contained (id = {1})", pair.Key, inParameter.Id);
                Assert.That(pair.Value.Count(), Is.EqualTo(lookup[pair.Key]), "money ({0}) count should be equaled (id = {1})", pair.Key, inParameter.Id);
            }
        }