Beispiel #1
0
        public void VirtualCard_Updates_Balance_In_ThreadSafe()
        {
            //arrange
            var pin     = 1234;
            var balance = 100M;
            var vc      = new VirtualCard(pin, balance);

            var taskList = new List <Task>();

            //act
            taskList.Add(Task.Run(async() =>
            {
                await Task.Delay(99);
                await vc.WithdrawMoney(pin, 20);
            }));

            taskList.Add(Task.Run(async() =>
            {
                await Task.Delay(150);
                await vc.WithdrawMoney(pin, 10);
            }));

            taskList.Add(Task.Run(async() =>
            {
                await Task.Delay(33);
                await vc.AddMoney(10);
            }));

            taskList.Add(Task.Run(async() =>
            {
                await Task.Delay(77);
                await vc.AddMoney(10);
            }));

            Task.WaitAll(taskList.ToArray());
            var result = vc.Balance;

            //assert
            Assert.AreEqual(90, result);
        }
Beispiel #2
0
        public void VirtualCard_Can_TopBalance()
        {
            //arrange
            var balance   = 100M;
            var topup_amt = 10M;
            var vc        = new VirtualCard(0, balance);

            //act
            vc.AddMoney(topup_amt).Wait(new TimeSpan(0, 0, 0, 1));
            var result = vc.Balance;

            //assert
            Assert.AreEqual(balance + topup_amt, result);
        }