public void Validates_Between_Floats() { var vm = ComparisonTypeViewModel.Locate(Between); Assert.IsTrue(vm.Validate("1.5", min: "0.3", max: "2.3")); Assert.IsFalse(vm.Validate("0.1", min: "0.75", max: "0.8")); Assert.IsTrue(vm.Validate("0.1", min: "0", max: "0.11")); }
/// <summary> /// Initializes a new instance of the <see cref="ReadingInputViewModel"/> class. /// </summary> public ReadingInputViewModel(ReadingInput todaysData, ItemModel item, AsyncCommand save, AsyncCommand cancel) : this(save, cancel) { this.item = item; this.ComparisonType = ComparisonTypeViewModel.Locate(this.item.Specification.ComparisonType); this.todaysData = todaysData; this.ShowInput = this.todaysData != null; }
public void Validates_Less_Than_Or_Equal_Ints() { var vm = ComparisonTypeViewModel.Locate(LessThanOrEqual); Assert.IsTrue(vm.Validate("0", "1")); Assert.IsTrue(vm.Validate("1", "1")); Assert.IsFalse(vm.Validate("1", "0")); }
public void Validates_Between_Ints() { var vm = ComparisonTypeViewModel.Locate(Between); Assert.IsTrue(vm.Validate("1", min: "0", max: "2")); Assert.IsFalse(vm.Validate("0", min: "1", max: "0")); Assert.IsTrue(vm.Validate("0", min: "0", max: "1")); }
public void Validates_Less_Than_Or_Equal_Floats() { var vm = ComparisonTypeViewModel.Locate(LessThanOrEqual); Assert.IsTrue(vm.Validate("0.2", "0.7")); Assert.IsTrue(vm.Validate("0.5", "0.5")); Assert.IsTrue(vm.Validate(".5", "0.5")); Assert.IsFalse(vm.Validate("1.2", "0.5")); }
public void Validates_Either_Or() { var vm = ComparisonTypeViewModel.Locate(Either); //Assert.IsTrue(vm.Validate("true", min: "True", max: "False")); //Assert.IsTrue(vm.Validate("false", min: "True", max: "False")); Assert.IsFalse(vm.Validate("derp", min: "True", max: "False")); //Assert.IsTrue(vm.Validate("0.1", min: "0.1", max: "0.8")); //Assert.IsTrue(vm.Validate("0.8", min: "0.1", max: "0.8")); //Assert.IsFalse(vm.Validate("0.8", min: "0.2", max: "0.3")); }
private async void SaveInput(ReadingInputViewModel newData) { if (this.input.ItemId == Guid.Empty) { return; } var io = ServiceResolver.Resolve <IFileHandler>(); var existingReading = ReadingManager.Find(newData.ItemId); //reading already exists or was just created, so just update the values. var item = this.station.Items.FirstOrDefault(i => i.Id == newData.ItemId); if (newData.IsBooleanInput) { existingReading.Value = newData.BooleanValue.ToString(); } else { existingReading.Value = newData.StringValue; } existingReading.Comments = newData.Comments; existingReading.TimeTaken = DateTime.UtcNow; // Now validate the users input var validator = ComparisonTypeViewModel.Locate(newData.InputType); if (validator.UsesOneInput) { existingReading.IsOutOfSpec = validator.Validate( value: existingReading.Value, max: item.Specification.UpperBound) == false; } else { existingReading.IsOutOfSpec = validator.Validate( value: existingReading.Value, min: item.Specification.LowerBound, max: item.Specification.UpperBound) == false; } //finally, write out the result to file so that way it doesn't get lost. item.CurrentReading = existingReading; this.ListModel.SetSelectedAsVisited(); await ReadingManager.SaveReadingsToDiskAsync(); //place binding for completed items here. probably. }
public override async Task <Reading> InsertAsync(Reading toCreate) { toCreate.Id = Guid.NewGuid(); //validate the item is within spec. var item = Items.GetSingle(toCreate.ItemId); //used to get the validator object. var validator = ComparisonTypeViewModel.Locate(item.Specification.ComparisonType.Name); toCreate.IsOutOfSpec = validator.Validate(toCreate.Value, min: item.Specification.LowerBoundValue, max: item.Specification.UpperBoundValue) == false; var tracked = Database.Readings.Add(toCreate); if (await SaveAsync()) { return(tracked); } return(null); }
/// <summary> /// Initializes a new instance of the <see cref="ReadingInputScreenViewModel"/> class. /// Represents the full view model for the page. /// </summary> public ReadingInputScreenViewModel(RegionModelSource region, StationModel station) { var regionNav = new AsyncCommand((obj) => { Navigator.Navigate(Shared.Navigation.NavigationType.StationSelect); }); this.Save = new AsyncCommand((obj) => this.SaveInput(this.input), this.CanSave); this.station = station; this.Crumbs.Add(new BreadcrumbItemModel("Areas", region.NavigateRoot)); this.Crumbs.Add(new BreadcrumbItemModel(region.Name, region.Navigate)); this.Crumbs.Add(new BreadcrumbItemModel(station.Name, station.Navigate)); this.Input = new ReadingInputViewModel(this.Save, null); this.ListModel = new ReadingInputListViewModel(this); foreach (var item in station.Items) { if (item.StationId == station.Id) { var newMeter = new Meter(item.Meter, item) { Id = item.Id, Name = item.Name, MeterName = item.Meter }; var currentReading = ReadingManager.Find(item.Id); newMeter.LastReading = new ReadingInput(); newMeter.TwoReadingsAgo = new ReadingInput(); newMeter.ThreeReadingsAgo = new ReadingInput(); newMeter.FourReadingsAgo = new ReadingInput(); newMeter.ComparisonType = ComparisonTypeViewModel.Locate(item.Specification.ComparisonType); newMeter.TodaysReading = new ReadingInput() { MinimumValue = item.Specification.LowerBound, MaximumValue = item.Specification.UpperBound, UnitAbbreviation = item.Specification.UnitOfMeasure.Abbreviation, ValueBounds = newMeter.ComparisonType.AsEnum(), IsWithinSpec = false, }; if (!string.IsNullOrEmpty(currentReading.Value)) { bool boolVal = false; if (bool.TryParse(currentReading.Value, out boolVal)) { newMeter.TodaysReading.BooleanValue = boolVal; } else { //just a string value. newMeter.TodaysReading.StringValue = currentReading.Value; } newMeter.TodaysReading.IsWithinSpec = !currentReading.IsOutOfSpec; newMeter.IsComplete = true; } var count = item.PastFourReadings.Count(); if (count > 0) { newMeter.LastReading.StringValue = item.PastFourReadings.ElementAt(0).Value; newMeter.LastReading.IsWithinSpec = !item.PastFourReadings.ElementAt(0).IsOutOfSpec; newMeter.LastReading.Notes = item.PastFourReadings.ElementAt(0).Comments; } if (count > 1) { newMeter.TwoReadingsAgo.StringValue = item.PastFourReadings.ElementAt(1).Value; newMeter.TwoReadingsAgo.IsWithinSpec = !item.PastFourReadings.ElementAt(1).IsOutOfSpec; } if (count > 2) { newMeter.ThreeReadingsAgo.StringValue = item.PastFourReadings.ElementAt(2).Value; newMeter.ThreeReadingsAgo.IsWithinSpec = !item.PastFourReadings.ElementAt(2).IsOutOfSpec; } if (count > 3) { newMeter.FourReadingsAgo.StringValue = item.PastFourReadings.ElementAt(3).Value; newMeter.FourReadingsAgo.IsWithinSpec = !item.PastFourReadings.ElementAt(3).IsOutOfSpec; } this.ListModel.Meters.Add(newMeter); } } }
public void Validate_Cannot_Compare_String_And_Float_LT() { var vm = ComparisonTypeViewModel.Locate(LessThan); vm.Validate("abc", "0.5"); }
public void Validate_Cannot_Compare_String_And_Float_LTE() { var vm = ComparisonTypeViewModel.Locate(GreaterThanOrEqual); vm.Validate("abc", "0.5"); }