Skip to content

Commit ffe2c57

Browse files
test: add ISO8601 round-trip tests for non-UTC timezone offsets
The _format_datetime_iso8601 offset formatting code (sign, hours, minutes) was only tested with UTC (+00:00). Added tests for positive (+05:30), negative (-07:00), and negative fractional (-09:30) offsets, plus a string format verification test. Closes #113 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent ef3bf6a commit ffe2c57

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

tests/test_types.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,49 @@ def test_encode_decode_iso8601(self) -> None:
379379
assert decoded.minute == 30
380380
assert decoded.second == 45
381381

382+
def test_encode_decode_iso8601_positive_offset(self) -> None:
383+
"""113: non-UTC positive offset must round-trip correctly."""
384+
import datetime
385+
386+
tz = datetime.timezone(datetime.timedelta(hours=5, minutes=30))
387+
dt = datetime.datetime(2024, 1, 15, 10, 30, 0, tzinfo=tz)
388+
encoded, vtype = encode_value(dt, ValueType.ISO8601)
389+
assert vtype == ValueType.ISO8601
390+
decoded, _ = decode_value(encoded, ValueType.ISO8601)
391+
assert decoded == dt
392+
393+
def test_encode_decode_iso8601_negative_offset(self) -> None:
394+
"""113: non-UTC negative offset must round-trip correctly."""
395+
import datetime
396+
397+
tz = datetime.timezone(datetime.timedelta(hours=-7))
398+
dt = datetime.datetime(2024, 7, 4, 14, 0, 0, tzinfo=tz)
399+
encoded, vtype = encode_value(dt, ValueType.ISO8601)
400+
assert vtype == ValueType.ISO8601
401+
decoded, _ = decode_value(encoded, ValueType.ISO8601)
402+
assert decoded == dt
403+
404+
def test_encode_decode_iso8601_negative_fractional_offset(self) -> None:
405+
"""113: negative fractional-hour offset (-09:30) must round-trip."""
406+
import datetime
407+
408+
tz = datetime.timezone(datetime.timedelta(hours=-9, minutes=-30))
409+
dt = datetime.datetime(2024, 3, 1, 8, 0, 0, tzinfo=tz)
410+
encoded, vtype = encode_value(dt, ValueType.ISO8601)
411+
assert vtype == ValueType.ISO8601
412+
decoded, _ = decode_value(encoded, ValueType.ISO8601)
413+
assert decoded == dt
414+
415+
def test_format_iso8601_positive_offset_string(self) -> None:
416+
"""113: verify the formatted string for positive offset."""
417+
import datetime
418+
419+
from dqlitewire.types import _format_datetime_iso8601
420+
421+
tz = datetime.timezone(datetime.timedelta(hours=5, minutes=30))
422+
dt = datetime.datetime(2024, 1, 15, 10, 30, 0, tzinfo=tz)
423+
assert _format_datetime_iso8601(dt) == "2024-01-15 10:30:00+05:30"
424+
382425
def test_encode_decode_pre_epoch_datetime(self) -> None:
383426
"""Pre-epoch datetimes (year < 1000) must roundtrip correctly.
384427
strftime('%Y') produces fewer than 4 digits on some platforms,

0 commit comments

Comments
 (0)