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;
        }
Exemplo n.º 4
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));
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        /// <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);
        }