Files
NetBox-Export/tests/test_codec.py
T

72 lines
1.7 KiB
Python

import datetime
import decimal
import uuid
from dataclasses import dataclass
import pytest
from netbox_export.services import codec
from netbox_export.services.codec import decode_scalar, encode_scalar
@dataclass
class FakeRange:
lower: object = None
upper: object = None
bounds: str = "[)"
empty: bool = False
@property
def lower_inc(self):
return not self.empty and self.bounds[0] == "["
@property
def upper_inc(self):
return not self.empty and self.bounds[1] == "]"
@property
def isempty(self):
return self.empty
def test_scalar_round_trip():
value = {
"decimal": decimal.Decimal("12.340"),
"uuid": uuid.UUID("00112233-4455-6677-8899-aabbccddeeff"),
"date": datetime.date(2026, 8, 5),
"datetime": datetime.datetime(2026, 8, 5, 10, 30, tzinfo=datetime.UTC),
"duration": datetime.timedelta(seconds=42),
"bytes": b"binary",
}
assert decode_scalar(encode_scalar(value)) == value
def test_postgresql_range_round_trip(monkeypatch):
monkeypatch.setattr(
codec,
"_make_range",
lambda lower, upper, bounds, empty: FakeRange(lower, upper, bounds, empty),
)
value = FakeRange(1, 56, "[)")
encoded = encode_scalar(value)
assert encoded == {
"$type": "range",
"lower": 1,
"upper": 56,
"bounds": "[)",
"empty": False,
}
assert decode_scalar(encoded) == value
def test_real_psycopg_range_round_trip():
pytest.importorskip("psycopg")
from django.db.backends.postgresql.psycopg_any import NumericRange
value = NumericRange(1, 56, "[)")
assert decode_scalar(encode_scalar(value)) == value