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 void WhenCalculateSeriesForUser_ThenReturnsSeries()
        {
            DateTime today = DateTime.UtcNow.Date;

            const int userId = 1;

            var vehicles = new[]
            {
                new Vehicle {
                    VehicleId = 1
                },
                new Vehicle {
                    VehicleId = 2
                },
                new Vehicle {
                    VehicleId = 3
                }
            };

            _vehicleRepo
            .Setup(r => r.GetVehicles(userId))
            .Returns(vehicles);

            _fillupRepo
            .Setup(r => r.GetFillups(1))
            .Returns(CreateFillups(today, 1));
            _fillupRepo
            .Setup(r => r.GetFillups(2))
            .Returns(CreateFillups(today, 2));
            _fillupRepo
            .Setup(r => r.GetFillups(3))
            .Returns(CreateFillups(today, 3));

            var target = new ChartDataService(_vehicleRepo.Object, _fillupRepo.Object);
            var actual = target.CalculateSeriesForUser(userId, null, null);

            // 3 vehicles * 7 months
            Assert.Equal(3 * 7, actual.Entries.Count);

            var actualEntries = new List <StatisticSeriesEntry>(actual.Entries);

            var afeValues = new[] { 8.75, 6.67, 5.0, 10.0, 20.0, 6.67, 4 };
            var tcValues  = new double[] { 160, 450, 400, 200, 100, 300, 500 };
            var tdValues  = new double[] { 700, 1000, 1000, 1000, 1000, 1000, 1000 };

            for (int i = 0; i < 7; i++)
            {
                Assert.Equal(1, actualEntries[i].Id);
                Assert.Equal(today.AddMonths(-1 * (7 - i)).Year, actualEntries[i].Year);
                Assert.Equal(today.AddMonths(-1 * (7 - i)).Month, actualEntries[i].Month);
                Assert.Equal(afeValues[i], actualEntries[i].AverageFuelEfficiency);
                Assert.Equal(tcValues[i], actualEntries[i].TotalCost);
                Assert.Equal(tdValues[i], actualEntries[i].TotalDistance);
            }
        }