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);
        }
Exemple #7
0
        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);
            }
        }
Exemple #10
0
        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);
        }