public void CashedResultWeatherViewDataSourceGetWeatherDataProvidersFirstTest()
        {
            var weatherDataProviders =  new[] {new Mock<IDataProviderInfo>().Object};
            var mockSource = new Mock<IWeatherViewDataSource>();
            mockSource.Setup(t => t.GetWeatherDataProviders()).Returns(weatherDataProviders);

            var provider = new CashedResultWeatherViewDataSource(mockSource.Object, 1);
            provider.ClearCash();
            var providers = provider.GetWeatherDataProviders();

            mockSource.Verify(t=>t.GetWeatherDataProviders(),Times.Once);
            Assert.AreEqual(weatherDataProviders, providers);
        }
        public void CashedResultWeatherViewDataSourceGetWeatherInfoCashTest()
        {
            const string testName = "testName";
            var resultWeatherInfo = new Mock<ICityWeatherInfo>();
            var mockSource = new Mock<IWeatherViewDataSource>();
            mockSource.Setup(t => t.GetWeatherInfo(It.IsAny<string>())).Returns(resultWeatherInfo.Object);

            var provider = new CashedResultWeatherViewDataSource(mockSource.Object, 1);
            provider.ClearCash();
            var weatherInfo1 = provider.GetWeatherInfo(testName);
            var weatherInfo2 = provider.GetWeatherInfo(testName);

            mockSource.Verify(t => t.GetWeatherInfo(It.Is<string>(k=>k== testName)), Times.Once);
            Assert.AreEqual(resultWeatherInfo.Object, weatherInfo1);
            Assert.AreEqual(resultWeatherInfo.Object, weatherInfo2);
        }
        public void CashedResultWeatherViewDataSourceGetWeatherInfoNotCashTest()
        {
            const string testName = "testName";
            var resultWeatherInfo = new Mock<ICityWeatherInfo>();
            var mockSource = new Mock<IWeatherViewDataSource>();
            mockSource.Setup(t => t.GetWeatherInfo(It.IsAny<string>())).Returns(resultWeatherInfo.Object);
            var timeProvider = new FakeTimeProvider(DateTime.Now);
            TimeProvider.Current = timeProvider;

            var provider = new CashedResultWeatherViewDataSource(mockSource.Object, 100);
            provider.ClearCash();
            provider.GetWeatherInfo(testName);
            timeProvider.SetTime(timeProvider.UtcNow.AddSeconds(101));
            provider.GetWeatherInfo(testName);

            mockSource.Verify(t => t.GetWeatherInfo(It.Is<string>(k=>k== testName)), Times.Exactly(2));
        }