
    	ci<+                    ,   d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlmZ e
j                  j                  d e ee      j#                         j$                  j$                               ddlmZmZmZ ddlmZ  G d d      Zdd	Zd
 Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'e(dk(  r] e         e         e         e         e          e!         e"         e#         e$         e%         e&         e'         e)d       yy)a  
Smoke tests for TopstepXBroker (the V16 BrokerBase wrapper).

These tests do NOT connect to TopstepX. They use a FakeAdapter that
replaces TopstepXAdapter and verify that the wrapper translates
shapes correctly.

Run:
    cd ~/apex_v16
    python -m tests.test_topstepx_v16
    )annotationsN)Path)OrderResultPositionCancelResult)topstepx_v16c                  \    e Zd ZdZd Zd Zd Zd Zd ZddZ	d	 Z
d
 Zd Zd ZddZd Zy)FakeAdapterz4Mimics TopstepXAdapter surface, returns canned data.c                D    g | _         d| _        ddddddddd| _        y )	NFCON.F.US.MES.M26g      ?g      ?)contract_id	tick_size
tick_valuezCON.F.US.MNQ.M26g      ?)MESMNQ)calls
_connected_instrument_cacheselfs    ./home/work/apex_v16/tests/test_topstepx_v16.py__init__zFakeAdapter.__init__   s2    "$

 $6DX\]#5DX\]"
    c                f   K   | j                   j                  dt        |      f       d| _        yw)NconnectT)r   appendtupler   )r   instrumentss     r   r   zFakeAdapter.connect*   s,     

9eK&89:s   /1c                P   K   | j                   j                  d       d| _        y w)N)
disconnectF)r   r   r   r   s    r   r    zFakeAdapter.disconnect/   s     

/*s   $&c                    | j                   S N)r   r   s    r   is_connectedzFakeAdapter.is_connected3   s    r   c                F   K   | j                   j                  d|f       yw)Nget_current_price    @@r   r   r   symbols     r   r%   zFakeAdapter.get_current_price6   s!     

.78s   !Nc           
     ^   K   | j                   j                  d|f       ddddddddd	d
	gS w)Npositions_getr   r            @BUYT
) )	r)   r   position_idsizeabs_size	avg_pricetypeis_buy
account_idr'   r(   s     r   r+   zFakeAdapter.positions_get:   sG     

?F34- "

 
 
	s   +-c                T   K   | j                   j                  d       dddddddgS w)	N)_raw_positions_searchr      r-   r.   r,   r0   )
contractIdr5   r2   averagePriceid	accountIdr'   r   s    r   r9   z!FakeAdapter._raw_positions_searchH   s<      	

45,#!
  	   &(c           
     \   K   | j                   j                  d|f       dddddddd	d d
	S w)Nplace_market_bracketTE-1S-1T-1    @     @    @ATR)	successentry_idstop_id	target_identry_pricesl_pricetp_price	sl_sourceerrorr'   )r   kws     r   rA   z FakeAdapter.place_market_bracketZ   sE     

1267
 "

 
	
s   *,c                H   K   | j                   j                  d||f       yw)Ncancel_orderTr'   )r   r)   order_ids      r   rT   zFakeAdapter.cancel_orderk   s"     

>68<=s    "c                T   K   | j                   j                  d|f       dg dd dS w)Ncancel_all_orders_for_contract   )r:   r-   rX   )cancelled_count	order_idsrQ   r'   r(   s     r   rW   z*FakeAdapter.cancel_all_orders_for_contracto   s+     

;VDE#$9tLLr?   c                R   K   | j                   j                  d||f       ddddS w)Nclose_positionTCLOSE-1full)rI   orderIdmoder'   )r   r)   r2   bracket_order_idss       r   r\   zFakeAdapter.close_positions   s-     

+VT:;IvFFs   %'c                J   K   | j                   j                  d|||f       yw)N	modify_slTr'   )r   r)   stop_order_idnew_sls       r   rc   zFakeAdapter.modify_slw   s$     

;vFGs   !#r"   NN)__name__
__module____qualname____doc__r   r   r    r#   r%   r+   r9   rA   rT   rW   r\   rc    r   r   r
   r
      sC    >	

 $
"MGr   r
   c                B    t        j                  ddg      }| |_        |S )zBBuild a TopstepXBroker but with a FakeAdapter instead of real one.r   r   )r   TopstepXBroker_adapter)monkey_adapterbs     r   _make_brokerrq      s"    ##UEN3AAJHr   c                ,    t        j                  |       S r"   )asynciorun)coros    r   _runrv      s    ;;tr   c            	     
   t               } t        |       }|j                  } |       }t        |      }d}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}x}x}}|j                  } |       }t        |      }d	}||u }|st	        j
                  d|fd
||f      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}x}x}}|j                  } |       }t        |      }d	}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}x}x}}t        |j                                |j                  } |       }t        |      }d}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}x}x}}t        d       y )NFis)zj%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.is_connected
}()
})
} is %(py10)srv   rp   )py0py1py3py5py7py10zassert %(py12)spy12T)ze%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.connect
}()
})
} is %(py10)sz'OK test_connect_disconnect_is_connected)r
   rq   r#   rv   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr   r    print)	fakerp   @py_assert2@py_assert4@py_assert6@py_assert9@py_assert8@py_format11@py_format13s	            r   $test_connect_disconnect_is_connectedr      s   =DTA* *4 !*U*!U****!U******4***4*************** ***!***U*******		$	$4$$$$$$$$$$$$4$$$4$$$$$$$$$$$$	$$$$$$$$$$$$$$$$) )4 !)T)!T))))!T))))))4)))4))))))))))))))) )))!)))T)))))))* *4 !*U*!U****!U******4***4*************** ***!***U*******	
34r   c                    t        t                     } t        | j                  d            }d}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}}t        d	       y )
Nr   r&   ==z%(py0)s == %(py3)sprz   r|   assert %(py5)sr}   zOK test_get_last_price)rq   r
   rv   get_last_pricer   r   r   r   r   r   r   r   r   )rp   r   r   @py_assert1@py_format4@py_format6s         r   test_get_last_pricer      s    []#AQe$%A1<111	
"#r   c                 
   t        t                     } t        | j                               }t	        |      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d	   }t        |t              }|sd
dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d x}}|d	   }	|	j                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}|d	   }	|	j                   }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}|d	   }	|	j"                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}|d	   }	|	j$                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}|d	   }	|	j&                  }d }||u}|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}t)        d       y )Nr:   r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenpos)rz   r{   r|   py6zassert %(py8)spy8r   z5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}
isinstancer   )rz   py2r|   r}   r   )z.%(py3)s
{%(py3)s = %(py1)s.symbol
} == %(py6)s)r{   r|   r   r/   )z1%(py3)s
{%(py3)s = %(py1)s.direction
} == %(py6)sr-   )z1%(py3)s
{%(py3)s = %(py1)s.contracts
} == %(py6)sr.   )z1%(py3)s
{%(py3)s = %(py1)s.avg_price
} == %(py6)s)is not)z/%(py3)s
{%(py3)s = %(py1)s.raw
} is not %(py6)sz1OK test_positions_get_translates_dict_to_position)rq   r
   rv   r+   r   r   r   r   r   r   r   r   r   r   r   r)   	direction	contractsr4   rawr   )
rp   r   r   @py_assert5r   @py_format7@py_format9r   r   @py_assert0s
             r   .test_positions_get_translates_dict_to_positionr      s)   []#A
q 
!Cs8q8q=8q33ss8q!f':fh'''''''':''':'''f''''''h'''h''''''''''q6!6==!E!=E!!!!=E!!!6!!!=!!!E!!!!!!!q6$6$u$u$$$$u$$$6$$$$$$u$$$$$$$q6 6 q q    q   6      q       q6&6&w&w&&&&w&&&6&&&&&&w&&&&&&&q6!6::!T!:T!!!!:T!!!6!!!:!!!T!!!!!!!	
=>r   c                    t        t                     } t        | j                  dddddddd	            }t	        |t
              }|sd
dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t
              rt        j                  t
              ndt        j                  |      dz  }t        t        j                  |            d }|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                   }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j"                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j$                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j&                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j(                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}t+        d        y )!Nr   r/   r-   rF   rG         rH   )sl_tickstp_ticksrP   5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}r   rr   rz   r{   r   py4Trx   z/%(py2)s
{%(py2)s = %(py0)s.success
} is %(py5)srz   r   r}   assert %(py7)sr~   rE   r   z3%(py2)s
{%(py2)s = %(py0)s.entry_price
} == %(py5)sz0%(py2)s
{%(py2)s = %(py0)s.sl_price
} == %(py5)sz0%(py2)s
{%(py2)s = %(py0)s.tp_price
} == %(py5)srB   z0%(py2)s
{%(py2)s = %(py0)s.entry_id
} == %(py5)srC   z/%(py2)s
{%(py2)s = %(py0)s.stop_id
} == %(py5)srD   z1%(py2)s
{%(py2)s = %(py0)s.target_id
} == %(py5)sz$OK test_place_market_bracket_success)rq   r
   rv   rA   r   r   r   r   r   r   r   r   r   rI   r   rM   rN   rO   rJ   rK   rL   r   )rp   r   @py_assert3@py_format5r   r   r   @py_format8s           r   !test_place_market_bracket_successr      s   []#AQ##uabE $  	A a%%%%%%%%:%%%:%%%%%%a%%%a%%%%%%%%%%%%%%%%%%%9999119==#G#=G####=G######1###1###=###G#######::::11:::::11:::::11:9999119;;%;%;%11;%	
01r   c            	        t               } d }|| _        t        |       }t        |j                  ddddd            }|j                  }d}||u }|st        j                  d|fd	||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|j                  }d}||k(  }|st        j                  d|fd||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|j                  }d}||k(  }|st        j                  d|fd||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|j                  }d}||k(  }|st        j                  d|fd||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|j                   }d}||k(  }|st        j                  d|fd||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|j"                  }d}||k(  }|st        j                  d|fd||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|j$                  }d}||k(  }|st        j                  d|fd||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}t'        d       y)u  
    BUG 8 regression: adapter returns {"entry_id","stop_id","target_id"}
    (V15 TopstepXAdapter riga 1223-1232). The wrapper MUST read these
    adapter-native keys, not the historical "*_order_id" alternates.
    Pre-fix: wrapper looked for "stop_order_id"/"target_order_id" only,
    so a successful bracket landed in OrderResult with stop_id=None and
    target_id=None — and MOVE_SL silently skipped at orchestrator level
    (active.entry.stop_order_id was None).
    c                    K   ddddddddS w)	NT
ID-ENTRY-7	ID-STOP-7ID-TARGET-73333@33333@    @)rI   rJ   rK   rL   rM   rN   rO   rk   rR   s    r   nativezHtest_place_market_bracket_adapter_native_keys_regression.<locals>.native   s%     $"&!
 	
s   MGCSELLr:   r   r   Trx   r   r   r   r   r~   Nr   r   r   r   r   r   r   r   r   r   r   z;OK test_place_market_bracket_adapter_native_keys_regression)r
   rA   rq   rv   rI   r   r   r   r   r   r   r   r   rJ   rK   rL   rM   rN   rO   r   )	r   r   rp   r   r   r   r   r   r   s	            r   8test_place_market_bracket_adapter_native_keys_regressionr      sE    =D	
 !'DTAQ##E61ffEFA9999119::%%:%%%%:%%%%%%1%%%1%%%:%%%%%%%%%%99##9####9######1###1###9##########;;'-';-'''';-''''''1'''1''';'''-'''''''=="F"=F""""=F""""""1"""1"""="""F"""""""::::11:::::11:	
GHr   c            	        t               } d }|| _        t        |       }t        |j                  ddddd            }|j                  }d}||u }|st        j                  d|fd	||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}d}	g }|j                  }
|
}|
sd}|}|	|v }|sdd
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |
      dz  }|j                  |       |
s+ddt        j                        iz  }|j                  |       t        j                  |d      i z  }t        j                  d|fd|	|f      t        j                  |	      |dz  }dd|iz  }t        t        j                  |            d x}	x}x}x}x}
}t!        d       y )Nc                    K   dddS w)NFzno contract cached for FOO)rI   rQ   rk   r   s    r   failz4test_place_market_bracket_failure_dict.<locals>.fail   s      +GHH   FOOr/   r:         ?       @Frx   r   r   r   r   r~   zno contract "%(py7)s
{%(py7)s = %(py5)s.error
}r}   r~   %(py10)sr   inz%(py1)s in (%(py13)s)r{   py13assert %(py15)spy15z)OK test_place_market_bracket_failure_dictr
   rA   rq   rv   rI   r   r   r   r   r   r   r   r   rQ   r   _format_boolopr   r   r   rp   r   r   r   r   r   r   r   r   r   r   r   @py_format12@py_format14@py_format16s                    r   &test_place_market_bracket_failure_dictr      s_   =DI $DTAQ##E5!S#>?A9999119+QWW+W+W++=++++++++Q+++Q+++W++++W++++++++++++=+++=++++++++	
56r   c            	        t               } d }|| _        t        |       }t        |j                  ddddd            }|j                  }d}||u }|st        j                  d|fd	||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}d}	g }|j                  }
|
}|
sd}|}|	|v }|sdd
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |
      dz  }|j                  |       |
s+ddt        j                        iz  }|j                  |       t        j                  |d      i z  }t        j                  d|fd|	|f      t        j                  |	      |dz  }dd|iz  }t        t        j                  |            d x}	x}x}x}x}
}t!        d       y )Nc                     K   t        d      w)Nnetwork down)RuntimeErrorr   s    r   boomz1test_place_market_bracket_exception.<locals>.boom   s     >**s   r   r/   r:   r   r   Frx   r   r   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   z&OK test_place_market_bracket_exceptionr   )r   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                    r   #test_place_market_bracket_exceptionr      s^   =D+ $DTAQ##E5!S#>?A9999119,agg,g,g,,>,,,,,,,,a,,,a,,,g,,,,g,,,,,,,,,,,,>,,,>,,,,,,,,	
23r   c                    t               } t        |       }t        |j                  dd            }t	        |t
              }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t
              rt        j                  t
              ndt        j                  |      dz  }t        t        j                  |            d }|j                  }d}||u }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}d }	|	| _        t        |j                  dd            }|j                  }d}||u }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                   }|syddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }
t        t        j                  |
            d }t#        d       y )Nr   12345r   r   r   r   r   Trx   r   r   r   r~   r   )z0%(py2)s
{%(py2)s = %(py0)s.order_id
} == %(py5)sc                   K   yw)NFrk   )r)   rU   s     r   r   z3test_cancel_order_success_and_failure.<locals>.fail  s	     s   Fz)assert %(py2)s
{%(py2)s = %(py0)s.error
})rz   r   z(OK test_cancel_order_success_and_failure)r
   rq   rv   rT   r   r   r   r   r   r   r   r   r   rI   r   rU   rQ   r   )r   rp   r   r   r   r   r   r   r   r   @py_format3s              r   %test_cancel_order_success_and_failurer      sU   =DTAQ^^E7+,Aa&&&&&&&&:&&&:&&&&&&a&&&a&&&&&&&&&&&&&&&&&&&9999119::  :    :      1   1   :          DQ^^E7+,A999911977N7NNNNN1NNN1NNN7NNNNNN	
45r   c                    t        t                     } t        | j                  d            }d}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}}t        d	       y )
Nr   rX   r   r   nr   r   r}   z+OK test_cancel_all_for_symbol_returns_count)rq   r
   rv   cancel_all_for_symbolr   r   r   r   r   r   r   r   r   )rp   r   r   r   r   r   s         r   (test_cancel_all_for_symbol_returns_countr     sm    []#AQ$$U+,AM16MMM1MMMMMM1MMM1MMMMMMMMMM	
78r   c                    t        t                     } t        | j                  d            }|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}t        d       y )Nr   Trx   r   r   r   r   r~   r]   r   r   zOK test_close_position_success)rq   r
   rv   r\   rI   r   r   r   r   r   r   r   r   rJ   r   )rp   r   r   r   r   r   r   s          r   test_close_position_successr     s   []#AQe$%A9999119::"":"""":""""""1"""1""":""""""""""	
*+r   c                    t               } dd}|| _        t        |       }t        |j                  d            }|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}d
}	g }|j                  }
|
}|
sd}|}|	|v }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |
      dz  }|j                  |       |
s+ddt        j                        iz  }|j                  |       t        j                  |d      i z  }t        j                  d|fd|	|f      t        j                  |	      |dz  }dd|iz  }t        t        j                  |            d x}	x}x}x}x}
}t!        d       y )Nc                   K   dddS w)NFposition not found)rI   errorMessagerk   )r)   r2   ra   s      r   r   z)test_close_position_failure.<locals>.fail#  s      2FGGr   r   Frx   r   r   r   r   r~   r   r   r   r   r   r   r:   r   r   r   r   r   zOK test_close_position_failurerf   )r
   r\   rq   rv   rI   r   r   r   r   r   r   r   r   rQ   r   r   r   r   s                    r   test_close_position_failurer      sZ   =DHDTAQe$%A99991192AGG2G2Gr2r222222222A222A222G2222G222r22222222222222222222	
*+r   c                    t               } t        |       }t        |j                  ddd            }|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}d | j                  D        }t!        |      }|sddt        j                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d x}}t#        d       y )Nr   r   g    @@Trx   r   r   r   r   r~   r   r   r   c              3  @   K   | ]  }|d    dk(  xr |d   dk(    yw)r   rc   r:   r   Nrk   ).0cs     r   	<genexpr>z+test_modify_stop_success.<locals>.<genexpr>5  s)     Iqt{"4qtu}4Is   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}any)rz   r   r   zOK test_modify_stop_success)r
   rq   rv   modify_stoprI   r   r   r   r   r   r   r   r   rN   rK   r   r  r   )	r   rp   r   r   r   r   r   r   r   s	            r   test_modify_stop_successr  .  s   =DTAQ]]5'734A9999119::  :    :      1   1   :          9999119IdjjII3IIIIIIIII3III3IIIIIIIIIIIIII	
'(r   __main__z4
=== all topstepx_v16 wrapper smoke tests passed ===)ro   r
   )*rj   
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   rs   syspathlibr   pathinsertstr__file__resolveparentbroker.broker_baser   r   r   brokerr   r
   rq   rv   r   r   r   r   r   r   r   r   r   r   r   r  rg   r   rk   r   r   <module>r     s
  
 #    
  3tH~--/66==> ? B B \ \F5$
?2""IJ746"9,,) z(*24%'<>*,'))+,.!!	
AB r   