public async Task SaveDataFeed() { var mapper = new DataFeedMapper(); var configuration = new Mock <IDataFeedRepositoryConfiguration>(); configuration.Setup(c => c.StorageFolderPath).Returns(storageFolderPath); var repository = new DataFeedRepository(configuration.Object, mapper); var dataFeed = new DataFeed() { Base = "EUR", Success = true, Timestamp = 1541819346, Rates = new Dictionary <string, decimal>() { { "ETB", 31.813406m }, { "EUR", 1m }, { "GBP", 0.873592m } } }; await repository.SaveAsync(dataFeed); var fileName = Directory.GetFiles(storageFolderPath).FirstOrDefault(f => f.EndsWith("ExchangeRate_20181110140906.json")); Assert.IsNotNull(fileName); Assert.IsTrue(new FileInfo(fileName).Length > 0, "File size is zero"); }
public async Task DownloadNewDataFeed() { var text = TestHelper.GetEmbeddedResourceAsString("TestFiles.DataFeedSmall.json"); var configuration = new DataFeedManagerConfiguration() { ServiceUrl = @"http://data.fixer.io/api/latest?access_key=c2510f9a89d59e5f17e511157b0bcb41", StorageFolderPath = Path.Combine(Path.GetTempPath(), "ExchangeRates") }; var mapper = new DataFeedMapper(); var repository = new Mock <IDataFeedRepository>(MockBehavior.Strict); repository.Setup(r => r.SaveAsync(It.IsAny <DataFeed>())).Callback((DataFeed dataFeed) => { Assert.AreEqual(1541812746, dataFeed.Timestamp); }).Returns(Task.Delay(1)); var service = new DataFeedService(repository.Object); var downloadClient = new Mock <IDownloadClient>(MockBehavior.Strict); downloadClient.Setup(c => c.DownloadAsync(configuration.ServiceUrl)).ReturnsAsync(text); var manager = new DataFeedManager(configuration, downloadClient.Object, mapper, service); await manager.DownloadAsync(); }
public void MapJsonToFullDataFeed() { var text = TestHelper.GetEmbeddedResourceAsString("TestFiles.DataFeed.json"); var mapper = new DataFeedMapper(); var dataFeed = mapper.Map(text); Assert.AreEqual(168, dataFeed.Rates.Keys.Count); }
public async Task DownloadNewDataFeed() { await new Startup().RunAsync(); var mapper = new DataFeedMapper(); var configuration = new Mock <IDataFeedRepositoryConfiguration>(); configuration.Setup(c => c.StorageFolderPath).Returns(Path.Combine(Path.GetTempPath(), "ExchangeRates")); var repository = new DataFeedRepository(configuration.Object, mapper); var dataFeed = await repository.LoadAsync(); Assert.IsNotNull(dataFeed, "Should load DataFeed"); }
public void MapJsonToDataFeed() { var text = TestHelper.GetEmbeddedResourceAsString("TestFiles.DataFeedSmall.json"); var mapper = new DataFeedMapper(); var dataFeed = mapper.Map(text); Assert.IsTrue(dataFeed.Success, "Status"); Assert.AreEqual("EUR", dataFeed.Base); Assert.AreEqual(new DateTime(2018, 11, 10, 12, 19, 06), dataFeed.GetDataFeedDateTime()); Assert.AreEqual(3, dataFeed.Rates.Count); Assert.AreEqual("ETB", dataFeed.Rates.Keys.First()); Assert.AreEqual(31.813406m, dataFeed.Rates[dataFeed.Rates.Keys.First()]); }
public async Task RunAsync() { var configuration = new DataFeedManagerConfiguration() { ServiceUrl = @"http://data.fixer.io/api/latest?access_key=c2510f9a89d59e5f17e511157b0bcb41", StorageFolderPath = Path.Combine(Path.GetTempPath(), "ExchangeRates") }; var mapper = new DataFeedMapper(); var repository = new DataFeedRepository(configuration, mapper); var service = new DataFeedService(repository); using (var httpClient = new HttpClient()) { var downloadClient = new HttpDownloadClient(httpClient); var manager = new DataFeedManager(configuration, downloadClient, mapper, service); await manager.DownloadAsync(); } }
public async Task ReadLatestDataFeed() { var mapper = new DataFeedMapper(); var configuration = new Mock <IDataFeedRepositoryConfiguration>(); configuration.Setup(c => c.StorageFolderPath).Returns(storageFolderPath); var repository = new DataFeedRepository(configuration.Object, mapper); var dataFeed1 = new DataFeed() { Base = "EUR", Success = true, Timestamp = 1541819346, Rates = new Dictionary <string, decimal>() { { "ETB", 31.813406m }, { "EUR", 1m }, { "GBP", 0.873592m } } }; await repository.SaveAsync(dataFeed1); var dataFeed2 = new DataFeed() { Base = "EUR", Success = true, Timestamp = 1541819446, Rates = new Dictionary <string, decimal>() { { "ETB", 31.813406m }, { "EUR", 1m }, { "GBP", 0.873592m } } }; await repository.SaveAsync(dataFeed2); var dataFeed = await repository.LoadAsync(); Assert.AreEqual(dataFeed2.Timestamp, dataFeed.Timestamp, "Should load latest DataFeed"); }