def test_digital_sensor_reading(self, sqlalchemy): service = SensorReadingPersistenceService() reading = DigitalSensorReading() service.create(reading) assert service.get(reading.id).id == reading.id
def test_analog_sensor_reading(self, sqlalchemy): service = SensorReadingPersistenceService() reading = AnalogSensorReading() service.create(reading) assert service.get(reading.id).id == reading.id
def test_index_timestamp_reverse_order(self, sqlalchemy): service = SensorReadingPersistenceService() old = DigitalSensorReading() old.name = 'testsensor' old.value = True old.timestamp = datetime.now() new = DigitalSensorReading() new.name = 'testsensor' new.value = True new.timestamp = datetime.now() service.create(old) service.create(new) client = web.app.test_client() rv = client.get('/') rv_str = rv.data.decode('utf-8') matches = re.findall('\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\.\d\d\d\d\d\d', rv_str) assert matches[0] == str(new.timestamp) assert matches[1] == str(old.timestamp)
def test_index_timestamp_reverse_order(self, sqlalchemy): service = SensorReadingPersistenceService() old = DigitalSensorReading() old.name = "testsensor" old.value = True old.timestamp = datetime.now() new = DigitalSensorReading() new.name = "testsensor" new.value = True new.timestamp = datetime.now() service.create(old) service.create(new) client = web.app.test_client() rv = client.get("/") rv_str = rv.data.decode("utf-8") matches = re.findall("\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\.\d\d\d\d\d\d", rv_str) assert matches[0] == str(new.timestamp) assert matches[1] == str(old.timestamp)
def test_get_newest_notification_returns_newest_record(self, sqlalchemy): sensor_service = SensorReadingPersistenceService() reading = AnalogSensorReading() reading.name = 'Test Sensor' sensor_service.create(reading) old_notification = NotificationEvent() old_notification.sensor_id = reading.id old_notification.timestamp = datetime(2015, 1, 1) new_notification = NotificationEvent() new_notification.sensor_id = reading.id new_notification.timestamp = datetime(2016, 1, 1) service = NotificationPersistenceService() # Insert in reverse order to confirm order by service.create(new_notification) service.create(old_notification) newest_timestamp = new_notification.timestamp db_timestamp = service.get_newest_notification(reading.name).timestamp assert db_timestamp == newest_timestamp
def test_rollback(self, sqlalchemy): try: with transaction_scope() as session: reading = SensorReading() session.add(reading) raise ValueError('Test Transactions!') except ValueError: pass service = SensorReadingPersistenceService() assert len(service.all()) == 0
def test_sensor_reading_job_digital_normal(self, sensormodule, sqlalchemy): tests.fixtures.mock_sensors = [mocks.MockDigitalNormalSensor] sensormodule.sensor_reading_job() sensor_persistence = SensorReadingPersistenceService() sensor = sensor_persistence.all()[0] assert sensor.name == 'digital normal' assert sensor.value is False assert not sensormodule.sms_notification.send_notification.called
def test_sensor_reading_job_analog_normal(self, sensormodule, sqlalchemy): tests.fixtures.mock_sensors = [mocks.MockAnalogNormalSensor] sensormodule.sensor_reading_job() sensor_persistence = SensorReadingPersistenceService() sensor = sensor_persistence.all()[0] assert sensor.name == 'analog normal' assert sensor.value == 1 assert sensor.unit == 'normal analog unit' assert not sensormodule.sms_notification.send_notification.called
def test_sensor_reading_job_analog_above_normal(self, sensormodule, sqlalchemy): tests.fixtures.mock_sensors = [mocks.MockAnalogAboveNormalSensor] sensormodule.sensor_reading_job() sensor_persistence = SensorReadingPersistenceService() sensor = sensor_persistence.all()[0] assert sensor.name == 'analog above normal' assert sensor.value == 2 assert sensor.unit == 'above normal analog unit' sensormodule.sms_notification.send_notification.assert_called_with( 'analog above normal notification')
def test_polymorphic(self, sqlalchemy): service = SensorReadingPersistenceService() reading = SensorReading() analog = AnalogSensorReading() digital = DigitalSensorReading() service.create(reading) service.create(analog) service.create(digital) assert len(service.all()) == 3
def test_all_reversed_bad_paging(self, sqlalchemy): service = SensorReadingPersistenceService() older = AnalogSensorReading() older.timestamp = datetime.now() newer = DigitalSensorReading() newer.timestamp = datetime.now() service.create(older) service.create(newer) paged = service.all_reversed(1000, 1) assert paged.elements == [] paged = service.all_reversed(-1, 1) assert paged.elements == []
def test_delete_deletes_single_model_object(self, sqlalchemy): service = SensorReadingPersistenceService() reading = AnalogSensorReading() service.create(reading) service.delete(reading) assert len(service.all()) == 0
def test_index_digital_sensor_reading(self, sqlalchemy): service = SensorReadingPersistenceService() timestamp = datetime.now() reading = DigitalSensorReading() reading.name = "testsensor" reading.value = True reading.timestamp = timestamp service.create(reading) client = web.app.test_client() rv = client.get("/") assert b"testsensor" in rv.data assert b"Digital" in rv.data assert b"True" in rv.data assert str.encode(str(timestamp)) in rv.data
def test_index_digital_sensor_reading(self, sqlalchemy): service = SensorReadingPersistenceService() timestamp = datetime.now() reading = DigitalSensorReading() reading.name = 'testsensor' reading.value = True reading.timestamp = timestamp service.create(reading) client = web.app.test_client() rv = client.get('/') assert b'testsensor' in rv.data assert b'Digital' in rv.data assert b'True' in rv.data assert str.encode(str(timestamp)) in rv.data
def test_all_returns_all_model_objects(self, sqlalchemy): service = SensorReadingPersistenceService() reading = AnalogSensorReading() service.create(reading) reading2 = AnalogSensorReading() service.create(reading2) assert len(service.all()) == 2
def test_get_returns_single_model_object(self, sqlalchemy): service = SensorReadingPersistenceService() reading = AnalogSensorReading() service.create(reading) reading2 = AnalogSensorReading() service.create(reading2) assert service.get(reading.id).id == reading.id
def test_all_reversed(self, sqlalchemy): service = SensorReadingPersistenceService() older = AnalogSensorReading() older.timestamp = datetime.now() newer = DigitalSensorReading() newer.timestamp = datetime.now() service.create(older) service.create(newer) paged = service.all_reversed(0, 100) assert paged.page_number == 0 assert paged.page_size == 100 assert paged.total_pages == 1 readings = paged.elements assert readings[0].timestamp == newer.timestamp assert readings[1].timestamp == older.timestamp assert len(readings) == 2
def test_index_analog_sensor_reading(self, sqlalchemy): service = SensorReadingPersistenceService() timestamp = datetime.now() reading = AnalogSensorReading() reading.name = 'testsensor' reading.unit = 'testunit' reading.value = 0 reading.timestamp = timestamp service.create(reading) client = web.app.test_client() rv = client.get('/') assert b'testsensor' in rv.data assert b'Analog' in rv.data assert b'0 (testunit)' in rv.data assert str.encode(str(timestamp)) in rv.data assert b'newer' not in rv.data assert b'older' not in rv.data
def test_index_analog_sensor_reading(self, sqlalchemy): service = SensorReadingPersistenceService() timestamp = datetime.now() reading = AnalogSensorReading() reading.name = "testsensor" reading.unit = "testunit" reading.value = 0 reading.timestamp = timestamp service.create(reading) client = web.app.test_client() rv = client.get("/") assert b"testsensor" in rv.data assert b"Analog" in rv.data assert b"0 (testunit)" in rv.data assert str.encode(str(timestamp)) in rv.data assert b"newer" not in rv.data assert b"older" not in rv.data
def test_get_newest_notification_excludes_other_sensors(self, sqlalchemy): reading_service = SensorReadingPersistenceService() notification_service = NotificationPersistenceService() included_sensor = DigitalSensorReading() included_sensor.name = 'included' reading_service.create(included_sensor) excluded_sensor = DigitalSensorReading() excluded_sensor.name = 'excluded' reading_service.create(excluded_sensor) excluded_notification = NotificationEvent() excluded_notification.sensor_id = excluded_sensor.id excluded_notification.timestamp = datetime(2016, 1, 1) notification_service.create(excluded_notification) included_notification = NotificationEvent() included_notification.sensor_id = included_sensor.id included_notification.timestamp = datetime(2015, 1, 1) notification_service.create(included_notification) assert notification_service.get_newest_notification('included') \ .timestamp == included_notification.timestamp
def test_update_updates_single_model_object(self, sqlalchemy): service = SensorReadingPersistenceService() original_reading = AnalogSensorReading() original_reading.name = 'original' original_reading.value = 1 original_reading.unit = 'original' service.create(original_reading) persisted_reading = service.get(original_reading.id) persisted_reading.name = 'new' persisted_reading.value = 2 persisted_reading.unit = 'new' service.update(persisted_reading) updated_reading = service.get(original_reading.id) assert updated_reading.name == 'new' assert updated_reading.value == 2 assert updated_reading.unit == 'new'