
    %i8                         S r SSKrSSKJs  Jr  SSKrSSKrSSK	r	SSK
JrJrJr  SSKJr   " S S5      r " S S5      rg)	z$Tests for TAB Affiliates API client.    N)	TABClientTABClientErrorTABRateLimitError)MockTABClientc                   p   \ rS rSrSr\R                  R                  S 5       r\R                  R                  S 5       r	\R                  R                  \
R                  S 5       5       r\R                  R                  \
R                  S 5       5       r\R                  R                  \
R                  S 5       5       r\R                  R                  \
R                  S 5       5       r\R                  R                  \
R                  S	 5       5       r\R                  R                  \
R                  S
 5       5       r\R                  R                  \
R                  S 5       5       r\R                  R                  \
R                  S 5       5       r\R                  R                  S 5       rSrg)TestTABClient   zTests for TABClient class.c                 f  #    [        5        ISh  vN nUR                  o"R                  nSoCU:H  oU(       d  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=n=pTUR                  o"R                  nS	oCU:H  oU(       d  [        R                  " SU4S
X445      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=n=pTUR                  o"R                  nSoCU:H  oU(       d  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=n=pTSSS5      ISh  vN   g GN N! , ISh  vN  (       d  f       g= f7f)z9Test TAB client can be initialized with default settings.Nz#https://api.tab.co.nz/affiliates/v1==)zP%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.tab_config
}.base_url
} == %(py7)sclientpy0py2py4py7assert %(py9)spy9g      >@)zO%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.tab_config
}.timeout
} == %(py7)s   )zS%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.tab_config
}.max_retries
} == %(py7)s)r   
tab_configbase_url
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationtimeoutmax_retries)selfr   @py_assert1@py_assert3@py_assert6@py_assert5@py_format8@py_format10s           :/root/tipsharks/tipsharks-elo-api/tests/test_tab_client.pytest_client_initialization(TestTABClient.test_client_initialization   s     ;;&$$V--V1VV1VVVVVV-VVVVVV6VVVV6VVV$VVV-VVV1VVVVVVVV$$4,,4444444,444444644446444$444,4444444444$$5005A5A555550555555655556555$5550555A5555555 ;;;;;sE   L1LL1K,LL1LL1L1L.L L.*L1c           	      
  #    [        5        ISh  vN nUR                  nSo2ULoD(       d  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pCUR                  nSo2ULoD(       d  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pCUR                  nS	n[        Xs5      o(       Gd  S
S[        R
                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=n=p8UR                  nSn[        Xs5      o(       Gd  S
S[        R
                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=n=p8UR                  nSn[        Xs5      o(       Gd  S
S[        R
                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=n=p8SSS5      ISh  vN   g GN7 N! , ISh  vN  (       d  f       g= f7f)z2Test TAB client reads configuration from settings.Nis not)z4%(py2)s
{%(py2)s = %(py0)s.settings
} is not %(py5)sr   r   r   py5assert %(py7)sr   )z6%(py2)s
{%(py2)s = %(py0)s.tab_config
} is not %(py5)sr   zUassert %(py7)s
{%(py7)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.tab_config
}, %(py5)s)
}hasattr)r   py1py3r0   r   r    r!   )r   settingsr   r   r   r   r   r   r   r   r   r2   )	r"   r   r#   @py_assert4r$   @py_format6r'   @py_assert2r%   s	            r)   test_client_reads_from_settings-TestTABClient.test_client_reads_from_settings   s     ;;&??.$.$.....?......6....6...?...$.......$$0D0D00000$000000600006000$000D0000000!,,9j97,999999999799997999999699996999,999j9999999999!,,8i87,888888888788887888888688886888,888i8888888888!,,<m<7,<<<<<<<<<7<<<<7<<<<<<6<<<<6<<<,<<<m<<<<<<<<<< ;;;;;sE   U'UU'T"U7U'UU'U'U$UU$ U'c                   #    SSSSSSS./0n[         R                  " S5      R                  [        R                  " S	US
9S9  [        5        ISh  vN nUR                  SS5      I Sh  vN nSSS5      ISh  vN   [        W5      nSoTU:H  of(       Gd  [        R                  " SU4SXE45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=peUS   S   n	SoU
:H  oD(       do  [        R                  " SU4SX45      [        R                  " U	5      [        R                  " U
5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n	=pJUS   S   n	SoU
:H  oD(       do  [        R                  " SU4SX45      [        R                  " U	5      [        R                  " U
5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n	=pJg GNj GNS GNF! , ISh  vN  (       d  f       GN\= f7f)z#Test successful meetings retrieval.meetingsMEET123	Cambridge
2024-01-15HNZ)meetingnamedatecategorycountry3https://api.tab.co.nz/affiliates/v1/racing/meetings   jsonreturn_valueN   r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr   r3   r4   py6assert %(py8)spy8r   rB   z%(py1)s == %(py4)sr3   r   assert %(py6)srP   rC   )respxgetmockhttpxResponser   get_meetingsrN   r   r   r   r   r   r   r   r   )r"   mock_responser   r<   r8   r&   r6   @py_format7@py_format9@py_assert0r$   @py_format5s               r)   test_get_meetings_success'TestTABClient.test_get_meetings_success%   s    
 ('( ##

 			GHMM-@ 	N 	
 ;;&#00|LLH ; 8}!!!!!!!}!!!!!!s!!!!s!!!!!!8!!!!8!!!}!!!!!!!!!!{9%2222222%222%2222222222{6"1k1k11111"111"111k1111111 L ;;;s[   AK J<K K,J?-K1K <K=I K ?KK KKKK c                 t  #    S/ 0n[         R                  " SSSSSS.S9R                  [        R                  " SUS	9S
9n[        5        ISh  vN nUR                  SSSSS9I Sh  vN   SSS5      ISh  vN   UR                  oD(       d  SS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  n[        [        R                  " U5      5      eSng N N N! , ISh  vN  (       d  f       N= f7f)z:Test meetings retrieval with category and country filters.r<   rG   r?   TrA   )	date_fromdate_torE   rF   )paramsrH   rI   rK   N)rE   rF   z*assert %(py2)s
{%(py2)s = %(py0)s.called
}router   r   )rV   rW   rX   rY   rZ   r   r[   calledr   r   r   r   r   r   r   )r"   r\   rh   r   r#   @py_format3s         r)   test_get_meetings_with_filters,TestTABClient.test_get_meetings_with_filters@   s      $R(		A)'	
 $ENN3]C$
D 	 ;;&%%lS$ &    ;
 |||uu|  ;;;s[   AD8DD8D)D*D.D89D:BD8DD8D5$D'%D51D8c                 `  #    SSSSSS./0n[         R                  " S5      R                  [        R                  " SUS	9S
9  [        5        ISh  vN nUR                  S5      I Sh  vN nSSS5      ISh  vN   WS   nSoTU:H  of(       do  [        R                  " SU4SXE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=peUS   nSoTU:H  of(       do  [        R                  " SU4SXE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=peg GN9 GN# GN! , ISh  vN  (       d  f       GN,= f7f)z)Test successful single meeting retrieval.r<   r=   r>   r?   r@   )rB   rC   rD   rE   z;https://api.tab.co.nz/affiliates/v1/racing/meetings/MEET123rH   rI   rK   NrB   r   rS   rT   rU   rP   rC   )rV   rW   rX   rY   rZ   r   get_meetingr   r   r   r   r   )	r"   r\   r   rB   r_   r$   r8   r`   r]   s	            r)   test_get_meeting_success&TestTABClient.test_get_meeting_successW   s,     ('( #		
 			OPUU-@ 	V 	
 ;;&"..y99G ; y!.Y.Y.....!...!...Y.......v-+-+-----------+-------	 9 ;;;s[   AF.F
F.F*F+F/F.:F;DF.FF.F+FF+&F.c                 p  #    SSSSS./ / S.0n[         R                  " S5      R                  [        R                  " SUS	9S
9  [        5        ISh  vN nUR                  S5      I Sh  vN nSSS5      ISh  vN   WS   S   nSoTU:H  of(       do  [        R                  " SU4SXE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=peUS   S   nSoTU:H  of(       do  [        R                  " SU4SXE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=peg GN? GN) GN! , ISh  vN  (       d  f       GN2= f7f)z Test successful event retrieval.dataEVT456rM   i  )event_idrace_numberdistance)racerunnersresultsz8https://api.tab.co.nz/affiliates/v1/racing/events/EVT456rH   rI   rK   Nrx   ru   r   rS   rT   rU   rP   rv   )rV   rW   rX   rY   rZ   r   	get_eventr   r   r   r   r   )	r"   r\   r   eventr_   r$   r8   r`   r]   s	            r)   test_get_event_success$TestTABClient.test_get_event_successq   s6     %-aTR
 			LMRR-@ 	S 	
 ;;& **844E ; V}Z(4H4H44444(444(444H4444444V}]+0q0q00000+000+000q0000000 4 ;;;s[   AF6FF6F,F-F1F6<F=DF6FF6F3!F$"F3.F6c                   #    [         R                  " S5      R                  [        R                  " SSS0S9[        R                  " SS/ 0S9/S9  [        5        IS	h  vN nUR                  S
S
5      I S	h  vN nS	S	S	5      IS	h  vN   / nWU:H  oD(       d  [        R                  " SU4SX#45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=pCg	 N N N! , IS	h  vN  (       d  f       N= f7f)z)Test client retries on 500 server errors.rG   i  errorzServer errorrI   rH   r<   side_effectNr?   r   )z%(py0)s == %(py3)sr   r4   assert %(py5)sr0   )rV   rW   rX   rY   rZ   r   r[   r   r   r   r   r   r   r   r   )r"   r   r<   r8   r#   @py_format4r7   s          r)   test_retry_on_server_error(TestTABClient.test_retry_on_server_error   s     
 			GHMMs'>)BCs*b)9: 	N 	
 ;;&#00|LLH ; x2~xxx2	 L ;;;s[   AE% E!E%$E:E;E?E%
E	B;E%E	E%E"EE"E%c                   #    [         R                  " S5      R                  [        R                  " SSS0S9S9  [        5        ISh  vN n[        R                  " [        5         UR                  SS5      I Sh  vN   SSS5        SSS5      ISh  vN   g NR N! , (       d  f       N#= f N! , ISh  vN  (       d  f       g= f7f)	z-Test client handles 429 rate limit responses.rG   i  r   zRate limit exceededrI   rK   Nr?   )
rV   rW   rX   rY   rZ   r   pytestraisesr   r[   r"   r   s     r)   test_rate_limit_handling&TestTABClient.test_rate_limit_handling   s      			GHMM7<Q2RS 	N 	
 ;;&01)),EEE 2 ;;E 21 ;;;sr   AC	B
CB3(B >B?B B3CB1CB  
B.	*B31C3C
9B<:C
Cc                   #    [         R                  " S5      R                  [        R                  " SSS0S9S9  [        5        ISh  vN n[        R                  " [        SS9   UR                  S	S	5      I Sh  vN   SSS5        SSS5      ISh  vN   g NQ N! , (       d  f       N#= f N! , ISh  vN  (       d  f       g= f7f)
z5Test client raises TABClientError on 400 bad request.rG   i  r   zBad requestrI   rK   Nmatchr?   )
rV   rW   rX   rY   rZ   r   r   r   r   r[   r   s     r)   test_client_error_on_400&TestTABClient.test_client_error_on_400   s      			GHMM7M2JK 	N 	
 ;;&~]C)),EEE D ;;E DC ;;;sr   AC	B
CB2'B=B>BB2
CB0CB
B-	)B20C2C	8B;9C	Cc                   #    [         R                  " S5      R                  [        R                  " S5      S9  [        5        ISh  vN n[        R                  " [        SS9   UR                  SS5      I Sh  vN   SSS5        SSS5      ISh  vN   g NQ N! , (       d  f       N#= f N! , ISh  vN  (       d  f       g= f7f)z%Test client handles network timeouts.rG   zRequest timeoutr   Nr   r?   )
rV   rW   rX   rY   TimeoutExceptionr   r   r   r   r[   r   s     r)   test_network_timeout"TestTABClient.test_network_timeout   s      			GHMM../@A 	N 	
 ;;&~5FG)),EEE H ;;E HG ;;;sr   ACB	CB1&B<B=BB1	CB/CB
B,	(B1/C1C7B:8CCc                 p  #    [        5       nU ISh  vN   UR                  nSo2ULoD(       d  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pCUR                  o"R                  oD(       + ow(       d  SS[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  n[        [        R                  " U5      5      eS=n=pGSSS5      ISh  vN   UR                  nSo2UL oD(       d  [        R                  " S
U4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pCg GN N! , ISh  vN  (       d  f       N= f7f)z.Test TABClient works as async context manager.Nr-   )z3%(py2)s
{%(py2)s = %(py0)s._client
} is not %(py5)sr   r/   r1   r   zNassert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s._client
}.is_closed
})r   r   r   )is)z/%(py2)s
{%(py2)s = %(py0)s._client
} is %(py5)s)r   _clientr   r   r   r   r   r   r   r   	is_closed)r"   r   r#   r6   r$   r7   r'   r&   s           r)   test_context_manager"TestTABClient.test_context_manager   sl     6>>------->------6----6--->----------~~/////////////v////v///~////////// 6
 ~~%%%%%%%~%%%%%%v%%%%v%%%~%%%%%%%%%% 666sF   J6JJ6FJ0J6;J<CJ6J6J3"J%#J3/J6 N)__name__
__module____qualname____firstlineno____doc__r   markasyncior*   r9   rV   rX   ra   rl   rp   r}   r   r   r   r   r   __static_attributes__r       r)   r   r      s   $[[6 6 [[= = [[
ZZ2  22 [[
ZZ  * [[
ZZ.  .0 [[
ZZ1  1, [[
ZZ    [[
ZZF  F [[
ZZF  F [[
ZZF  F [[& &r   r   c                      \ rS rSrSr\R                  R                  S 5       r\R                  R                  S 5       r	\R                  R                  S 5       r
\R                  R                  S 5       r\R                  R                  S 5       r\R                  R                  S 5       r\R                  R                  S	 5       r\R                  R                  S
 5       r\R                  R                  S 5       r\R                  R                  S 5       r\R                  R                  S 5       r\R                  R                  S 5       rSrg)TestMockTABClient   zTests for MockTABClient class.c                   #    [        5        ISh  vN nSo!ULo3(       d  [        R                  " SU4SX45      S[        R                  " 5       ;   d  [        R
                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=p2SSS5      ISh  vN   g N N! , ISh  vN  (       d  f       g= f7f)z$Test mock client can be initialized.Nr-   )z%(py0)s is not %(py3)sr   r   r   r0   )	r   r   r   r   r   r   r   r   r   )r"   r   r8   r#   r   r7   s         r)   test_mock_client_initialization1TestMockTABClient.test_mock_client_initialization   sz      !??f!%%%%%%%6%%%%%%6%%%%6%%%%%%%%%% #?????sE   C8CC8B4C	C8CC8C8C5$C'%C51C8c                 B  #    [        5        ISh  vN nUR                  SS5      I Sh  vN nSSS5      ISh  vN   [        W5      nSoCU:  oU(       Gd  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=pTSoS   oU	;   o3(       do  [        R                  " SU4SX45      [        R                  " U5      [        R                  " U	5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS=n=p9SoS   oU	;   o3(       do  [        R                  " SU4SX45      [        R                  " U5      [        R                  " U	5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS=n=p9SoS   oU	;   o3(       do  [        R                  " SU4SX45      [        R                  " U5      [        R                  " U	5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS=n=p9SoS   oU	;   o3(       do  [        R                  " SU4SX45      [        R                  " U5      [        R                  " U	5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS=n=p9g GNj GNS GNF! , ISh  vN  (       d  f       GN\= f7f)z'Test mock client returns meetings data.N
2024-12-26rM   >=z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)srN   r<   rO   rQ   rR   rB   r   inz%(py1)s in %(py4)srT   rU   rP   rC   rD   rE   r   r[   rN   r   r   r   r   r   r   r   r   )r"   r   r<   r8   r&   r6   r]   r^   r_   r$   r`   s              r)   test_mock_get_meetings(TestMockTABClient.test_mock_get_meetings   s     !??f#00|LLH #? 8}!!!!!!!}!!!!!!s!!!!s!!!!!!8!!!!8!!!}!!!!!!!!!!'QK'K'''''y'''y'''K'''''''$!$$$$$$v$$$v$$$$$$$$$$$!$$$$$$v$$$v$$$$$$$$$$(a[([(((((z(((z((([((((((( #L #???sR   NM;NNM>NNNM N>NNN
NNNc           	        #    [        5        ISh  vN nUR                  SS5      I Sh  vN nUR                  SS5      I Sh  vN nSSS5      ISh  vN   [        W5      n[        W5      oTU:H  of(       Gd  [        R                  " SU4SXE45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=peUS   S   oS   S   oU
:H  oD(       do  [        R                  " SU4SX45      [        R                  " U	5      [        R                  " U
5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n	=pJg GN GN GNz GNm! , ISh  vN  (       d  f       GN= f7f)z1Test mock client returns same data for same date.Nr   r   )zN%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py8)s
{%(py8)s = %(py5)s(%(py6)s)
}rN   	meetings1	meetings2r   r3   r4   r0   rP   rR   assert %(py10)spy10r   rB   rS   rT   rU   rP   r   )r"   r   r   r   r8   @py_assert7r6   r^   @py_format11r_   r$   r`   r]   s                r)   $test_mock_get_meetings_deterministic6TestMockTABClient.test_mock_get_meetings_deterministic   s     !??f$11,MMI$11,MMI #? 9~/Y//////~//////s////s//////9////9///~////////////////Y////Y//////////|I&AA,y*AA*AAAAAA&AAA&AAA*AAAAAAAA #MM #???sg   K J9K KJ<KJ?K
K KI$K <K?KK KKKK c                   #    [        5        ISh  vN nUR                  SS5      I Sh  vN nUR                  SS5      I Sh  vN nSSS5      ISh  vN   WS   S   nWS   S   oTU:g  of(       do  [        R                  " SU4SXE45      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=peg N N N N! , ISh  vN  (       d  f       N= f7f)z<Test mock client returns different data for different dates.Nr   z
2024-12-27r   rB   !=)z%(py1)s != %(py4)srT   rU   rP   r   r[   r   r   r   r   r   )	r"   r   r   r   r_   r$   r8   r`   r]   s	            r)   &test_mock_get_meetings_different_dates8TestMockTABClient.test_mock_get_meetings_different_dates   s      !??f$11,MMI$11,MMI #?
 |I&A)A,y*AA*AAAAAA&AAA&AAA*AAAAAAAA #MM #???sg   DC)DC1C+C1C-C1
DC/BD+C1-C1/D1D7C:8DDc                   #    [        5        ISh  vN nUR                  SSSS9I Sh  vN nSSS5      ISh  vN   W H  nUS   nSoTU:H  of(       do  [        R                  " SU4SXE45      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=peM     g N N N! , ISh  vN  (       d  f       N= f7f)z*Test mock client respects category filter.Nr   rd   )rE   rE   r   rS   rT   rU   rP   r   )	r"   r   r<   rB   r_   r$   r8   r`   r]   s	            r)   +test_mock_get_meetings_with_category_filter=TestMockTABClient.test_mock_get_meetings_with_category_filter   s      !??f#00lS 1  H #?  G:&-#-#-----&---&---#-------   # #???sR   C.CC.CCCC.CBC.CC.C+CC+'C.c                   #    [        5        ISh  vN nUR                  SS5      I Sh  vN nUS   S   nUR                  U5      I Sh  vN nSSS5      ISh  vN   WS   oUW:H  of(       d  [        R                  " SU4SXS45      [        R
                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R
                  " U5      OSS.-  nS	S
U0-  n[        [        R                  " U5      5      eS=pVSoUU;   of(       d  [        R                  " SU4SXT45      [        R
                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R
                  " U5      OSS.-  nS	S
U0-  n[        [        R                  " U5      5      eS=pVSoUU;   of(       d  [        R                  " SU4SXT45      [        R
                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R
                  " U5      OSS.-  nS	S
U0-  n[        [        R                  " U5      5      eS=pVSoUU;   of(       d  [        R                  " SU4SXT45      [        R
                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R
                  " U5      OSS.-  nS	S
U0-  n[        [        R                  " U5      5      eS=pVg GN$ GN GN GN! , ISh  vN  (       d  f       GN= f7f)z-Test mock client returns single meeting data.Nr   r   rB   r   z%(py1)s == %(py3)s
meeting_idr3   r4   r   r0   rC   r   z%(py1)s in %(py3)srD   races)r   r[   ro   r   r   r   r   r   r   r   r   )	r"   r   r<   r   rB   r_   r8   r   r7   s	            r)   test_mock_get_meeting'TestMockTABClient.test_mock_get_meeting  s     !??f#00|LLH!!Y/J #..z::G #? y!/Z/////!///!//////Z////Z///////      v   v                       v   v                 !'!!!!!w!!!w!!!!!!'!!!!'!!!!!!! #L ; #???sg   ML5MML8 ML;MML>KM8M;M>MMM
MMc                   #    [        5        ISh  vN nUR                  SS5      I Sh  vN nUR                  US   S   5      I Sh  vN nSSS5      ISh  vN   WS   n[        U5      nSoeU:  ow(       d  [        R
                  " SU4SXV45      S	[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS	[        R                  " U5      [        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n	[        [        R                  " U	5      5      eS=n=n=pvSoS   S   oZU;   o(       do  [        R
                  " SU4SX45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n
=pg GN GN GN GN! , ISh  vN  (       d  f       GN= f7f)zTest mock meeting has race IDs.Nr   r   rB   r   rM   r   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} >= %(py7)srN   r   r   r   idr   r   rT   rU   rP   )r   r[   ro   rN   r   r   r   r   r   r   r   r   )r"   r   r<   rB   r#   r$   r%   r&   r'   r(   r_   r8   r`   r]   s                 r)   test_mock_get_meeting_has_races1TestMockTABClient.test_mock_get_meeting_has_races  s<     !??f#00|LLH"..x{9/EFFG #? 7#)s#$)))))))$))))))s))))s)))#)))$))))))))))*w'********t***t*********** #LF #???sg   HG!HG-G$G-
G'G-HG*FH$G-'G-*H-H3G64H Hc                   #    [        5        ISh  vN nUR                  SS5      I Sh  vN nUR                  US   S   5      I Sh  vN nUS   S   S   nUR                  U5      I Sh  vN nSSS5      ISh  vN   SofW;   ow(       d  [        R
                  " SU4S	Xe45      [        R                  " U5      S
[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
S.-  nSSU0-  n	[        [        R                  " U	5      5      eS=pgSofU;   ow(       d  [        R
                  " SU4S	Xe45      [        R                  " U5      S
[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
S.-  nSSU0-  n	[        [        R                  " U	5      5      eS=pgSofU;   ow(       d  [        R
                  " SU4S	Xe45      [        R                  " U5      S
[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
S.-  nSSU0-  n	[        [        R                  " U	5      5      eS=pgUS   n
SofU
;   ow(       d  [        R
                  " SU4S	Xj45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U
5      (       a  [        R                  " U
5      OSS.-  nSSU0-  n	[        [        R                  " U	5      5      eS=pgU
S   ofW:H  ow(       d  [        R
                  " SU4SXd45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n	[        [        R                  " U	5      5      eS=pgSofU
;   ow(       d  [        R
                  " SU4S	Xj45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U
5      (       a  [        R                  " U
5      OSS.-  nSSU0-  n	[        [        R                  " U	5      5      eS=pgSofU
;   ow(       d  [        R
                  " SU4S	Xj45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U
5      (       a  [        R                  " U
5      OSS.-  nSSU0-  n	[        [        R                  " U	5      5      eS=pgSofU
;   ow(       d  [        R
                  " SU4S	Xj45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U
5      (       a  [        R                  " U
5      OSS.-  nSSU0-  n	[        [        R                  " U	5      5      eS=pgg GN GN GN GN GN! , ISh  vN  (       d  f       GN= f7f)zDTest mock client returns event data with race, runners, and results.Nr   r   rB   r   r   rx   r   r   r|   r   r   r0   ry   rz   ru   r   r   rv   rw   advertised_start_string)r   r[   ro   r{   r   r   r   r   r   r   r   r   )r"   r   r<   rB   ru   r|   r_   r8   r   r7   rx   s              r)   test_mock_get_event%TestMockTABClient.test_mock_get_event  sy     !??f#00|LLH"..x{9/EFFGw'*40H !**844E #? vv!E!!!!!y!!!y!!!!!!E!!!!E!!!!!!!!E!!!!!y!!!y!!!!!!E!!!!E!!!!!!! V}!T!!!!!z!!!z!!!!!!T!!!!T!!!!!!!J+8++++++++++++++8++++8+++++++$$$$$$}$$$}$$$$$$$$$$$$$$$$$!T!!!!!z!!!z!!!!!!T!!!!T!!!!!!!(0D00000(000(000000D0000D0000000' #LF 5 #???sy   YX,YX;X/X;
X2#X;.X5/X;3Y>X8?V.Y/X;2X;5X;8Y;YYYYc                   #    [        5        ISh  vN nUR                  SS5      I Sh  vN nUR                  US   S   5      I Sh  vN nUR                  US   S   S   5      I Sh  vN nSSS5      ISh  vN   WS   n[	        U5      nSovU:  o(       Gd  [
        R                  " S	U4S
Xg45      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OSS[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      [
        R                  " U5      S.-  n	SSU	0-  n
[        [
        R                  " U
5      5      eS=n=pUS   nSoU;   of(       d  [
        R                  " SU4SX45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS=pSoU;   of(       d  [
        R                  " SU4SX45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS=pSoU;   of(       d  [
        R                  " SU4SX45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS=pSoU;   of(       d  [
        R                  " SU4SX45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS=pSoU;   of(       d  [
        R                  " SU4SX45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS=pSoU;   of(       d  [
        R                  " SU4SX45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS=pSoU;   of(       d  [
        R                  " SU4SX45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS=pg GN GNz GN^ GN? GN2! , ISh  vN  (       d  f       GNH= f7f)z2Test mock event has runners with proper structure.Nr   r   rB   r   r   ry      r   r   rN   rO   rQ   rR   
entrant_idr   r   runnerr   r   r0   runner_numberbarrierrC   horse_idjockeytrainer_name)r   r[   ro   r{   rN   r   r   r   r   r   r   r   r   )r"   r   r<   rB   r|   ry   r8   r&   r6   r]   r^   r   r_   r   r7   s                  r)   test_mock_event_has_runners-TestMockTABClient.test_mock_event_has_runners3  s     !??f#00|LLH"..x{9/EFFG **77+;A+>t+DEEE #?
 	"7| q q     |      s    s      7    7   |   q        %v%%%%%|%%%|%%%%%%v%%%%v%%%%%%%(&((((((((((((((&((((&((((((("F"""""y"""y""""""F""""F"""""""vv#V#####z###z######V####V#######!6!!!!!x!!!x!!!!!!6!!!!6!!!!!!!''''''~'''~'''''''''''''''''! #LFE #???sy   [Z"[Z1Z%Z1
Z(!Z1,Z+-Z11[<Z.=X&[%Z1(Z1+Z1.[1[	7Z:8[	[c           	        #    [        5        ISh  vN nUR                  SS5      I Sh  vN nUR                  US   S   5      I Sh  vN nUR                  US   S   S   5      I Sh  vN nSSS5      ISh  vN   WS   nUS   n[	        U5      nSoU:  o(       Gd  [
        R                  " S	U	4S
Xx45      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OSS[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      [
        R                  " U5      S.-  n
SSU
0-  n[        [
        R                  " U5      5      eS=n=p[	        U5      n[	        U5      oU:*  o(       Gd  [
        R                  " SU	4SX|45      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OSS[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OSS[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS=n=pUS   nSoU;   ow(       d  [
        R                  " SU4SX45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS=pSoU;   ow(       d  [
        R                  " SU4SX45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS=pU Vs1 s H  nUS   iM
     nnU Vs1 s H  nUS   iM
     nnUR                  nU" U5      o(       d  SS[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U	5      S.-  n[        [
        R                  " U5      5      eS=nn	g GN GN GN GN GN! , ISh  vN  (       d  f       GN= fs  snf s  snf 7f) z-Test mock event has results matching runners.Nr   r   rB   r   r   rz   ry   )>)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)srN   rO   rQ   rR   )<=)zN%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} <= %(py8)s
{%(py8)s = %(py5)s(%(py6)s)
}r   r   r   r   r   r   resultr   r   r0   positionzJassert %(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.issubset
}(%(py3)s)
}
result_ids
runner_ids)r   r   r4   r0   )r   r[   ro   r{   rN   r   r   r   r   r   r   r   r   issubset)r"   r   r<   rB   r|   rz   ry   r8   r&   r6   r]   r^   r   r   r   r_   r   r7   rr   r   r#   s                         r)   test_mock_event_has_results-TestMockTABClient.test_mock_event_has_resultsH  s     !??f#00|LLH"..x{9/EFFG **77+;A+>t+DEEE #?
 	"	" 7|aa|ss77|a7|+s7|+|+++++|++++++s++++s++++++7++++7+++|++++++s++++s++++++7++++7+++|+++++++ %v%%%%%|%%%|%%%%%%v%%%%v%%%%%%%#V#####z###z######V####V####### 077w!aow
7/67w!aow
7"".":.........z....z..."......:....:..........) #LFE #???$ 87s   YX!YX0X$X0
X'!X0,X*-X01Y<X-=Q:Y7YYYDY$X0'X0*X0-Y0Y6X97YYc                 "  #    [        5       nUR                  S5      nUR                  S5      nX#:H  oD(       d  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS	nUR                  S
5      nX':g  oD(       d  [        R                  " SU4SX'45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS	ng	7f)z)Test mock ID generation is deterministic.	test_seedr   )z%(py0)s == %(py2)sid1id2ri   zassert %(py4)sr   Ndifferent_seedr   )z%(py0)s != %(py2)sid3)
r   _generate_deterministic_idr   r   r   r   r   r   r   r   )r"   r   r   r   r#   rk   r`   r   s           r)   %test_mock_id_generation_deterministic7TestMockTABClient.test_mock_id_generation_deterministica  s      //<//<zssscc //0@Azsssccs   HHc           
        #    [        5        ISh  vN nUR                  SS5      I Sh  vN nUR                  US   S   5      I Sh  vN nSSS5      ISh  vN   WS   n[        U5      nSoeU:H  ow(       d  [        R
                  " SU4SXV45      S	[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS	[        R                  " U5      [        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n	[        [        R                  " U	5      5      eS=n=n=pvUS    V
s/ s H  oS   PM	     nn
SnSn[        X5      n[        U5      oU:H  oD(       Gd  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=n=n=pg GN GN GN GN! , ISh  vN  (       d  f       GN= fs  sn
f 7f)z%Test mock meeting has multiple races.Nr   r   rB   r   r   r   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)srN   r   r   r   rv   rM   	   )zY%(py0)s == %(py11)s
{%(py11)s = %(py2)s(%(py9)s
{%(py9)s = %(py3)s(%(py5)s, %(py7)s)
})
}race_numberslistrange)r   r   r4   r0   r   r   py11zassert %(py13)spy13)r   r[   ro   rN   r   r   r   r   r   r   r   r   r   r   )r"   r   r<   rB   r#   r$   r%   r&   r'   r(   r   r   r6   @py_assert8@py_assert10@py_format12@py_format14s                    r)   #test_mock_multiple_races_in_meeting5TestMockTABClient.test_mock_multiple_races_in_meetingp  s     !??f#00|LLH"..x{9/EFFG #?
 7#)s#$)))))))$))))))s))))s)))#)))$)))))))))) 3:'2BC2BQ-(2BC*+0Q0E!K0tK00000000|000000|0000|000000t0000t000000E0000E000!000Q000K000000000000 #LF #??? Dst   ML)ML5L,L5
L/L5ML2DM M.F<M,L5/L52M5M;L><MMr   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r)   r   r      so   ([[& & [[	) 	) [[B B [[B B [[	. 	. [[" " [[+ + [[1 1. [[( (( [[/ /0 [[  [[1 1r   r   )r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   rY   r   rV   packages.tab_client.clientr   r   r   packages.tab_client.mock_clientr   r   r   r   r   r)   <module>r     s=    *      
 :y& y&xq1 q1r   