|
3 | 3 | from collections.abc import Iterator |
4 | 4 | from contextlib import closing, contextmanager |
5 | 5 | from csv import DictReader |
| 6 | +from datetime import datetime, tzinfo |
6 | 7 | from enum import Enum |
7 | 8 | from pathlib import Path |
8 | 9 | from sqlite3 import connect |
| 10 | +from zoneinfo import ZoneInfo |
9 | 11 |
|
10 | 12 | import pytest |
11 | 13 | from loguru import logger |
@@ -85,6 +87,10 @@ def data(self) -> Iterator[bytes]: |
85 | 87 | def time(self) -> Iterator[int]: |
86 | 88 | return (msg.time for msg in self.value) |
87 | 89 |
|
| 90 | + @property |
| 91 | + def tzinfo(self) -> tzinfo: |
| 92 | + return ZoneInfo("Europe/Oslo") |
| 93 | + |
88 | 94 | @property |
89 | 95 | def obs(self) -> Iterator[ObsData]: |
90 | 96 | sensor = self.sensor |
@@ -184,16 +190,23 @@ def mock_sensor_check(self, buffer: bytes, command: str) -> bool: |
184 | 190 | """don't check if message matches sensor""" |
185 | 191 | return True |
186 | 192 |
|
187 | | - captured_time = capture_data.time |
| 193 | + class mock_datetime(datetime): |
| 194 | + captured_time = capture_data.time |
| 195 | + |
| 196 | + @classmethod |
| 197 | + def fromtimestamp(cls, t, tz=capture_data.tzinfo): |
| 198 | + assert tz == capture_data.tzinfo |
| 199 | + return datetime.fromtimestamp(t, tz) |
188 | 200 |
|
189 | | - def mock_sensor_now(self) -> int: |
190 | | - """mock pms.core.Sensor.now""" |
191 | | - return next(captured_time) |
| 201 | + @classmethod |
| 202 | + def now(cls, tz=capture_data.tzinfo): |
| 203 | + return cls.fromtimestamp(next(cls.captured_time), tz) |
192 | 204 |
|
193 | 205 | monkeypatch.setattr("pms.core.reader.Serial", MockSerial) |
194 | 206 | monkeypatch.setattr("pms.core.reader.SensorReader._cmd", mock_reader__cmd) |
195 | 207 | monkeypatch.setattr("pms.core.reader.SensorReader._pre_heat", mock_reader__pre_heat) |
196 | 208 | monkeypatch.setattr("pms.core.reader.Sensor.check", mock_sensor_check) |
197 | | - monkeypatch.setattr("pms.core.reader.Sensor.now", mock_sensor_now) |
| 209 | + monkeypatch.setattr("pms.core.sensor.datetime", mock_datetime) |
| 210 | + monkeypatch.setattr("pms.sensors.base.datetime", mock_datetime) |
198 | 211 |
|
199 | 212 | return capture_data |
0 commit comments