From 2c2c2c570aed2a788ff47ac5d69a5eabb42631af Mon Sep 17 00:00:00 2001 From: Jaja Mba Date: Thu, 12 Mar 2026 14:44:47 +0000 Subject: [PATCH 1/3] Changed folder structure to match main --- co2_sensor.py => sensors/co2_sensor.py | 0 noise_sensor.py => sensors/noise_sensor.py | 0 occupancy_sensor.py => sensors/occupancy_sensor.py | 0 sensor_base.py => sensors/sensor_base.py | 0 temperature_sensor.py => sensors/temperature_sensor.py | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename co2_sensor.py => sensors/co2_sensor.py (100%) rename noise_sensor.py => sensors/noise_sensor.py (100%) rename occupancy_sensor.py => sensors/occupancy_sensor.py (100%) rename sensor_base.py => sensors/sensor_base.py (100%) rename temperature_sensor.py => sensors/temperature_sensor.py (100%) diff --git a/co2_sensor.py b/sensors/co2_sensor.py similarity index 100% rename from co2_sensor.py rename to sensors/co2_sensor.py diff --git a/noise_sensor.py b/sensors/noise_sensor.py similarity index 100% rename from noise_sensor.py rename to sensors/noise_sensor.py diff --git a/occupancy_sensor.py b/sensors/occupancy_sensor.py similarity index 100% rename from occupancy_sensor.py rename to sensors/occupancy_sensor.py diff --git a/sensor_base.py b/sensors/sensor_base.py similarity index 100% rename from sensor_base.py rename to sensors/sensor_base.py diff --git a/temperature_sensor.py b/sensors/temperature_sensor.py similarity index 100% rename from temperature_sensor.py rename to sensors/temperature_sensor.py From c2d288029c5021dfcd6529f205c2976701b2cc84 Mon Sep 17 00:00:00 2001 From: Jaja Mba Date: Mon, 16 Mar 2026 20:52:05 +0000 Subject: [PATCH 2/3] Created tests scripts and tweaked sensor scripts to be able to be imported --- sensors/__init__.py | 0 sensors/co2_sensor.py | 2 +- sensors/temperature_sensor.py | 2 +- tests/test_co2_sensor.py | 46 +++++++++++++++++++++++++++++++ tests/test_temperature_sensor.py | 47 ++++++++++++++++++++++++++++++++ 5 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 sensors/__init__.py diff --git a/sensors/__init__.py b/sensors/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sensors/co2_sensor.py b/sensors/co2_sensor.py index 036f86a..a306064 100644 --- a/sensors/co2_sensor.py +++ b/sensors/co2_sensor.py @@ -1,6 +1,6 @@ import random import time -from sensor_base import SensorBase +from sensors.sensor_base import SensorBase class CO2Sensor(SensorBase): diff --git a/sensors/temperature_sensor.py b/sensors/temperature_sensor.py index 8767759..56bbb28 100644 --- a/sensors/temperature_sensor.py +++ b/sensors/temperature_sensor.py @@ -1,6 +1,6 @@ import random import time -from sensor_base import SensorBase +from sensors.sensor_base import SensorBase class TemperatureSensor(SensorBase): diff --git a/tests/test_co2_sensor.py b/tests/test_co2_sensor.py index e69de29..2db603e 100644 --- a/tests/test_co2_sensor.py +++ b/tests/test_co2_sensor.py @@ -0,0 +1,46 @@ +import sys +import os +import json + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +from sensors.co2_sensor import CO2Sensor + +def test_generate_reading_returns_valid_json(): + sensor = CO2Sensor("Room101") + reading = sensor.generate_co2_reading() + + parsed = json.loads(reading) + + assert isinstance(parsed, dict) + + +def test_required_fields_present(): + sensor = CO2Sensor("Room101") + reading = json.loads(sensor.generate_co2_reading()) + + required_fields = ["sensor_type", "room", "value", "unit", "timestamp"] + + for field in required_fields: + assert field in reading + + +def test_co2_value_range(): + sensor = CO2Sensor("Room101") + + for _ in range(10): + reading = json.loads(sensor.generate_co2_reading()) + value = reading["value"] + + assert 400 <= value <= 1500 + + +def test_co2_drift_limit(): + sensor = CO2Sensor("Room101") + + first = json.loads(sensor.generate_co2_reading())["value"] + second = json.loads(sensor.generate_co2_reading())["value"] + + drift = abs(second - first) + + assert drift <= 50 \ No newline at end of file diff --git a/tests/test_temperature_sensor.py b/tests/test_temperature_sensor.py index e69de29..5ec2922 100644 --- a/tests/test_temperature_sensor.py +++ b/tests/test_temperature_sensor.py @@ -0,0 +1,47 @@ +import sys +import os +import json + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +from sensors.temperature_sensor import TemperatureSensor + + +def test_generate_reading_returns_valid_json(): + sensor = TemperatureSensor("Room101") + reading = sensor.generate_temperature_reading() + + parsed = json.loads(reading) + + assert isinstance(parsed, dict) + + +def test_required_fields_present(): + sensor = TemperatureSensor("Room101") + reading = json.loads(sensor.generate_temperature_reading()) + + required_fields = ["sensor_type", "room", "value", "unit", "timestamp"] + + for field in required_fields: + assert field in reading + + +def test_temperature_value_range(): + sensor = TemperatureSensor("Room101") + + for _ in range(10): + reading = json.loads(sensor.generate_temperature_reading()) + value = reading["value"] + + assert 18 <= value <= 30 + + +def test_temperature_drift_limit(): + sensor = TemperatureSensor("Room101") + + first = json.loads(sensor.generate_temperature_reading())["value"] + second = json.loads(sensor.generate_temperature_reading())["value"] + + drift = abs(second - first) + + assert drift <= 1 \ No newline at end of file From 6e75bea624081edcfabc2b20bf6bc01a420ebffc Mon Sep 17 00:00:00 2001 From: Jaja Mba Date: Mon, 16 Mar 2026 21:22:49 +0000 Subject: [PATCH 3/3] Created tests for noise and occupancy --- sensors/noise_sensor.py | 2 +- sensors/occupancy_sensor.py | 2 +- tests/test_noise_sensor.py | 47 +++++++++++++++++++++++++++++++++ tests/test_occupancy_sensor.py | 48 ++++++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+), 2 deletions(-) diff --git a/sensors/noise_sensor.py b/sensors/noise_sensor.py index e5edfd5..c8eb628 100644 --- a/sensors/noise_sensor.py +++ b/sensors/noise_sensor.py @@ -1,6 +1,6 @@ import random import time -from sensor_base import SensorBase +from sensors.sensor_base import SensorBase class NoiseSensor(SensorBase): diff --git a/sensors/occupancy_sensor.py b/sensors/occupancy_sensor.py index f9ed2c6..4fa6650 100644 --- a/sensors/occupancy_sensor.py +++ b/sensors/occupancy_sensor.py @@ -1,6 +1,6 @@ import random import time -from sensor_base import SensorBase +from sensors.sensor_base import SensorBase class OccupancySensor(SensorBase): diff --git a/tests/test_noise_sensor.py b/tests/test_noise_sensor.py index e69de29..637c3ea 100644 --- a/tests/test_noise_sensor.py +++ b/tests/test_noise_sensor.py @@ -0,0 +1,47 @@ +import sys +import os +import json + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +from sensors.noise_sensor import NoiseSensor + + +def test_generate_reading_returns_valid_json(): + sensor = NoiseSensor("Room101") + reading = sensor.generate_noise_reading() + + parsed = json.loads(reading) + + assert isinstance(parsed, dict) + + +def test_required_fields_present(): + sensor = NoiseSensor("Room101") + reading = json.loads(sensor.generate_noise_reading()) + + required_fields = ["sensor_type", "room", "value", "unit", "timestamp"] + + for field in required_fields: + assert field in reading + + +def test_noise_value_range(): + sensor = NoiseSensor("Room101") + + for _ in range(10): + reading = json.loads(sensor.generate_noise_reading()) + value = reading["value"] + + assert 30 <= value <= 100 + + +def test_noise_drift_limit(): + sensor = NoiseSensor("Room101") + + first = json.loads(sensor.generate_noise_reading())["value"] + second = json.loads(sensor.generate_noise_reading())["value"] + + drift = abs(second - first) + + assert drift <= 5 \ No newline at end of file diff --git a/tests/test_occupancy_sensor.py b/tests/test_occupancy_sensor.py index e69de29..dfff44d 100644 --- a/tests/test_occupancy_sensor.py +++ b/tests/test_occupancy_sensor.py @@ -0,0 +1,48 @@ +import sys +import os +import json + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +from sensors.occupancy_sensor import OccupancySensor + + +def test_generate_reading_returns_valid_json(): + sensor = OccupancySensor("Room101", 40) + reading = sensor.generate_occupancy_reading() + + parsed = json.loads(reading) + + assert isinstance(parsed, dict) + + +def test_required_fields_present(): + sensor = OccupancySensor("Room101", 40) + reading = json.loads(sensor.generate_occupancy_reading()) + + required_fields = ["sensor_type", "room", "value", "unit", "timestamp"] + + for field in required_fields: + assert field in reading + + +def test_occupancy_value_range(): + capacity = 40 + sensor = OccupancySensor("Room101", capacity) + + for _ in range(10): + reading = json.loads(sensor.generate_occupancy_reading()) + value = reading["value"] + + assert 0 <= value <= capacity + + +def test_occupancy_drift_limit(): + sensor = OccupancySensor("Room101", 40) + + first = json.loads(sensor.generate_occupancy_reading())["value"] + second = json.loads(sensor.generate_occupancy_reading())["value"] + + drift = abs(second - first) + + assert drift <= 3 \ No newline at end of file