Example #1
0
        public void SmokeTestUpdateEntry()
        {
            var vehicle = new Vehicle { VehicleName = "test vehicle" };
            Vehicle.Save(vehicle);

            var entry = new FillupEntry
            {
                EntryDate = DateTime.Now,
                FillAmount = 13.564,
                OdometerReading = 100215,
                PricePerUnit = 2.899
            };
            var originalTicks = entry.EntryDate.Ticks;

            vehicle.SaveEntry(entry);

            vehicle.Entries.Add(entry);

            entry.OdometerReading = 100210;

            vehicle.UpdateExistingEntry(entry, originalTicks);

            entry.EntryDate = new DateTime(2010,10,15);

            vehicle.UpdateExistingEntry(entry, originalTicks);
        }
Example #2
0
        public void TestFillupEntryClone()
        {
            var fillupEntry = new FillupEntry
                                  {
                                      FillAmount = 3.154,
                                      OdometerReading = 154254.6,
                                      EntryDate = DateTime.Now,
                                      PreviousEntryMissed = true,
                                      PricePerUnit = 3.256,
                                      PumpUnit = UnitOfMeasure.Volume.Gallon,
                                      WasNotToppedOff = true
                                  };

            FillupEntry fillupEntryClone = FillupEntry.Clone(fillupEntry);

            Assert.IsFalse(ReferenceEquals(fillupEntry, fillupEntryClone));
            Assert.AreEqual(fillupEntry.EntryDate, fillupEntryClone.EntryDate);
            Assert.IsFalse(ReferenceEquals(fillupEntry.EntryDate, fillupEntryClone.EntryDate));
            Assert.AreEqual(fillupEntry.FillAmount, fillupEntryClone.FillAmount);
            Assert.IsFalse(ReferenceEquals(fillupEntry.FillAmount, fillupEntryClone.FillAmount));
            Assert.AreEqual(fillupEntry.OdometerReading, fillupEntryClone.OdometerReading);
            Assert.IsFalse(ReferenceEquals(fillupEntry.OdometerReading, fillupEntryClone.OdometerReading));
            Assert.AreEqual(fillupEntry.PreviousEntryMissed, fillupEntryClone.PreviousEntryMissed);
            Assert.IsFalse(ReferenceEquals(fillupEntry.PreviousEntryMissed, fillupEntryClone.PreviousEntryMissed));
            Assert.AreEqual(fillupEntry.PumpUnit, fillupEntryClone.PumpUnit);
            Assert.IsFalse(ReferenceEquals(fillupEntry.PumpUnit, fillupEntryClone.PumpUnit));
        }
Example #3
0
        public void TestEntrySerializationAndDeserialization()
        {
            var entry = new FillupEntry
                            {
                                FillAmount = 13.2342352353,
                                PricePerUnit = 3.4543,
                                PumpUnit = UnitOfMeasure.Volume.Gallon,
                                OdometerUnit = UnitOfMeasure.Distance.Mile,
                                EntryDate = DateTime.Now,
                                OdometerReading = 143423.4,
                                WasNotToppedOff = false,
                                PreviousEntryMissed = true
                            };

            byte[] entryBytes = entry.ToBytes();
            FillupEntry entry2 = FillupEntryExtensions.EntryFromBytes(entryBytes);

            Assert.AreEqual(entry.FillAmount, entry2.FillAmount);
            Assert.AreEqual(entry.EntryDate, entry2.EntryDate);
            Assert.AreEqual(entry.OdometerReading, entry2.OdometerReading);
            Assert.AreEqual(entry.OdometerUnit, entry2.OdometerUnit);
            Assert.AreEqual(entry.PricePerUnit, entry2.PricePerUnit);
            Assert.AreEqual(entry.PumpUnit, entry2.PumpUnit);
            Assert.AreEqual(entry.WasNotToppedOff, entry2.WasNotToppedOff);
            Assert.AreEqual(entry.PreviousEntryMissed, entry2.PreviousEntryMissed);
        }
Example #4
0
        public void TestForArgumentExceptionBaselineOdometerReadingGreater()
        {
            var vehicle = new Vehicle {OdometerUnit = UnitOfMeasure.DefaultDistanceUnit};

            var entry1 = new FillupEntry
                             {
                                 OdometerReading = 100,
                                 FillAmount = 14.436,
                                 PricePerUnit = 2.799,
                                 PumpUnit = UnitOfMeasure.Volume.Liter,
                                 EntryDate = new DateTime(2010,10,1)
                             };

            var entry2 = new FillupEntry
                             {
                                 OdometerReading = 200,
                                 FillAmount = 14.436,
                                 PricePerUnit = 2.799,
                                 PumpUnit = UnitOfMeasure.Volume.Liter,
                                 EntryDate = new DateTime(2010,10,08)
                             };

            vehicle.Entries.Add(entry1);
            vehicle.Entries.Add(entry2);

            vehicle.CalculateEfficiency(entry1, entry2, UnitOfMeasure.DefaultDistanceUnit,
                                        UnitOfMeasure.DefaultVolumeUnit);
        }
        public static FillupEntry EntryFromBytes(byte[] bytes)
        {
            var entry = new FillupEntry();
            int curOffset = 0;

            var fillAmountBytes = new byte[sizeof (double)];
            var fillupDateTimeBytes = new byte[sizeof (long)];
            var odometerReadingBytes = new byte[sizeof (double)];
            var pricePerVolumeUnitBytes = new byte[sizeof (double)];
            var volumeUnitBytes = new byte[sizeof (byte)];
            var odometerDistanceUnitBytes = new byte[sizeof (byte)];
            var wasNotToppedOffBytes = new byte[sizeof (bool)];
            var previousEntryMissedBytes = new byte[sizeof (bool)];

            Array.Copy(bytes, curOffset, fillupDateTimeBytes, 0, fillupDateTimeBytes.Length);
            entry.EntryDate = new DateTime(BitConverter.ToInt64(fillupDateTimeBytes, 0));
            curOffset += sizeof (long);

            Array.Copy(bytes, curOffset, odometerReadingBytes, 0, odometerReadingBytes.Length);
            entry.OdometerReading = BitConverter.ToDouble(odometerReadingBytes, 0);
            curOffset += sizeof (double);

            Array.Copy(bytes, curOffset, fillAmountBytes, 0, fillAmountBytes.Length);
            entry.FillAmount = BitConverter.ToDouble(fillAmountBytes, 0);
            curOffset += sizeof (double);

            Array.Copy(bytes, curOffset, pricePerVolumeUnitBytes, 0, pricePerVolumeUnitBytes.Length);
            entry.PricePerUnit = BitConverter.ToDouble(pricePerVolumeUnitBytes, 0);
            curOffset += sizeof (double);

            Array.Copy(bytes, curOffset, volumeUnitBytes, 0, volumeUnitBytes.Length);
            entry.PumpUnit = (UnitOfMeasure.Volume) volumeUnitBytes[0];
            curOffset += sizeof (byte);

            Array.Copy(bytes, curOffset, odometerDistanceUnitBytes, 0, odometerDistanceUnitBytes.Length);
            entry.OdometerUnit = (UnitOfMeasure.Distance) odometerDistanceUnitBytes[0];
            curOffset += sizeof (byte);

            Array.Copy(bytes, curOffset, wasNotToppedOffBytes, 0, wasNotToppedOffBytes.Length);
            entry.WasNotToppedOff = BitConverter.ToBoolean(wasNotToppedOffBytes, 0);
            curOffset += sizeof (bool);

            Array.Copy(bytes, curOffset, previousEntryMissedBytes, 0, previousEntryMissedBytes.Length);
            entry.PreviousEntryMissed = BitConverter.ToBoolean(previousEntryMissedBytes, 0);
            curOffset += sizeof (bool);

            return entry;
        }
Example #6
0
        public void TestDeleteEntry()
        {
            var vehicle = new Vehicle {VehicleName = "test vehicle"};
            Vehicle.Save(vehicle);

            var entry = new FillupEntry
                            {
                                EntryDate = DateTime.Now,
                                FillAmount = 13.564,
                                OdometerReading = 100215,
                                PricePerUnit = 2.899
                            };

            vehicle.Entries.Add(entry);
            vehicle.SaveEntry(entry);

            vehicle.DeleteFillupEntry(entry);

            using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
            {
                Assert.IsFalse(store.FileExists(vehicle.Id + "\\" + entry.OdometerReading));
            }
        }
Example #7
0
        public void TestNormalizeToImperial()
        {
            var entry = new FillupEntry
                            {
                                FillAmount = 1,
                                OdometerReading = 1,
                                PumpUnit = UnitOfMeasure.Volume.Liter,
                                OdometerUnit = UnitOfMeasure.Distance.Kilometer,
                                PricePerUnit = 1
                            };
            FillupEntry entry2 = FillupEntry.Clone(entry);

            entry2.Normalize(UnitOfMeasure.Distance.Mile, UnitOfMeasure.Volume.Gallon);

            Assert.IsTrue(entry.PumpUnit == UnitOfMeasure.Volume.Liter
                          && entry2.PumpUnit == UnitOfMeasure.Volume.Gallon);

            Assert.IsTrue(entry.OdometerUnit == UnitOfMeasure.Distance.Kilometer
                          && entry2.OdometerUnit == UnitOfMeasure.Distance.Mile);

            Assert.IsTrue(entry2.FillAmount == entry.FillAmount*0.264172052);
            Assert.IsNotNull(entry2.OdometerReading == entry.OdometerReading*0.621371192);
        }
Example #8
0
        public void TestNormalizeToMetric()
        {
            var entry = new FillupEntry
                            {
                                FillAmount = 1,
                                OdometerReading = 1,
                                PumpUnit = UnitOfMeasure.Volume.Gallon,
                                OdometerUnit = UnitOfMeasure.Distance.Mile,
                                PricePerUnit = 1
                            };
            FillupEntry entry2 = FillupEntry.Clone(entry);

            entry2.Normalize(UnitOfMeasure.Distance.Kilometer, UnitOfMeasure.Volume.Liter);

            Assert.IsTrue(entry.PumpUnit == UnitOfMeasure.Volume.Gallon
                          && entry2.PumpUnit == UnitOfMeasure.Volume.Liter);

            Assert.IsTrue(entry.OdometerUnit == UnitOfMeasure.Distance.Mile
                          && entry2.OdometerUnit == UnitOfMeasure.Distance.Kilometer);

            Assert.IsTrue(entry2.FillAmount == entry.FillAmount*3.78541178);

            Assert.IsNotNull(entry2.OdometerReading == entry.OdometerReading*1.609344);
        }
Example #9
0
        public void TestInsertEntry()
        {
            var vehicle = new Vehicle {OdometerUnit = UnitOfMeasure.DefaultDistanceUnit};
            vehicle.Entries.Add(new FillupEntry
                                    {
                                        EntryDate = new DateTime(2010,1,1),
                                        OdometerReading = 100,
                                        FillAmount = 10,
                                        OdometerUnit = vehicle.OdometerUnit
                                    });
            vehicle.Entries.Add(new FillupEntry
                                    {
                                        EntryDate = new DateTime(2010,1,15),
                                        OdometerReading = 200,
                                        FillAmount = 10,
                                        OdometerUnit = vehicle.OdometerUnit
                                    });
            vehicle.Entries.Add(new FillupEntry
                                    {
                                        EntryDate = new DateTime(2010,1,30),
                                        OdometerReading = 300,
                                        FillAmount = 10,
                                        OdometerUnit = vehicle.OdometerUnit
                                    });
            vehicle.Entries.Add(new FillupEntry
                                    {
                                        EntryDate = new DateTime(2010,2,1),
                                        OdometerReading = 400,
                                        FillAmount = 10,
                                        OdometerUnit = vehicle.OdometerUnit
                                    });
            vehicle.Entries.Add(new FillupEntry
                                    {
                                        EntryDate = new DateTime(2010,2,15),
                                        OdometerReading = 500,
                                        FillAmount = 10,
                                        OdometerUnit = vehicle.OdometerUnit
                                    });

            var entry = new FillupEntry
                            {
                                EntryDate = new DateTime(2009,12,20),
                                OdometerReading = 50,
                                FillAmount = 10,
                                OdometerUnit = vehicle.OdometerUnit
                            };

            vehicle.InsertEntry(entry);
            Assert.IsTrue(vehicle.Entries.IndexOf(entry) == 0);

            entry = new FillupEntry
                        {
                            EntryDate = new DateTime(2010,2,28),
                            OdometerReading = 600,
                            FillAmount = 10,
                            OdometerUnit = vehicle.OdometerUnit
                        };

            vehicle.InsertEntry(entry);
            Assert.IsTrue(vehicle.Entries.IndexOf(entry) == vehicle.Entries.Count - 1);

            entry = new FillupEntry
                        {
                            EntryDate = new DateTime(2009,12,25),
                            OdometerReading = 75,
                            FillAmount = 10,
                            OdometerUnit = vehicle.OdometerUnit
                        };

            vehicle.InsertEntry(entry);
            Assert.IsTrue(vehicle.Entries.IndexOf(entry) == 1);
        }
Example #10
0
        public void TestInsertEntryOdometerLessThanEarlierDate()
        {
            var vehicle = new Vehicle {OdometerUnit = UnitOfMeasure.DefaultDistanceUnit};
            vehicle.Entries.Add(new FillupEntry
                                    {
                                        EntryDate = new DateTime(2010,1,1),
                                        OdometerReading = 100,
                                        FillAmount = 10,
                                        OdometerUnit = vehicle.OdometerUnit
                                    });
            vehicle.Entries.Add(new FillupEntry
                                    {
                                        EntryDate = new DateTime(2010,1,15),
                                        OdometerReading = 200,
                                        FillAmount = 10,
                                        OdometerUnit = vehicle.OdometerUnit
                                    });
            vehicle.Entries.Add(new FillupEntry
                                    {
                                        EntryDate = new DateTime(2010,1,30),
                                        OdometerReading = 300,
                                        FillAmount = 10,
                                        OdometerUnit = vehicle.OdometerUnit
                                    });
            vehicle.Entries.Add(new FillupEntry
                                    {
                                        EntryDate = new DateTime(2010,2,1),
                                        OdometerReading = 400,
                                        FillAmount = 10,
                                        OdometerUnit = vehicle.OdometerUnit
                                    });
            vehicle.Entries.Add(new FillupEntry
                                    {
                                        EntryDate = new DateTime(2010,2,15),
                                        OdometerReading = 500,
                                        FillAmount = 10,
                                        OdometerUnit = vehicle.OdometerUnit
                                    });

            var entry = new FillupEntry
                            {
                                EntryDate = new DateTime(2010,1,20),
                                OdometerReading = 50,
                                FillAmount = 10,
                                OdometerUnit = vehicle.OdometerUnit
                            };

            vehicle.InsertEntry(entry);
        }
Example #11
0
        public void TestDeleteEntryNotAssociatedWithVehicle()
        {
            var vehicle = new Vehicle {VehicleName = "test vehicle"};
            Vehicle.Save(vehicle);

            var entry = new FillupEntry
                            {
                                EntryDate = DateTime.Now,
                                FillAmount = 13.564,
                                OdometerReading = 100215,
                                PricePerUnit = 2.899
                            };

            vehicle.SaveEntry(entry);

            vehicle.DeleteFillupEntry(entry);
        }
Example #12
0
        public void TestUpdateEntryThrowsArgumentExceptionEntryMustBelongToVehicle()
        {
            var vehicle = new Vehicle { VehicleName = "test vehicle" };
            Vehicle.Save(vehicle);

            var entry = new FillupEntry
            {
                EntryDate = DateTime.Now,
                FillAmount = 13.564,
                OdometerReading = 100215,
                PricePerUnit = 2.899
            };
            var originalTicks = entry.EntryDate.Ticks;

            vehicle.SaveEntry(entry);

            entry.OdometerReading = 100210;

            vehicle.UpdateExistingEntry(entry, originalTicks);
        }
Example #13
0
        public void TestNotEnoughSampleDataTwoEntriesWasNotToppedOff()
        {
            var vehicle = new Vehicle {OdometerUnit = UnitOfMeasure.DefaultDistanceUnit};

            var entry1 = new FillupEntry
                             {
                                 OdometerReading = 100,
                                 FillAmount = 14.436,
                                 PricePerUnit = 2.799,
                                 PumpUnit = UnitOfMeasure.Volume.Liter,
                                 EntryDate = new DateTime(2010,10,1)
                             };

            var entry2 = new FillupEntry
                             {
                                 OdometerReading = 200,
                                 FillAmount = 14.436,
                                 PricePerUnit = 2.799,
                                 PumpUnit = UnitOfMeasure.Volume.Liter,
                                 EntryDate = new DateTime(2010,10,08),
                                 WasNotToppedOff = true
                             };

            vehicle.Entries.Add(entry1);
            vehicle.Entries.Add(entry2);

            vehicle.CalculateEfficiency(entry2, entry1, UnitOfMeasure.DefaultDistanceUnit,
                                        UnitOfMeasure.DefaultVolumeUnit);
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            if (!_isNewInstance) return;

            string mode;
            string vehicleIdString;
            NavigationContext.QueryString.TryGetValue("mode", out mode);
            NavigationContext.QueryString.TryGetValue("vehicleId", out vehicleIdString);
            int vehicleId = int.Parse(vehicleIdString);
            var entryMode = (Mode) (Enum.Parse(typeof (Mode), mode, true));
            var viewModel = new AddOrEditFillupEntryViewModel {Vehicle = App.VehicleStore[vehicleId], Mode = entryMode};

            switch (entryMode)
            {
                case Mode.New:
                    viewModel.FillupEntry = new FillupEntry
                                                {
                                                    EntryDate = DateTime.Now,
                                                    PumpUnit = UnitOfMeasure.DefaultVolumeUnit,
                                                    OdometerUnit = viewModel.Vehicle.OdometerUnit,
                                                };
                    break;

                case Mode.Edit:
                    string entryTicksString;
                    NavigationContext.QueryString.TryGetValue("entryTicks", out entryTicksString);
                    long entryTicks = long.Parse(entryTicksString);
                    viewModel.OriginalEntryTicks = entryTicks;
                    _originalEntry = viewModel.Vehicle.Entries
                        .Where(entry => entry.EntryDate.Ticks == entryTicks)
                        .Single();

                    viewModel.FillupEntry = FillupEntry.Clone(_originalEntry);
                    break;

                case Mode.Insert:
                    string fromDateString;
                    string toDateString;
                    NavigationContext.QueryString.TryGetValue("fromDate", out fromDateString);
                    NavigationContext.QueryString.TryGetValue("toDate", out toDateString);
                    var fromDate = new DateTime(long.Parse(fromDateString));
                    var toDate = new DateTime(long.Parse(toDateString));
                    viewModel.InsertDateFrom = fromDate;
                    viewModel.InsertDateTo = toDate;

                    viewModel.FillupEntry = new FillupEntry
                                                {
                                                    PumpUnit = UnitOfMeasure.DefaultVolumeUnit,
                                                    OdometerUnit = viewModel.Vehicle.OdometerUnit,
                                                    EntryDate = DateTime.Today
                                                };
                    break;
                default:
                    throw new Exception("We should never get here.");
            }

            DataContext = viewModel;

            //restore previous state
            if (!State.ContainsKey("StatePreserved")) return;
            StateUtils.RestoreState(State, TxtFillAmount, String.Empty);
            StateUtils.RestoreState(State, TxtOdometerReading, String.Empty);
            StateUtils.RestoreState(State, TxtPricePerUnit, String.Empty);
            StateUtils.RestoreState(State, EntryDatePicker, DateTime.Now);
            StateUtils.RestoreState(State, chkNotToppedOff, false);
            StateUtils.RestoreState(State, chkMissedPreviousEntry, false);
        }
 public bool Equals(FillupEntry other)
 {
     if (ReferenceEquals(null, other)) return false;
     if (ReferenceEquals(this, other)) return true;
     return other.EntryDate.Equals(EntryDate);
 }
 public static FillupEntry Clone(FillupEntry entry)
 {
     return (FillupEntry)entry.MemberwiseClone();
 }