Пример #1
0
        public async Task available_funds_self_referential()
        {
            IBettingShop <string> bettingShop = null !;

            // ReSharper disable once AccessToModifiedClosure
            bettingShop = new DefaultBettingShop <string>(
                user => Task.FromResult(100 - bettingShop.GetBetsForUser(user).Sum(kvp => kvp.Value)));

            PlaceBetFailure?failure1 = await bettingShop.PlaceBet("user", Side.Blue, 101);

            Assert.IsInstanceOf <PlaceBetFailure.InsufficientFunds>(failure1);
            Assert.AreEqual(100, (failure1 as PlaceBetFailure.InsufficientFunds)?.AvailableMoney);

            Assert.Null(await bettingShop.PlaceBet("user", Side.Blue, 99));
            // already bet amount must be incorporated into available money, since the bet gets replaced
            Assert.Null(await bettingShop.PlaceBet("user", Side.Blue, 100));

            PlaceBetFailure?failure2 = await bettingShop.PlaceBet("user", Side.Blue, 101);

            Assert.IsInstanceOf <PlaceBetFailure.InsufficientFunds>(failure2);
            Assert.AreEqual(100, (failure2 as PlaceBetFailure.InsufficientFunds)?.AvailableMoney);
        }
Пример #2
0
 public BettingPeriod(IBank <T> bank, IBettingShop <T> bettingShop)
 {
     _bank       = bank;
     BettingShop = bettingShop;
 }