Example #1
0
        public async Task Convert_WithReciprocalConversion_ReturnsExpectedResult()
        {
            var converter = new CurrencyConverterService(this._apiRepository, this._logger);
            var Moneys    = new List <Money> {
                new Money(100, "CNY")
            };
            var targetCurrency = new Currency("GBP");
            var targetDate     = new DateTime(2018, 01, 01);
            var cnyRate        = new ExchangeRateDto
            {
                DateTime         = targetDate,
                FixedCurrency    = "GBP",
                VariableCurrency = "CNY",
                Name             = "Pound Sterling",
                Rate             = 10
            };

            var rates = new Dictionary <DateTime, IReadOnlyCollection <ExchangeRateDto> >
            {
                { targetDate, new[] { cnyRate } }
            };

            A.CallTo(() => this._apiRepository.GetAsync(targetDate, targetDate)).Returns(rates);

            var conversion = await converter.Convert(Moneys, targetCurrency, targetDate, this._ruleCtx);

            Assert.IsNotNull(conversion);
            Assert.AreEqual(conversion.Value.Value, 10);
            Assert.AreEqual(conversion.Value.Currency.Code, "GBP");
            A.CallTo(() => this._apiRepository.GetAsync(targetDate, targetDate)).MustHaveHappenedOnceExactly();
        }
Example #2
0
        public async Task Convert_NullMoneys_ReturnsNotNull()
        {
            var converter = new CurrencyConverterService(this._apiRepository, this._logger);

            var result = await converter.Convert(null, this._currency, this._conversionTime, this._ruleCtx);

            Assert.IsNotNull(result);
        }
Example #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="args"></param>

        static void Main(string[] args)
        {
            if (args.Length == 1)
            {
                try
                {
                    Data data            = FileReaderService.ExtractData(args[0]);
                    uint amountConverted = CurrencyConverterService.Convert(data);
                    Console.Write(amountConverted);
                }
                catch (IOException e)
                {
                    Console.WriteLine(e.Message);
                    Console.WriteLine("An error has occured during the file reading !");
                }
                catch (DataFormatException e)
                {
                    Console.WriteLine(e.Message);
                    List <string> log = new List <string>
                    {
                        "Invalid data format !",
                        "",
                        "Reminder of the correct format :",
                        "",
                        "XXX;M;YYY",
                        "N",
                        "AAA;BBB;T.TTTT",
                        "CCC;DDD;U.UUUU",
                        "EEE;FFF;V.VVVV",
                        "... N times"
                    };

                    Console.WriteLine(string.Join("\n", log.ToArray()));
                }
                catch (AlgorithmException e)
                {
                    Console.WriteLine(e.Message);
                    Console.WriteLine("An error has occured during the dijkstra algorithm !");
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    Console.WriteLine("Uncaught error !");
                }
            }
            else if (args.Length > 1)
            {
                Console.WriteLine("Multiple files names !");
            }
            else
            {
                Console.WriteLine("File name missed !");
            }

            Console.ReadLine();
        }
Example #4
0
        public async Task Convert_NullRatesResult_ReturnsNull()
        {
            var converter = new CurrencyConverterService(this._apiRepository, this._logger);
            var Moneys    = new List <Money> {
                new Money(100, "CNY")
            };
            var targetCurrency = new Currency("GBP");
            var targetDate     = new DateTime(2018, 01, 01);

            var conversion = await converter.Convert(Moneys, targetCurrency, targetDate, this._ruleCtx);

            Assert.IsNull(conversion);
            A.CallTo(() => this._apiRepository.GetAsync(targetDate, targetDate)).MustHaveHappened();
        }
Example #5
0
        public async Task Convert_InSameCurrencyAsTarget_DoesNotCallExchangeRateApi()
        {
            var converter = new CurrencyConverterService(this._apiRepository, this._logger);
            var Moneys    = new List <Money> {
                new Money(10, "CNY")
            };
            var targetCurrency = new Currency("CNY");

            var conversion = await converter.Convert(Moneys, targetCurrency, DateTime.UtcNow, this._ruleCtx);

            Assert.AreEqual(conversion.Value.Value, 10);
            Assert.AreEqual(conversion.Value.Currency.Code, "CNY");

            A.CallTo(() => this._apiRepository.GetAsync(A <DateTime> .Ignored, A <DateTime> .Ignored)).MustNotHaveHappened();
        }
Example #6
0
        public async Task Convert_EmptyRatesResult_ReturnsNull()
        {
            var converter = new CurrencyConverterService(this._apiRepository, this._logger);
            var Moneys    = new List <Money> {
                new Money(100, "CNY")
            };
            var targetCurrency = new Currency("GBP");
            var targetDate     = new DateTime(2018, 01, 01);

            A.CallTo(() => this._apiRepository.GetAsync(targetDate, targetDate))
            .Returns(new Dictionary <DateTime, IReadOnlyCollection <ExchangeRateDto> >());

            var conversion = await converter.Convert(Moneys, targetCurrency, targetDate, this._ruleCtx);

            Assert.IsNull(conversion);
            A.CallTo(() => this._apiRepository.GetAsync(targetDate, targetDate)).MustHaveHappenedOnceExactly();
        }
Example #7
0
        public async Task Convert_WithIndirectConversionRateSetOneRates_ReturnsExpectedResult(
            decimal rate1,
            decimal rate2,
            decimal expected)
        {
            var converter = new CurrencyConverterService(this._apiRepository, this._logger);
            var Moneys    = new List <Money> {
                new Money(100, "CNY")
            };
            var targetCurrency = new Currency("EUR");
            var targetDate     = new DateTime(2018, 01, 01);
            var cnyRate        = new ExchangeRateDto
            {
                DateTime         = targetDate,
                FixedCurrency    = "CNY",
                VariableCurrency = "USD",
                Name             = "Thaler",
                Rate             = (double)rate1
            };
            var eurRate = new ExchangeRateDto
            {
                DateTime         = targetDate,
                FixedCurrency    = "EUR",
                VariableCurrency = "USD",
                Name             = "Thaler",
                Rate             = (double)rate2
            };

            var rates = new Dictionary <DateTime, IReadOnlyCollection <ExchangeRateDto> >
            {
                { targetDate, new[] { cnyRate, eurRate } }
            };

            A.CallTo(() => this._apiRepository.GetAsync(targetDate, targetDate)).Returns(rates);

            var conversion = await converter.Convert(Moneys, targetCurrency, targetDate, this._ruleCtx);

            Assert.IsNotNull(conversion);
            Assert.AreEqual(conversion.Value.Value, expected);
            Assert.AreEqual(conversion.Value.Currency.Code, "EUR");
            A.CallTo(() => this._apiRepository.GetAsync(targetDate, targetDate)).MustHaveHappenedOnceExactly();
        }