public async Task ReturnNewDictionaryIfDictionaryFieldIsNull()
        {
            var apiRequester = new Mock <IAPIRequester>();

            apiRequester.Setup(ar => ar.Request("https://api.exchangeratesapi.io/latest?base=USD&symbols=EUR,BGN,GBP,USD"))
            .ReturnsAsync("{\"date\": \"2018-12-07\",\"rates\": {\"BGN\": 1.7199894468,\"USD\": 1,},\"base\": \"USD\"}");

            var dateWrapper = new Mock <IDateWrapper>();

            var date = DateTime.UtcNow;

            dateWrapper.Setup(dw => dw.Now()).Returns(date);

            var sut = new CurrencyRateApiService(apiRequester.Object, dateWrapper.Object);

            Type sutType = typeof(CurrencyRateApiService);

            FieldInfo dateTimeField = sutType.GetField("lastUpdate", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

            dateTimeField.SetValue(sut, date.Subtract(TimeSpan.FromHours(25)));

            var result = await sut.GetRatesAsync();

            Assert.IsNotNull(result["USD"]);
            Assert.IsNotNull(result["BGN"]);

            Assert.AreEqual(1.7199894468, result["BGN"]);
            Assert.AreEqual(1, result["USD"]);
        }
        public async Task ReturnSavedRatesIfCacheNotExpired()
        {
            var apiRequester = new Mock <IAPIRequester>();

            var dateWrapper = new Mock <IDateWrapper>();

            var date = DateTime.UtcNow;

            dateWrapper.Setup(dw => dw.Now()).Returns(date);

            var dictionary = new ConcurrentDictionary <string, double>();

            dictionary["USD"] = 1;

            var sut = new CurrencyRateApiService(apiRequester.Object, dateWrapper.Object);

            Type sutType = typeof(CurrencyRateApiService);

            FieldInfo ratesField = sutType.GetField("rates", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

            ratesField.SetValue(sut, dictionary);

            FieldInfo dateTimeField = sutType.GetField("lastUpdate", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

            dateTimeField.SetValue(sut, date.AddHours(1));

            var result = await sut.GetRatesAsync();

            Assert.IsNotNull(result["USD"]);

            Assert.AreEqual(1, result["USD"]);
        }