public async Task WhenCacheDoesNotContainItem_ThenAccessIsInvoked() { var expectedRequest = new ExchangeRatesRequest("BASE", DateTime.UtcNow); var accessMock = new Mock <IExchangeRatesAccess>(); ExchangeRatesRequest actualRequest = null; accessMock.Setup(m => m.GetRates(It.IsAny <ExchangeRatesRequest>())) .Callback <ExchangeRatesRequest>(request => actualRequest = request) .ReturnsAsync(new ExchangeRatesResponse( expectedRequest.BaseCurrency, expectedRequest.Date, new Dictionary <string, decimal>())); var cachingAccess = new CachingExchangeRatesAccess(new MemoryCache("rates"), accessMock.Object); await cachingAccess.GetRates(expectedRequest); actualRequest.Should().BeEquivalentTo(expectedRequest); }
public async Task WhenLatestRatesAreRetrieved_ThenAccessDefaultRequestIsUsed() { var expectedRequest = new ExchangeRatesRequest("DEFAULTBase", DateTime.MaxValue); var accessMock = new Mock <IExchangeRatesAccess>(); accessMock.SetupGet(m => m.DefaultRequest).Returns(expectedRequest); ExchangeRatesRequest actualRequest = null; accessMock.Setup(m => m.GetRates(It.IsAny <ExchangeRatesRequest>())) .Callback <ExchangeRatesRequest>(request => actualRequest = request) .ReturnsAsync(new ExchangeRatesResponse( "blah", DateTime.UtcNow, new Dictionary <string, decimal>())); var manager = new ExchangeRatesManager(accessMock.Object, Mock.Of <IExchangeRatesEngine>()); await manager.GetLatestRates(); actualRequest.Should().Be(expectedRequest); }