from netatmo_service.data import Sample from netatmo_service.rrd import RRDStore, rainbow def test_wind_rainbow_uses_compass_angle(): assert rainbow(0) == (0, 255, 255) assert rainbow(90) == (128, 0, 255) assert rainbow(180) == (255, 0, 0) assert rainbow(270) == (128, 255, 0) def test_each_wind_angle_has_an_unlabelled_color(): drawings = RRDStore._wind_drawings() assert len(drawings) == 722 assert sum(item.startswith("AREA:dir") for item in drawings) == 360 assert not any("degrees" in item for item in drawings) def test_rrd_files_have_netatmo_prefix(tmp_path): store = RRDStore(tmp_path) assert store.path("outdoor") == tmp_path / "netatmo_outdoor.rrd" assert store.path("wind") == tmp_path / "netatmo_wind.rrd" assert store.path("rain") == tmp_path / "netatmo_rain.rrd" assert store.path("pressure") == tmp_path / "netatmo_pressure.rrd" def test_rrd_is_updated_only_once_per_collection_interval(tmp_path): store = RRDStore(tmp_path) store.ensure_all() now = int(__import__("time").time()) timestamp = ((now // 600) - 1) * 600 + 100 first = Sample(timestamp, {"temperature": 20, "co2": 500, "humidity": 50}) same_interval = Sample(timestamp + 1, {"temperature": 21, "co2": 510, "humidity": 51}) assert store.update("study", first) is True assert store.update("study", first) is False assert store.update("study", same_interval) is False