public async Task GetFetchesFromApi() { var repo = new ExchangeRateApiCachingDecorator(this.exchangeRates); var start = new DateTime(2018, 1, 1); var end = new DateTime(2018, 1, 2); await repo.GetAsync(start, end); A.CallTo(() => this.exchangeRates.GetAsync(start, end)).MustHaveHappenedOnceExactly(); }
public async Task GetFetchesFromApiTwiceWithCachingExpiring() { var repo = new ExchangeRateApiCachingDecorator(this.exchangeRates) { Expiry = TimeSpan.Zero }; var start = new DateTime(2018, 1, 1); var end = new DateTime(2018, 1, 2); await repo.GetAsync(start, end); await repo.GetAsync(start, end); A.CallTo(() => this.exchangeRates.GetAsync(start, end)).MustHaveHappenedTwiceExactly(); }
public async Task GetFetchesFromApiTwiceWithSameDateButDifferentTimes() { var repo = new ExchangeRateApiCachingDecorator(this.exchangeRates); var start = new DateTime(2018, 1, 1); var end = new DateTime(2018, 1, 2); await repo.GetAsync(start, end); await repo.GetAsync(start.AddMinutes(5), end.AddMinutes(5)); A.CallTo(() => this.exchangeRates.GetAsync(start, end)).MustHaveHappenedOnceExactly(); }
public async Task WeightedExchangeRate_Returns_ExpectedResult() { var clientFactory = new HttpClientFactory(new NullLogger <HttpClientFactory>()); var repo = new ExchangeRateApi(this._configuration, clientFactory, this._policyFactory, this._logger); var repoDecorator = new ExchangeRateApiCachingDecorator(repo); var exchangeRates = new ExchangeRatesService(repoDecorator, this._loggerExchRate); var calculator = new TradePositionWeightedAverageExchangeRateService(exchangeRates, this._calculatorLogger); var tradeOne = new Order().Random(); var tradeTwo = new Order().Random(); var tradeThree = new Order().Random(); tradeOne.FilledDate = new DateTime(2017, 01, 01); tradeTwo.FilledDate = new DateTime(2017, 10, 25); tradeThree.FilledDate = new DateTime(2017, 10, 25); var position = new TradePosition(new List <Order> { tradeOne, tradeTwo, tradeThree }); var usd = new Currency("usd"); var wer = await calculator.WeightedExchangeRate(position, usd, this._ruleCtx); }