public void WhenCalculateSeriesWithNoFillups_ThenReturnsEmptySeries() { var fillUps = new ReadOnlyCollection <FillupEntry>(new List <FillupEntry>()); int userId = 1; var vehicles = new[] { new Vehicle { VehicleId = 1, Fillups = fillUps }, new Vehicle { VehicleId = 2, Fillups = fillUps }, new Vehicle { VehicleId = 3, Fillups = fillUps } }; _vehicleRepo .Setup(r => r.GetVehicles(userId)) .Returns(vehicles); var target = new ChartDataService(_vehicleRepo.Object); StatisticSeries actual = target.CalculateSeriesForUser(userId, null, null); Assert.NotNull(actual); // 3 vehicles * 0 months Assert.Equal(0, actual.Entries.Count); }
public JsonResult JsonGetVehicleStatisticSeries(int id) { StatisticSeries chartData = chartDataService.CalculateSeriesForVehicle(CurrentUserId, id, DateTime.UtcNow.AddMonths(-12), null); return(Json(chartData)); }
public void WhenJsonGetFleetStatisticSeries_ThenReturnsJsonData() { var user = new User { UserId = 1, AuthorizationId = "AuthorizationId", DisplayName = "DisplayName" }; userServicesMock.Setup(r => r.GetUserByClaimedIdentifier(It.IsAny <string>())).Returns(user); var target = new HomeController( userServicesMock.Object, chartDataServiceMock.Object); target.SetFakeControllerContext(); target.SetUserIdentity(new MileageStatsIdentity(this.user.AuthorizationId, this.user.DisplayName, this.user.UserId)); var series = new StatisticSeries(); chartDataServiceMock.Setup(x => x.CalculateSeriesForUser(user.UserId, null, null)).Returns( series); ActionResult actual = target.JsonGetFleetStatisticSeries(); var actualJsonResult = actual as JsonResult; Assert.NotNull(actualJsonResult); Assert.Same(series, actualJsonResult.Data); }
public StatisticSeries CalculateSeriesForVehicle(int userId, int vehicleId, DateTime?startDate, DateTime?endDate) { var series = new StatisticSeries(); CalculateSeriesForVehicle(userId, vehicleId, series, startDate, endDate); return(series); }
private byte[] GetChartBytes(int userId, Func <StatisticSeriesEntry, double> yValueAccessor, string chartTitle, ChartFormModel chartFormModel) { Debug.Assert(yValueAccessor != null); int chartWidth = DESKTOP_CHART_WIDTH; int chartHeight = DESKTOP_CHART_HEIGHT; StatisticSeries seriesData = new StatisticSeries(); if (Request.Browser.IsMobileDevice) { chartWidth = Math.Min(Request.Browser.ScreenPixelsWidth, MOBILE_CHART_MAXWIDTH); foreach (var vehicleId in chartFormModel.VehicleIds) { var seriesDataForVehicle = this.chartDataService.CalculateSeriesForVehicle(userId, vehicleId, chartFormModel.StartDate, chartFormModel.EndDate); foreach (StatisticSeriesEntry statisticSeriesEntry in seriesDataForVehicle.Entries) { seriesData.Entries.Add(statisticSeriesEntry); } } } else { seriesData = this.chartDataService.CalculateSeriesForUser(userId, DateTime.UtcNow.AddMonths(-12), null); } var selectedVehicleColors = new List <string>(); if (chartFormModel.Positions == null) { selectedVehicleColors.Add(colors[0]); } else { foreach (var position in chartFormModel.Positions) { selectedVehicleColors.Add(colors[position]); } } var themeColors = string.Join(";", selectedVehicleColors); var theme = string.Format(CHARTS_THEME, themeColors); var myChart = GetChartInstance(chartWidth, chartHeight, theme); if (!Request.Browser.IsMobileDevice) { myChart.AddTitle(chartTitle).AddLegend(); } if (PlotMultipleChartLine(myChart, seriesData.Entries, yValueAccessor)) { return(myChart.GetBytes("jpeg")); } return(null); }
public StatisticSeries CalculateSeriesForUser(int userId, DateTime?startDate, DateTime?endDate) { var vehicles = _vehicleRepository.GetVehicles(userId); var series = new StatisticSeries(); foreach (var vehicle in vehicles) { CalculateSeriesForVehicle(vehicle, series, startDate, endDate); } return(series); }
public void WhenJsonGetFleetStatisticSeries_ThenReturnsJsonData() { var controller = GetTestableDashboardController(); var series = new StatisticSeries(); this.chartDataService.Setup(x => x.CalculateSeriesForUser(defaultUserInfo.UserId, null, null)).Returns( series); ActionResult actual = controller.JsonGetFleetStatisticSeries(); var actualJsonResult = actual as JsonResult; Assert.NotNull(actualJsonResult); Assert.Same(series, actualJsonResult.Data); }
private byte[] GetVehicleChartBytes(int userId, int vehicleId, Func <StatisticSeriesEntry, double> yValueAccessor) { Debug.Assert(yValueAccessor != null); StatisticSeries seriesData = chartDataService.CalculateSeriesForVehicle(userId, vehicleId, DateTime.UtcNow.AddMonths(-12), null); var myChart = new Chart(width: 250, height: 120); if (ChartController.PlotSingleChartLine(myChart, seriesData.Entries, yValueAccessor)) { return(myChart.GetBytes("jpeg")); } else { return(null); } }
private void CalculateSeriesForVehicle(Vehicle vehicle, StatisticSeries series, DateTime?startDate, DateTime?endDate) { Debug.Assert(series != null); DateTime startFilterDate = startDate ?? DateTime.MinValue; DateTime endFilterDate = endDate ?? DateTime.UtcNow; var fillUps = _fillupRepository.GetFillups(vehicle.VehicleId); var fillupGroups = from fillUp in fillUps where ((fillUp.Date >= startFilterDate) && (fillUp.Date <= endFilterDate)) group fillUp by new { Year = fillUp.Date.Year, Month = fillUp.Date.Month } into g orderby g.Key.Year, g.Key.Month select g; var firstFillUp = fillUps.OrderBy(x => x.Date).FirstOrDefault(); VehicleStatisticsModel statistics; foreach (var fillupGroup in fillupGroups) { var includeFirstFillup = (fillupGroup.Key.Year != firstFillUp.Date.Year) || (fillupGroup.Key.Month != firstFillUp.Date.Month); statistics = CalculateStatistics.Calculate(fillupGroup, includeFirstFillup); Debug.Assert(firstFillUp != null); var seriesEntry = new StatisticSeriesEntry { Id = vehicle.VehicleId, Name = vehicle.Name, Year = fillupGroup.Key.Year, Month = fillupGroup.Key.Month, AverageFuelEfficiency = Math.Round(statistics.AverageFuelEfficiency, 2), TotalCost = Math.Round(statistics.TotalCost, 2), TotalDistance = statistics.TotalDistance, }; series.Entries.Add(seriesEntry); } }
public void WhenRequestingChartImageForTotalCostInMobile_ThenChartImageIsReturned() { var browserCapabilities = new Mock <HttpBrowserCapabilitiesBase>(); browserCapabilities.SetupGet(b => b.IsMobileDevice).Returns(true); var controller = GetTestableChartController(); controller.Request.SetHttpBrowserCapabilities(browserCapabilities.Object); var data = new StatisticSeries(); data.Entries.Add(new StatisticSeriesEntry { AverageFuelEfficiency = 10, Month = 12, Name = "test", TotalCost = 20, TotalDistance = 30, Year = 2012 }); this._chartDataService.Setup(d => d.CalculateSeriesForVehicle(_defaultUser.UserId, 1, It.IsAny <DateTime>(), It.IsAny <DateTime>())).Returns(data); var result = controller.GetChartImage(new ChartFormModel { UserId = _defaultUser.UserId, VehicleIds = new int[] { 1 }, ChartName = "TotalCost", StartDate = DateTime.Now.Subtract(TimeSpan.FromHours(5)), EndDate = DateTime.Now }); Assert.IsType <FileContentResult>(result); }
private void CalculateSeriesForVehicle(int userId, int vehicleId, StatisticSeries series, DateTime?startDate, DateTime?endDate) { var vehicle = _vehicleRepository.GetVehicle(userId, vehicleId); CalculateSeriesForVehicle(vehicle, series, startDate, endDate); }