test(workspace_profile): add str/bytes TOML serialization contract test
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
import io
|
||||
import tomllib
|
||||
import pytest
|
||||
import tomli_w
|
||||
from src.models import WorkspaceProfile
|
||||
|
||||
|
||||
def test_workspace_profile_empty_ini_content_roundtrips():
|
||||
profile = WorkspaceProfile(
|
||||
name="t",
|
||||
ini_content="",
|
||||
show_windows={"A": True, "B": False},
|
||||
panel_states={"x": 1, "y": 2.0, "z": True},
|
||||
)
|
||||
d = profile.to_dict()
|
||||
buf = io.BytesIO()
|
||||
tomli_w.dump({"t": d}, buf)
|
||||
buf.seek(0)
|
||||
back = tomllib.load(buf)
|
||||
loaded = WorkspaceProfile.from_dict("t", back["t"])
|
||||
assert loaded.ini_content == ""
|
||||
assert loaded.show_windows == {"A": True, "B": False}
|
||||
assert loaded.panel_states == {"x": 1, "y": 2.0, "z": True}
|
||||
|
||||
|
||||
def test_workspace_profile_with_actual_ini_content_roundtrips():
|
||||
profile = WorkspaceProfile(
|
||||
name="real",
|
||||
ini_content="[Window][Debug]\nPos=10,20\n",
|
||||
show_windows={},
|
||||
panel_states={},
|
||||
)
|
||||
d = profile.to_dict()
|
||||
buf = io.BytesIO()
|
||||
tomli_w.dump({"real": d}, buf)
|
||||
buf.seek(0)
|
||||
back = tomllib.load(buf)
|
||||
loaded = WorkspaceProfile.from_dict("real", back["real"])
|
||||
assert loaded.ini_content == "[Window][Debug]\nPos=10,20\n"
|
||||
assert loaded.name == "real"
|
||||
assert loaded.show_windows == {}
|
||||
assert loaded.panel_states == {}
|
||||
|
||||
|
||||
def test_workspace_profile_bytes_ini_content_rejected_by_toml():
|
||||
profile = WorkspaceProfile(
|
||||
name="bad",
|
||||
ini_content=b"",
|
||||
show_windows={},
|
||||
panel_states={},
|
||||
)
|
||||
d = profile.to_dict()
|
||||
buf = io.BytesIO()
|
||||
with pytest.raises(TypeError, match="bytes"):
|
||||
tomli_w.dump({"bad": d}, buf)
|
||||
Reference in New Issue
Block a user