fix: restore PostgreSQL range values during import
This commit is contained in:
@@ -1,10 +1,34 @@
|
||||
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"),
|
||||
@@ -17,3 +41,31 @@ def test_scalar_round_trip():
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user