11"""Tests for OrderManager core API."""
22
3+ from unittest .mock import AsyncMock
4+
35import pytest
4- from unittest .mock import AsyncMock , MagicMock , patch
56
6- from project_x_py .models import Order , OrderPlaceResponse
77from project_x_py .exceptions import ProjectXOrderError
8+ from project_x_py .models import Order , OrderPlaceResponse
89
910
1011class TestOrderManagerCore :
@@ -40,12 +41,20 @@ async def test_place_order_error_raises(self, order_manager, make_order_response
4041 await order_manager .place_order ("MGC" , 2 , 0 , 1 )
4142
4243 @pytest .mark .asyncio
43- async def test_search_open_orders_populates_cache (self , order_manager , make_order_response ):
44+ async def test_search_open_orders_populates_cache (
45+ self , order_manager , make_order_response
46+ ):
4447 """search_open_orders converts API dicts to Order objects and populates cache."""
4548 resp_order = {
46- "id" : 101 , "accountId" : 12345 , "contractId" : "MGC" ,
47- "creationTimestamp" : "2024-01-01T01:00:00Z" , "updateTimestamp" : None ,
48- "status" : 1 , "type" : 1 , "side" : 0 , "size" : 2
49+ "id" : 101 ,
50+ "accountId" : 12345 ,
51+ "contractId" : "MGC" ,
52+ "creationTimestamp" : "2024-01-01T01:00:00Z" ,
53+ "updateTimestamp" : None ,
54+ "status" : 1 ,
55+ "type" : 1 ,
56+ "side" : 0 ,
57+ "size" : 2 ,
4958 }
5059 order_manager .project_x .account_info .id = 12345
5160 order_manager .project_x ._make_request = AsyncMock (
@@ -71,9 +80,15 @@ async def test_is_order_filled_fallback(self, order_manager):
7180 """is_order_filled falls back to get_order_by_id when not cached."""
7281 order_manager ._realtime_enabled = False
7382 dummy_order = Order (
74- id = 55 , accountId = 12345 , contractId = "CL" ,
75- creationTimestamp = "2024-01-01T01:00:00Z" , updateTimestamp = None ,
76- status = 2 , type = 1 , side = 0 , size = 1
83+ id = 55 ,
84+ accountId = 12345 ,
85+ contractId = "CL" ,
86+ creationTimestamp = "2024-01-01T01:00:00Z" ,
87+ updateTimestamp = None ,
88+ status = 2 ,
89+ type = 1 ,
90+ side = 0 ,
91+ size = 1 ,
7792 )
7893 order_manager .get_order_by_id = AsyncMock (return_value = dummy_order )
7994 result = await order_manager .is_order_filled (55 )
@@ -86,28 +101,42 @@ async def test_cancel_order_success_and_failure(self, order_manager):
86101 order_manager .tracked_orders ["888" ] = {"status" : 1 }
87102 order_manager .order_status_cache ["888" ] = 1
88103 start = order_manager .stats ["orders_cancelled" ]
89- order_manager .project_x ._make_request = AsyncMock (return_value = {"success" : True })
104+ order_manager .project_x ._make_request = AsyncMock (
105+ return_value = {"success" : True }
106+ )
90107 assert await order_manager .cancel_order (888 ) is True
91108 assert order_manager .tracked_orders ["888" ]["status" ] == 3
92109 assert order_manager .order_status_cache ["888" ] == 3
93110 assert order_manager .stats ["orders_cancelled" ] == start + 1
94111
95- order_manager .project_x ._make_request = AsyncMock (return_value = {"success" : False , "errorMessage" : "fail" })
112+ order_manager .project_x ._make_request = AsyncMock (
113+ return_value = {"success" : False , "errorMessage" : "fail" }
114+ )
96115 assert await order_manager .cancel_order (888 ) is False
97116
98117 @pytest .mark .asyncio
99118 async def test_modify_order_success_and_aligns (self , order_manager ):
100119 """modify_order aligns prices, makes API call, returns True on success."""
101120 dummy_order = Order (
102- id = 12 , accountId = 12345 , contractId = "MGC" ,
103- creationTimestamp = "2024-01-01T01:00:00Z" , updateTimestamp = None ,
104- status = 1 , type = 1 , side = 0 , size = 1
121+ id = 12 ,
122+ accountId = 12345 ,
123+ contractId = "MGC" ,
124+ creationTimestamp = "2024-01-01T01:00:00Z" ,
125+ updateTimestamp = None ,
126+ status = 1 ,
127+ type = 1 ,
128+ side = 0 ,
129+ size = 1 ,
105130 )
106131 order_manager .get_order_by_id = AsyncMock (return_value = dummy_order )
107- order_manager .project_x ._make_request = AsyncMock (return_value = {"success" : True })
132+ order_manager .project_x ._make_request = AsyncMock (
133+ return_value = {"success" : True }
134+ )
108135 assert await order_manager .modify_order (12 , limit_price = 2000.5 ) is True
109136
110- order_manager .project_x ._make_request = AsyncMock (return_value = {"success" : False })
137+ order_manager .project_x ._make_request = AsyncMock (
138+ return_value = {"success" : False }
139+ )
111140 assert await order_manager .modify_order (12 , limit_price = 2001.5 ) is False
112141
113142 @pytest .mark .asyncio
@@ -116,4 +145,4 @@ async def test_get_order_statistics(self, order_manager):
116145 stats = await order_manager .get_order_statistics ()
117146 assert "statistics" in stats
118147 assert "health_status" in stats
119- assert stats ["health_status" ] in {"healthy" , "degraded" }
148+ assert stats ["health_status" ] in {"healthy" , "degraded" }
0 commit comments