public void Test_GetSource_SameReadingDiffUnit() { SourceData sourceData = new SourceData() { Name = "current", Reading = 15, Unit = TemperatureUnit.Celsius, High = 20, Low = 10, }; var externalSource = new Mock <IExternalSource>(); externalSource.Setup(m => m.ConvertSourceToData()).Returns(sourceData); ThermometerModel model = new ThermometerModel("xml", externalSource.Object); model.GetLatestTemperature(); Assert.AreEqual(15.0, model.CurrentTemperature); Assert.AreEqual(TemperatureUnit.Celsius, model.CurrentTempUnit); Assert.AreEqual("15.0 Celsius", model.CurrentTempDisplay); model.UpdateByTempUnitChange(TemperatureUnit.Fahrenheit); Assert.AreEqual(59.0, model.CurrentTemperature); Assert.AreEqual(TemperatureUnit.Fahrenheit, model.CurrentTempUnit); Assert.AreEqual("59.0 Fahrenheit", model.CurrentTempDisplay); }
public void Test_GetSource_DiffReading() { SourceData sourceData = new SourceData() { Name = "current", Reading = 15, Unit = TemperatureUnit.Celsius, High = 20, Low = 10, }; var externalSource = new Mock <IExternalSource>(); externalSource.Setup(m => m.ConvertSourceToData()).Returns(sourceData); ThermometerModel model = new ThermometerModel("xml", externalSource.Object); model.GetLatestTemperature(); Assert.AreEqual(15.0, model.CurrentTemperature); Assert.AreEqual(TemperatureUnit.Celsius, model.CurrentTempUnit); Assert.AreEqual("15.0 Celsius", model.CurrentTempDisplay); // Arrange sourceData.Reading = 20; model.GetLatestTemperature(); Assert.AreEqual(20.0, model.CurrentTemperature); Assert.AreEqual(TemperatureUnit.Celsius, model.CurrentTempUnit); Assert.AreEqual("20.0 Celsius", model.CurrentTempDisplay); }
public void Test_GetSource_InitialConditions() { SourceData sourceData = new SourceData() { Name = "current", Reading = 15, Unit = TemperatureUnit.Celsius, High = 20, Low = 10, }; var externalSource = new Mock <IExternalSource>(); externalSource.Setup(m => m.ConvertSourceToData()).Returns(sourceData); ThermometerModel model = new ThermometerModel("xml", externalSource.Object); model.GetLatestTemperature(); Assert.AreEqual(15.0, model.CurrentTemperature); Assert.AreEqual(TemperatureUnit.Celsius, model.CurrentTempUnit); Assert.AreEqual("15.0 Celsius", model.CurrentTempDisplay); Assert.AreEqual(TemperatureUnit.Celsius, model.ThresholdsModel.CurrentTemperatureUnit); IThresholdData thresholdData = model.ThresholdsModel.ThresholdSettings[0]; thresholdData.Temperature = 0.0; thresholdData = model.ThresholdsModel.ThresholdSettings[1]; thresholdData.Temperature = 100.0; }
public void Test_AlertTrigger_DataFromAboveToBelow_WithinHalf() { var thresholdRepository = new Mock <IThresholdRepository>(); thresholdRepository.Setup(m => m.GetAll()).Returns(new List <IThresholdData>()); ThermometerModel thermoModel = new ThermometerModel(); ThresholdModel model = new ThresholdModel(thermoModel, thresholdRepository.Object); Assert.IsTrue(model.TriggerThresholdAlert(0.0, -0.5)); // Now, alert has been shown once. So, set thermometer model accordingly to be triggered. thermoModel.Triggered = true; Assert.IsFalse(model.TriggerThresholdAlert(-0.5, 0.0)); // doing again will not trigger alert: Assert.IsFalse(model.TriggerThresholdAlert(0.0, 0.5)); }
public ParseInputLogFile() { ReferenceValuesModel referenceValuesModel = new ReferenceValuesModel { ThermometerReferenceValue = 70.0m, HumidityReferenceValue = 45.0m, MonoxideReferenceValue = 6 }; ThermometerModel thermometerModel = new ThermometerModel { Name = "temp-1", Readings = new List <DecimalReadingModel> { new DecimalReadingModel { Timestamp = DateTime.Parse("2007-04-05T22:00"), Value = 72.4m } } }; HumidityModel humidityModel = new HumidityModel { Name = "hum-1", Readings = new List <DecimalReadingModel> { new DecimalReadingModel { Timestamp = DateTime.Parse("2007-04-05T22:04"), Value = 45.2m } } }; MonoxideModel monoxideModel = new MonoxideModel { Name = "mon-1", Readings = new List <IntegerReadingModel> { new IntegerReadingModel { Timestamp = DateTime.Parse("2007-04-05T22:04"), Value = 5 } } }; sensorLogModel.ReferenceValues = referenceValuesModel; sensorLogModel.ThermometerReadings.Add(thermometerModel); sensorLogModel.HumidityReadings.Add(humidityModel); sensorLogModel.MonoxideReadings.Add(monoxideModel); }
/// <summary> /// Generates a sensor log model from the sensor log input text file /// </summary> /// <param name="logContentsStr">The sensor log input text file</param> /// <exception cref="ArgumentException">logContentStr is null or whitespace</exception> /// <exception cref="NotImplementedException">Invalid record type is entered</exception> /// <returns>The sensor log model representing the sensors and reading log records</returns> private SensorLogModel ParseInputLogFile(string logContentsStr) { if (string.IsNullOrWhiteSpace(logContentsStr)) { _logger.LogError($"{Messages.NullWhitespaceString} (Parameter '{nameof(logContentsStr)}')"); throw new ArgumentException(Messages.NullWhitespaceString, nameof(logContentsStr)); } SensorLogModel model = new SensorLogModel(); string[] input = logContentsStr.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); Regex timeValueRegex = new Regex("[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T(2[0-3]|[01][0-9]):[0-5][0-9]"); for (int i = 0; i < input.Length; i++) { string[] line = input[i].Split(' '); switch (line[0]) { case "reference": model.ReferenceValues = HandleReferenceValuesLogRecord(line[1], line[2], line[3]); break; case "thermometer": ThermometerModel thermometerModel = new ThermometerModel { Name = line[1] }; while (true) { i++; line = input[i].Split(' '); if (timeValueRegex.IsMatch(line[0])) { DecimalReadingModel readingModel = HandleDecimalReading(line[0], line[1]); thermometerModel.Readings.Add(readingModel); } else { i--; break; } if (i + 1 >= input.Length) { break; } } model.ThermometerReadings.Add(thermometerModel); break; case "humidity": HumidityModel humidityModel = new HumidityModel { Name = line[1] }; while (true) { i++; line = input[i].Split(' '); if (timeValueRegex.IsMatch(line[0])) { DecimalReadingModel readingModel = HandleDecimalReading(line[0], line[1]); humidityModel.Readings.Add(readingModel); } else { i--; break; } if (i + 1 >= input.Length) { break; } } model.HumidityReadings.Add(humidityModel); break; case "monoxide": MonoxideModel monoxideModel = new MonoxideModel { Name = line[1] }; while (true) { i++; line = input[i].Split(' '); if (timeValueRegex.IsMatch(line[0])) { IntegerReadingModel readingModel = HandleIntegerReading(line[0], line[1]); monoxideModel.Readings.Add(readingModel); } else { i--; break; } if (i + 1 >= input.Length) { break; } } model.MonoxideReadings.Add(monoxideModel); break; default: _logger.LogError($"Sensor type {line[0]} has not been implemented yet."); throw new NotImplementedException($"Sensor type {line[0]} has not been implemented yet."); } } return(model); }