@@ -53,28 +53,23 @@ def test_estimate_max_purchase_quantity(self) -> None:
5353 quantity = estimate_max_purchase_quantity (ctx , "SOXL.US" , order_kind = "limit" , ref_price = 100.5 )
5454
5555 self .assertEqual (quantity , 12 )
56- self .assertIs ( ctx . estimate_kwargs [ "fractional_shares" ], False )
56+ self .assertNotIn ( "fractional_shares" , ctx . estimate_kwargs )
5757
58- def test_estimate_max_purchase_quantity_can_request_fractional_buying_power (self ) -> None :
58+ def test_submit_order (self ) -> None :
5959 longport_module = types .ModuleType ("longport" )
6060 openapi_module = types .ModuleType ("longport.openapi" )
61- openapi_module .OrderSide = types .SimpleNamespace (Buy = "Buy" )
61+ openapi_module .OrderSide = types .SimpleNamespace (Buy = "Buy" , Sell = "Sell" )
6262 openapi_module .OrderType = types .SimpleNamespace (LO = "LO" , MO = "MO" )
63+ openapi_module .TimeInForceType = types .SimpleNamespace (Day = "Day" )
6364
6465 ctx = FakeTradeContext ()
6566 with patch .dict (sys .modules , {"longport" : longport_module , "longport.openapi" : openapi_module }):
66- quantity = estimate_max_purchase_quantity (
67- ctx ,
68- "SOXX.US" ,
69- order_kind = "limit" ,
70- ref_price = 495.91 ,
71- fractional_shares = True ,
72- )
67+ report = submit_order (ctx , "SOXL.US" , order_kind = "limit" , side = "buy" , quantity = 5 , submitted_price = 100.25 )
7368
74- self .assertEqual (quantity , 12 )
75- self .assertIs ( ctx . estimate_kwargs [ "fractional_shares" ], True )
69+ self .assertEqual (report . status , "submitted" )
70+ self .assertEqual ( report . broker_order_id , "OID-1" )
7671
77- def test_submit_order (self ) -> None :
72+ def test_submit_order_allows_whole_decimal_quantity (self ) -> None :
7873 longport_module = types .ModuleType ("longport" )
7974 openapi_module = types .ModuleType ("longport.openapi" )
8075 openapi_module .OrderSide = types .SimpleNamespace (Buy = "Buy" , Sell = "Sell" )
@@ -83,12 +78,12 @@ def test_submit_order(self) -> None:
8378
8479 ctx = FakeTradeContext ()
8580 with patch .dict (sys .modules , {"longport" : longport_module , "longport.openapi" : openapi_module }):
86- report = submit_order (ctx , "SOXL.US" , order_kind = "limit" , side = "buy" , quantity = 5 , submitted_price = 100.25 )
81+ report = submit_order (ctx , "SOXL.US" , order_kind = "limit" , side = "buy" , quantity = 1.0 , submitted_price = 100.25 )
8782
8883 self .assertEqual (report .status , "submitted" )
89- self .assertEqual (report . broker_order_id , "OID-1 " )
84+ self .assertEqual (str ( ctx . submit_args [ 3 ]) , "1.0 " )
9085
91- def test_submit_order_allows_decimal_quantity_at_or_above_one_share (self ) -> None :
86+ def test_submit_order_rejects_quantity_below_one_before_api_call (self ) -> None :
9287 longport_module = types .ModuleType ("longport" )
9388 openapi_module = types .ModuleType ("longport.openapi" )
9489 openapi_module .OrderSide = types .SimpleNamespace (Buy = "Buy" , Sell = "Sell" )
@@ -97,12 +92,20 @@ def test_submit_order_allows_decimal_quantity_at_or_above_one_share(self) -> Non
9792
9893 ctx = FakeTradeContext ()
9994 with patch .dict (sys .modules , {"longport" : longport_module , "longport.openapi" : openapi_module }):
100- report = submit_order (ctx , "SOXL.US" , order_kind = "limit" , side = "buy" , quantity = 1.5 , submitted_price = 100.25 )
95+ report = submit_order (
96+ ctx ,
97+ "SOXX.US" ,
98+ order_kind = "limit" ,
99+ side = "buy" ,
100+ quantity = 0.4326 ,
101+ submitted_price = 495.91 ,
102+ )
101103
102- self .assertEqual (report .status , "submitted" )
103- self .assertEqual (str (ctx .submit_args [3 ]), "1.5" )
104+ self .assertEqual (report .status , "rejected" )
105+ self .assertIn ("whole-share quantity of at least 1 share" , report .raw_payload ["detail" ])
106+ self .assertFalse (hasattr (ctx , "submit_args" ))
104107
105- def test_submit_order_rejects_quantity_below_one_before_api_call (self ) -> None :
108+ def test_submit_order_rejects_fractional_quantity_before_api_call (self ) -> None :
106109 longport_module = types .ModuleType ("longport" )
107110 openapi_module = types .ModuleType ("longport.openapi" )
108111 openapi_module .OrderSide = types .SimpleNamespace (Buy = "Buy" , Sell = "Sell" )
@@ -116,12 +119,12 @@ def test_submit_order_rejects_quantity_below_one_before_api_call(self) -> None:
116119 "SOXX.US" ,
117120 order_kind = "limit" ,
118121 side = "buy" ,
119- quantity = 0.4326 ,
122+ quantity = 1.5 ,
120123 submitted_price = 495.91 ,
121124 )
122125
123126 self .assertEqual (report .status , "rejected" )
124- self .assertIn ("at least 1 share" , report .raw_payload ["detail" ])
127+ self .assertIn ("whole-share quantity of at least 1 share" , report .raw_payload ["detail" ])
125128 self .assertFalse (hasattr (ctx , "submit_args" ))
126129
127130 def test_fetch_order_status (self ) -> None :
0 commit comments