fix(serialization): Fix Path serialization in events and thread-local fallback in ai_client
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
from src.events import UserRequestEvent
|
||||
|
||||
def test_user_request_event_serialization():
|
||||
# Setup payload with nested Path objects
|
||||
file_items = [
|
||||
{"path": Path("some/file.txt"), "mtime": 1234.5},
|
||||
{"path": Path("another/path"), "metadata": {"sub_path": Path("sub/path")}}
|
||||
]
|
||||
base_dir = Path("C:/projects/test")
|
||||
|
||||
event = UserRequestEvent(
|
||||
prompt="Test prompt",
|
||||
stable_md="# Context",
|
||||
file_items=file_items,
|
||||
disc_text="Discussion history",
|
||||
base_dir=str(base_dir)
|
||||
)
|
||||
|
||||
# Execute serialization
|
||||
result = event.to_dict()
|
||||
|
||||
# Verify no Path objects remain
|
||||
assert isinstance(result["file_items"][0]["path"], str)
|
||||
assert result["file_items"][0]["path"] == str(Path("some/file.txt"))
|
||||
assert isinstance(result["file_items"][1]["metadata"]["sub_path"], str)
|
||||
assert result["file_items"][1]["metadata"]["sub_path"] == str(Path("sub/path"))
|
||||
|
||||
# Verify JSON serializability
|
||||
try:
|
||||
json.dumps(result)
|
||||
except (TypeError, OverflowError) as e:
|
||||
assert False, f"Result not JSON serializable: {e}"
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_user_request_event_serialization()
|
||||
print("Test passed!")
|
||||
Reference in New Issue
Block a user