public async Task <IActionResult> Stats([FromBody] GetStatsQuery query) { var request = Utility.Utility.GetStatsRequestFromQuery(query); if (request == null || !request.Dates.Any()) { return(BadRequest(new ErrorResponse(new ErrorModel { Message = "Invalid request parameters" }))); } Statistics stats = await _currExService.GetStatsAsync(request); string verdict = "No exchange rate information available for the given dates."; if (stats == null) { return(BadRequest(new ErrorResponse(new ErrorModel { Message = "Sorry, unable to process your request at the moment." + "Please contact your administrator." }))); } else if (stats.Min == 0 && stats.Max == 0) { return(Ok(verdict)); } verdict = $"A min rate of {stats.Min} on {stats.MinDate.ToShortDateString()} \n" + $"A max rate of {stats.Max} on {stats.MaxDate.ToShortDateString()} \n" + $"An average rate of {stats.Avg}"; return(Ok(verdict)); }
public async Task <List <StatsDto> > Handle(GetStatsQuery request, CancellationToken cancellationToken) => await(from v in _context.Visits where v.VisitDate > DateTime.UtcNow.AddDays(-request.Days) join p in _context.Places on v.PlaceId equals p.PlaceId into place from pp in place.DefaultIfEmpty() group v by new { pp.PlaceId, pp.Name, pp.Address, pp.Description } into visits select new StatsDto(visits.Key.PlaceId, visits.Count(), visits.Key.Name, visits.Key.Address, visits.Key.Description)) .ToListAsync();
public async void Stats(int mutants, int humans, decimal expectedRatio) { GetStatsQuery StatsQuery = new GetStatsQuery(); Stats statMocked = new Stats() { count_mutant_dna = mutants, count_human_dna = humans }; _repository.Setup(x => x.GetStatsAsync()).ReturnsAsync(statMocked).Verifiable(); var result = await _sut.Handle(StatsQuery, new System.Threading.CancellationToken()); Assert.Equal(expectedRatio, result.ratio); _repository.VerifyAll(); }
public async void CheckStatsException() { string expected = "500"; GetStatsQuery getquery = new GetStatsQuery(); StatsView statitics = new StatsView(1, 1); _mediator .Setup(m => m.Send(It.IsAny <GetStatsQuery>(), It.IsAny <CancellationToken>())) .Throws(new Exception()).Verifiable(); var result = await _sut.GetStats(); IStatusCodeActionResult statusCodeResult = result.Result as IStatusCodeActionResult; Assert.Equal(expected, statusCodeResult.StatusCode.ToString()); _mediator.VerifyAll(); }
public async void CheckStats() { string expected = "200"; GetStatsQuery getquery = new GetStatsQuery(); StatsView statitics = new StatsView(1, 1); _mediator .Setup(m => m.Send(It.IsAny <GetStatsQuery>(), It.IsAny <CancellationToken>())) .ReturnsAsync(statitics).Verifiable(); ActionResult <StatsView> actionResult = await _sut.GetStats(); var result = actionResult.Result as OkObjectResult; Assert.Equal(expected, result.StatusCode.ToString()); _mediator.VerifyAll(); }
/// <summary> /// Convert the statistics query into a statistics request object. /// Validate the parts of the query. /// </summary> /// <param name="query"></param> /// <returns>A valid statistics request object</returns> public static GetStatsRequest GetStatsRequestFromQuery(GetStatsQuery query) { GetStatsRequest result = null; var currencyLength = query.CurrencyTypes.Trim().Length; if (query != null && (currencyLength == 8) && (query.CurrencyTypes.Contains("->"))) { if (query.Dates != null && query.Dates.Length >= 8) { var allValidDates = ValidateDates(query.Dates.Split(',').ToList()); result = new GetStatsRequest(); result.CurrencyConversion = query.CurrencyTypes.ToUpperInvariant(); result.Dates = allValidDates; } } return(result); }