def setUp(self): """ Called once, before any tests """ conn = sqlite3.connect("test_pres_reading.sqlite") c = conn.cursor() c.execute(''' CREATE TABLE pressure_reading (id INTEGER PRIMARY KEY ASC, timestamp DATETIME NOT NULL, model VARCHAR(250) NOT NULL, min_reading NUMBER NOT NULL, avg_reading NUMBER NOT NULL, max_reading NUMBER NOT NULL, status VARCHAR(250) NOT NULL ) ''') conn.commit() conn.close() self.test_pres_manager = PressureReadingManager( TestPressureReadingManager.DATABASE_NAME) test_pres_reading = PressureReading( datetime.datetime.strptime( TestPressureReadingManager.TEST_TIMESTAMP, TestPressureReadingManager.DATE_FORMAT), TestPressureReadingManager.TEST_MODEL, TestPressureReadingManager.TEST_MIN_VALUE, TestPressureReadingManager.TEST_AVG_VALUE, TestPressureReadingManager.TEST_MAX_VALUE, TestPressureReadingManager.TEST_STATUS) self.test_pres_manager.add_reading(test_pres_reading) self.logPoint()
def add_reading(sensor_type): """creates reading object and add to csv""" reading = request.get_json() print(reading) print(json_to_list(reading)) sensor_input = json_to_list(reading) datetime_object = datetime.strptime(sensor_input[0], "%Y-%m-%d %H:%M:%S.%f") sensor_input[0] = datetime_object if sensor_type == "temperature": sensor = TemperatureReadingManager("data/temperature_results.csv") temp_read = TemperatureReading(*sensor_input) print(temp_read.get_timestamp()) sensor.add_reading(temp_read) elif sensor_type == "pressure": sensor = PressureReadingManager("data/pressure_results2.csv") temp_read = PressureReading(*sensor_input) print(temp_read.get_timestamp()) sensor.add_reading(temp_read) response = app.response_class(response=reading, status=200, mimetype='text/plain') return response
def setUp(self, test_readings=TEST_PRES_READINGS): """ Creates fixtures before each test """ self.logPoint() # This mocks the csv reader to return our test readings csv.reader = MagicMock(return_value=test_readings) self.reading_manager = PressureReadingManager("pres_testresults.csv") reading_datetime = datetime.datetime.strptime("2018-09-23 19:56", "%Y-%m-%d %H:%M") self.reading = PressureReading(reading_datetime, 1, "ABC Sensor Pres M100", 50.163, 51.435, 52.103, "GOOD") self.reading_update = PressureReading(reading_datetime, 1, "ABC Sensor Pres M100", 50.163, 51.435, 52.103, "UPDATED")
def test_update_reading_valid(self): """ 030A - Valid Update Reading """ new_reading = PressureReading( datetime.datetime.strptime("2018-09-23 19:59", "%Y-%m-%d %H:%M"), "ABC Sensor New Pres M100", float(50.513), float(51.745), float(53.105), "GOOD") updated_reading = self.test_pres_manager.update_reading(1, new_reading) self.assertTrue(updated_reading)
def test_update_reading_not_in_list_fail(self): """ 030C - Doesn't update reading if not in the list """ reading_datetime = datetime.datetime.strptime("2018-09-23 19:56", "%Y-%m-%d %H:%M") reading_update_fail = PressureReading(reading_datetime, 0, "ABC Sensor Pres M100", 50.163, 51.435, 52.103, "UPDATED") self.assertEqual( self.reading_manager.update_reading(reading_update_fail), 0, "Must return 0 if seq num is not in the list")
def test_update_reading_invalid(self): """ 030B - Invalid Update Reading """ new_reading = PressureReading( datetime.datetime.strptime("2018-09-23 19:59", "%Y-%m-%d %H:%M"), "ABC Sensor New Pres M100", float(50.513), float(51.745), float(53.105), "GOOD") with self.assertRaises(ValueError): self.test_pres_manager.update_reading(None, None) self.test_pres_manager.update_reading(1, None) self.test_pres_manager.update_reading(None, new_reading) self.test_pres_manager.update_reading("", "") self.test_pres_manager.update_reading(1, "") self.test_pres_manager.update_reading("", new_reading)
def _load_reading_row(self, row): """ Loads list into a PressureReading object """ reading_datetime = datetime.datetime.strptime( row[PressureReadingManager.DATETIME_INDEX], "%Y-%m-%d %H:%M") pressure_reading = PressureReading( reading_datetime, row[PressureReadingManager.SENSOR_NAME_INDEX], int(row[PressureReadingManager.SEQ_NUM_INDEX]), float(row[PressureReadingManager.LOW_INDEX]), float(row[PressureReadingManager.AVG_INDEX]), float(row[PressureReadingManager.HIGH_INDEX]), row[PressureReadingManager.STATUS_INDEX]) return pressure_reading
def test_add_reading_valid(self): """ 020A - Valid Add Reading """ new_reading = PressureReading( datetime.datetime.strptime( TestPressureReadingManager.TEST_TIMESTAMP, TestPressureReadingManager.DATE_FORMAT), TestPressureReadingManager.TEST_MODEL, TestPressureReadingManager.TEST_MIN_VALUE, TestPressureReadingManager.TEST_AVG_VALUE, TestPressureReadingManager.TEST_MAX_VALUE, TestPressureReadingManager.TEST_STATUS) added_reading = self.test_pres_manager.add_reading(new_reading) self.assertEqual(new_reading, added_reading) rows = len(self.test_pres_manager.get_all_readings()) self.assertEqual(rows, 2)
def _load_reading_row(self, row): """ Loads list into a PressureReading object """ try: reading_datetime = datetime.datetime.strptime( row[PressureReadingManager.TIMESTAMP_INDEX], "%Y-%m-%d %H:%M") pres_reading = PressureReading( reading_datetime, int(row[PressureReadingManager.SEQ_NUM_INDEX]), row[PressureReadingManager.SENSOR_MODEL_INDEX], float(row[PressureReadingManager.MIN_INDEX]), float(row[PressureReadingManager.AVG_INDEX]), float(row[PressureReadingManager.MAX_INDEX]), row[PressureReadingManager.STATUS_INDEX]) except: raise ValueError("Invalid data entry") return pres_reading
def add_log_message(self, model, min_reading, avg_reading, max_reading, status): """ Add a log message to the database """ PressureReadingManager._validate_input(PressureReadingManager.NAME, model) PressureReadingManager._validate_input( PressureReadingManager.MIN_READING, min_reading) PressureReadingManager._validate_input( PressureReadingManager.AVERAGE_READING, avg_reading) PressureReadingManager._validate_input( PressureReadingManager.MAX_READING, max_reading) PressureReadingManager._validate_input( PressureReadingManager.READING_STATUS, status) session = self.DBSession() new_log_message = PressureReading(model, min_reading, avg_reading, max_reading, status) session.add(new_log_message) session.commit()
def create_reading(sensor_type, json_reading, seq_num=0): """ Returns reading if valid input, None otherwise """ if sensor_type == "temperature": try: reading = TemperatureReading(datetime.datetime.strptime(json_reading["timestamp"], "%Y-%m-%d %H:%M:%S.%f"), seq_num, json_reading["model"], float(json_reading["min"]), float(json_reading["avg"]), float(json_reading["max"]), json_reading["status"]) except: return None if sensor_type == "pressure": try: reading = PressureReading(datetime.datetime.strptime(json_reading["timestamp"], "%Y-%m-%d %H:%M"), seq_num, json_reading["model"], float(json_reading["min"]), float(json_reading["avg"]), float(json_reading["max"]), json_reading["status"]) except: return None return reading