Exemplo n.º 1
0
        public async Task BuyCurrency_BRLARSEachTwiceChangingDate_ShouldSucceed()
        {
            //Arrange
            var mockedRepository = new MockedExchangeRepository();
            var exchangeService  = new ExchangeService(_loggerExchangeService.Object, mockedRepository);
            var BuyOrder         = new BuyCurrencyOrder()
            {
                Amount = 7500, Currency = "BRL", UserId = "Mocked"
            };
            var BuyOrder2 = new BuyCurrencyOrder()
            {
                Amount = 20000, Currency = "USD", UserId = "Mocked"
            };
            //Act
            await exchangeService.BuyCurrency(BuyOrder);

            await exchangeService.BuyCurrency(BuyOrder2);

            //We set the transactions from the month before
            mockedRepository.TransactionsUser["Mocked"].ForEach(x => x.Date.AddDays(-31));

            //And then we try as if in this month the value is 0
            Func <Task> successfulBuy  = async() => { await exchangeService.BuyCurrency(BuyOrder); };
            Func <Task> successfulBuy2 = async() => { await exchangeService.BuyCurrency(BuyOrder2); };

            //Assert
            decimal usdAmountForMocked = await mockedRepository.GetCurrentSpentAmountByUser("Mocked", "USD");

            decimal brlAmountForMocked = await mockedRepository.GetCurrentSpentAmountByUser("Mocked", "BRL");

            usdAmountForMocked.Should().Be(200m);
            brlAmountForMocked.Should().Be(300m);
        }
Exemplo n.º 2
0
        public async Task BuyCurrency_BRL_ShouldSucceedAndThenThrow()
        {
            //Arrange
            var mockedRepository = new MockedExchangeRepository();
            var exchangeService  = new ExchangeService(_loggerExchangeService.Object, mockedRepository);
            var BuyOrder         = new BuyCurrencyOrder()
            {
                Amount = 7500, Currency = "BRL", UserId = "Mocked"
            };
            var BuyOrder2 = new BuyCurrencyOrder()
            {
                Amount = 1.01m, Currency = "BRL", UserId = "Mocked"
            };

            //Act
            Func <Task> successfulBuy = async() => { await exchangeService.BuyCurrency(BuyOrder); };
            Func <Task> exception     = async() => { await exchangeService.BuyCurrency(BuyOrder2); };

            //Assert
            await successfulBuy.Should().NotThrowAsync();

            await exception.Should().ThrowAsync <MonthlyLimitException>();

            decimal brlAmountForMocked = await mockedRepository.GetCurrentSpentAmountByUser("Mocked", "BRL");

            brlAmountForMocked.Should().Be(300m);
        }
Exemplo n.º 3
0
        public async Task BuyCurrency_BRLARS_ShouldSucceed()
        {
            //Arrange
            var mockedRepository = new MockedExchangeRepository();
            var exchangeService  = new ExchangeService(_loggerExchangeService.Object, mockedRepository);
            var BuyOrder         = new BuyCurrencyOrder()
            {
                Amount = 7500, Currency = "BRL", UserId = "Mocked"
            };
            var BuyOrder2 = new BuyCurrencyOrder()
            {
                Amount = 20000, Currency = "USD", UserId = "Mocked"
            };

            //Act
            Func <Task> successfulBuy  = async() => { await exchangeService.BuyCurrency(BuyOrder); };
            Func <Task> successfulBuy2 = async() => { await exchangeService.BuyCurrency(BuyOrder2); };


            //Assert
            await successfulBuy.Should().NotThrowAsync();

            await successfulBuy2.Should().NotThrowAsync();

            decimal usdAmountForMocked = await mockedRepository.GetCurrentSpentAmountByUser("Mocked", "USD");

            decimal brlAmountForMocked = await mockedRepository.GetCurrentSpentAmountByUser("Mocked", "BRL");

            usdAmountForMocked.Should().Be(200m);
            brlAmountForMocked.Should().Be(300m);
        }
Exemplo n.º 4
0
        public async Task GetExchangeRateByISOCodeAsync_ARS_ThrowInvalidCurrencyException()
        {
            //Arrange
            var mockedRepository = new MockedExchangeRepository();
            var exchangeService  = new ExchangeService(_loggerExchangeService.Object, mockedRepository);

            //Act
            Func <Task> invalidResult = async() => { await exchangeService.GetExchangeRateByISOCodeAsync("ARS"); };

            //Assert
            await invalidResult.Should().ThrowAsync <InvalidCurrencyException>();
        }
Exemplo n.º 5
0
        public async Task BuyCurrency_ARS_ThrowInvalidCurrencyException()
        {
            //Arrange
            var mockedRepository = new MockedExchangeRepository();
            var exchangeService  = new ExchangeService(_loggerExchangeService.Object, mockedRepository);
            var BuyOrder         = new BuyCurrencyOrder()
            {
                Amount = 100, Currency = "ARS", UserId = "Mocked"
            };

            //Act
            Func <Task> invalidResult = async() => { await exchangeService.BuyCurrency(BuyOrder); };

            //Assert
            await invalidResult.Should().ThrowAsync <InvalidCurrencyException>();
        }
Exemplo n.º 6
0
        public void Validation_InvalidISOAmountChars_CausesModelInvalid()
        {
            //Arrange
            var mockedRepository = new MockedExchangeRepository();
            var exchangeService  = new ExchangeService(_loggerExchangeService.Object, mockedRepository);
            var BuyOrder         = new BuyCurrencyOrder()
            {
                Amount = 100, Currency = "USDD", UserId = "User"
            };

            var validationContext = new ValidationContext(BuyOrder, null, null);
            var validationResults = new List <ValidationResult>();

            ////Act
            Validator.TryValidateObject(BuyOrder, validationContext, validationResults, true);

            //Assert
            validationResults.Count.Should().Be(1);
        }
Exemplo n.º 7
0
        public async Task BuyCurrency_USD_ShouldSucceedAndThenThrow()
        {
            //Arrange
            var mockedRepository = new MockedExchangeRepository();
            var exchangeService  = new ExchangeService(_loggerExchangeService.Object, mockedRepository);
            var BuyOrder         = new BuyCurrencyOrder()
            {
                Amount = 20000, Currency = "USD", UserId = "Mocked"
            };
            var BuyOrder2 = new BuyCurrencyOrder()
            {
                Amount = 1.01m, Currency = "USD", UserId = "Mocked"
            };

            //Act
            Func <Task> successfulBuy = async() => { await exchangeService.BuyCurrency(BuyOrder); };
            Func <Task> exception     = async() => { await exchangeService.BuyCurrency(BuyOrder2); };

            //Assert
            await successfulBuy.Should().NotThrowAsync();

            await exception.Should().ThrowAsync <MonthlyLimitException>();
        }