Browse Source

test: add coverage for sqlalchemy_safe parameter in jsonable_encoder for models, dicts, and dataclasses

pull/15965/head
Your Name 2 weeks ago
parent
commit
df60a111dc
  1. 59
      tests/test_jsonable_encoder.py

59
tests/test_jsonable_encoder.py

@ -329,3 +329,62 @@ def test_encode_color(module_path):
data = {"color": Color("blue")}
assert jsonable_encoder(data) == {"color": "blue"}
def test_jsonable_encoder_sqlalchemy_safe_base_model():
class Model(BaseModel):
sa_key: str = Field(alias="_sa_key")
normal_key: str
model = Model(_sa_key="foo", normal_key="bar")
# Test case 1: sqlalchemy_safe=True (default) and no exclude_none/exclude_defaults
assert jsonable_encoder(model, by_alias=True) == {"normal_key": "bar"}
# Test case 2: sqlalchemy_safe=False and no exclude_none/exclude_defaults
# This hits: "if not sqlalchemy_safe: return obj_dict"
assert jsonable_encoder(model, by_alias=True, sqlalchemy_safe=False) == {
"_sa_key": "foo",
"normal_key": "bar",
}
# Test case 3: sqlalchemy_safe=True (default) and exclude_none=True
assert jsonable_encoder(model, by_alias=True, exclude_none=True) == {"normal_key": "bar"}
# Test case 4: sqlalchemy_safe=False and exclude_none=True
assert jsonable_encoder(model, by_alias=True, exclude_none=True, sqlalchemy_safe=False) == {
"_sa_key": "foo",
"normal_key": "bar",
}
def test_jsonable_encoder_sqlalchemy_safe_dict():
data = {"_sa_key": "foo", "normal_key": "bar"}
# Test case 5: dict with sqlalchemy_safe=True (default)
assert jsonable_encoder(data) == {"normal_key": "bar"}
# Test case 6: dict with sqlalchemy_safe=False
assert jsonable_encoder(data, sqlalchemy_safe=False) == {
"_sa_key": "foo",
"normal_key": "bar",
}
def test_jsonable_encoder_sqlalchemy_safe_dataclass():
@dataclass
class DataclassItem:
normal_key: str
_sa_key: str
item = DataclassItem(normal_key="bar", _sa_key="foo")
# Test case 7: dataclass with sqlalchemy_safe=True (default)
assert jsonable_encoder(item) == {"normal_key": "bar"}
# Test case 8: dataclass with sqlalchemy_safe=False
assert jsonable_encoder(item, sqlalchemy_safe=False) == {
"_sa_key": "foo",
"normal_key": "bar",
}

Loading…
Cancel
Save