backend redesign
This commit is contained in:
54
backend.old/tests/test_websocket.py
Normal file
54
backend.old/tests/test_websocket.py
Normal file
@@ -0,0 +1,54 @@
|
||||
import asyncio
|
||||
import json
|
||||
import websockets
|
||||
import pytest
|
||||
from pydantic import BaseModel
|
||||
|
||||
async def test_websocket_sync():
|
||||
uri = "ws://localhost:8000/ws"
|
||||
async with websockets.connect(uri) as websocket:
|
||||
# 1. Send hello
|
||||
hello = {
|
||||
"type": "hello",
|
||||
"seqs": {}
|
||||
}
|
||||
await websocket.send(json.dumps(hello))
|
||||
|
||||
# 2. Receive snapshots
|
||||
# Expecting TraderState and StrategyState
|
||||
responses = []
|
||||
for _ in range(2):
|
||||
resp = await websocket.recv()
|
||||
responses.append(json.loads(resp))
|
||||
|
||||
assert any(r["store"] == "TraderState" for r in responses)
|
||||
assert any(r["store"] == "StrategyState" for r in responses)
|
||||
|
||||
# 3. Send a patch for TraderState
|
||||
trader_resp = next(r for r in responses if r["store"] == "TraderState")
|
||||
current_seq = trader_resp["seq"]
|
||||
|
||||
patch_msg = {
|
||||
"type": "patch",
|
||||
"store": "TraderState",
|
||||
"seq": current_seq,
|
||||
"patch": [{"op": "replace", "path": "/status", "value": "busy"}]
|
||||
}
|
||||
await websocket.send(json.dumps(patch_msg))
|
||||
|
||||
# 4. Receive confirmation patch
|
||||
confirm_resp = await websocket.recv()
|
||||
confirm_json = json.loads(confirm_resp)
|
||||
assert confirm_json["type"] == "patch"
|
||||
assert confirm_json["store"] == "TraderState"
|
||||
assert confirm_json["seq"] == current_seq + 1
|
||||
assert confirm_json["patch"][0]["value"] == "busy"
|
||||
|
||||
if __name__ == "__main__":
|
||||
# This script requires the server to be running:
|
||||
# PYTHONPATH=backend/src python3 backend/src/main.py
|
||||
try:
|
||||
asyncio.run(test_websocket_sync())
|
||||
print("Test passed!")
|
||||
except Exception as e:
|
||||
print(f"Test failed: {e}")
|
||||
Reference in New Issue
Block a user