56 lines
1.4 KiB
Python
56 lines
1.4 KiB
Python
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)
|