
    ri*.                     @   d Z ddlZddlZej                  j	                  dej                  j                  ej                  j                  e      d             ddlmZm	Z	m
Z
 ddlmZ ddlmZmZmZ ddlmZ ddlm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!d Z"d Z#d Z$d Z%d Z&e'dk(  rd e         e         e         e         e         e         e          e!         e"         e#         e$         e%         e&         e(d       yy)z
Regression tests for league-specific edge cases.

These tests verify that the system handles real-world scenarios correctly:
- Recent trades
- Late scratches
- Duplicate names
- Goalie switches
- Soccer transfers
- NCAA availability
    Nz../../scripts)datetime	timedeltatimezone)determine_prop_eligibility)ValidationStateAvailabilityStatusLineupStatusnormalize_player_name)detect_identity_collisionsc                      | t        |       |dS N)player_namenormalized_nameteamr
   namer   s     N/var/www/html/rainmaker/backend/tests/publishing_integrity/test_regressions.pymake_rosterr          4I$4OY]^^    c                 T    | t        |       ||j                  j                         ddS )Ntest)r   r   availability_statusdetailed_statussource)r   valuelowerr   statuss     r   
make_availr!      s,    0Ed0K%&,,:L:L:NZ` r   c                 4    | t        |       |j                  dS )N)r   r   lineup_status)r   r   r   s     r   make_lineupr$   !   s    4I$4Obhbnbnoor   c                      | t        |       |dS r   r
   r   s     r   make_marketr&   $   r   r   c                  0   t        dd      g} t        dt        j                        g}t	        dd      g}t        ddddddt        j                         t        d	      z   d
| |g |      }|j                  t        j                  k(  s|j                  sJ yy)z<Star traded mid-season: prop on old team must be suppressed.Jimmy ButlerDALpointsznba-mia-bos-20260310nbaz
Miami HeatBoston Celtics   hoursregtestN)r   r!   r   	AVAILABLEr&   r   r   nowr   validation_stater   SUPPRESSED_TEAM_MISMATCHpublish_allowed)rosteravailmarketeligs       r   $test_traded_star_blocked_on_old_teamr:   *   s    .%01F(:(D(DEFE.%01F%"8%&++Yr6	D   O$L$LL    Mr   c                     t        dd      g} t        dt        j                        g}t	        ddddddt        j                         t        d	      z   d
| |g g       }|j                  t        j                  k7  sJ |j                  dk7  sJ y)z.Player on correct new team should be verified.r(   r)   r*   znba-dal-bos-20260310r+   zDallas Mavericksr,   r-   r.   r0   r4   N)r   r!   r   r1   r   r   r2   r   r3   r   r4   suppress_reasonr6   r7   r9   s      r   &test_traded_player_correct_on_new_teamr>   ;   s    .%01F(:(D(DEFE%"8%,++Yr2	D   O$L$LLLL#====r   c                  <   t        dd      g} t        dt        j                        g}t	        ddddddt        j                  t        j                        t        d	      z   d
| |g g       }|j                  t        j                  k7  sJ |j                  dk7  sJ y )NzBobby Witt Jr.KCRhitszmlb-kc-atl-20260329mlbzAtlanta BraveszKansas City Royalsr-   r.   r0   r4   )r   r!   r   r1   r   r   r2   r   utcr   r3   r   r4   r<   r=   s      r   "test_royals_alias_matches_kc_eventrD   J   s    *E23F(*<*F*FGHE%&"7.X\\"YQ%77r2	D   O$L$LLLL#====r   c                      t        dd      t        dd      g} t        | d      }t        |      dk\  sJ t        d |D              sJ y)z.Two players with same name on different teams.zMarcus WilliamsBOSCHAr+      c              3   :   K   | ]  }|j                   d k(    yw)IDENTITY_COLLISIONN)conflict_type).0cs     r   	<genexpr>z0test_duplicate_names_detected.<locals>.<genexpr>b   s     J1q"66Js   N)r   r   lenany)r6   	conflictss     r   test_duplicate_names_detectedrR   Z   sU     	%u-%u-F +659Iy>QJ	JJJJr   c                     t        dd      g} t        dt        j                        g}t	        ddddddt        j                         t        d	      z   d
| |g g       }|j                  t        j                  k(  sJ |j                  rJ y)z$Player scratched close to game time.zAnthony DavisLALr*   nba-lal-gsw-20260310r+   Los Angeles LakersGolden State Warriors   minutesr0   N)r   r!   r   	SCRATCHEDr   r   r2   r   r3   r   SUPPRESSED_UNAVAILABLEr5   r=   s      r   test_late_scratch_suppressesr]   g   s    /512F);)E)EFGE%#9552..	r2	D   O$J$JJJJ#####r   c                      t        dd      g} t        dt        j                        g}t	        ddddddt        j                         t        d	      z   d
| |g g       }|j                  sJ y)z=Player returning from injury should be verified if AVAILABLE.zKawhi LeonardLACr*   znba-lac-den-20260310r+   zLA ClipperszDenver Nuggetsr-   r.   r0   N	r   r!   r   r1   r   r   r2   r   r5   r=   s      r   test_injury_return_verifiedra   x   sp    /512F);)E)EFGE%#95'++Yr2	D r   c                      t        dd      g} t        dt        j                        g}t	        ddddddt        j                         t        d	      z   d
| |g g       }|j                  rJ y )NzPlayer XMILr*   znba-mil-chi-20260310r+   zMilwaukee BuckszChicago Bullsr-   r.   r0   )	r   r!   r   	SUSPENDEDr   r   r2   r   r5   r=   s      r   test_suspended_player_blockedre      sr    *e,-F
$6$@$@ABE%H4e?++Yr2	D #####r   c                     t        dd      g} t        dt        j                        g}t	        dt
        j                        g}t        ddddddt        j                         t        d	      z   d
| ||g       }|j                  rJ y)z;MLB batter scratched from lineup 30 min before first pitch.z
Mike TroutLAArA   zmlb-laa-nyy-20260310rB   zLos Angeles AngelsNew York YankeesrX   rY   r0   N)r   r!   r   r1   r$   r	   CONFIRMED_OUT_OF_LINEUPr   r   r2   r   r5   r6   r7   lineupr9   s       r   test_mlb_scratch_near_gamerl      s    ,./F&8&B&BCDE,(L(LMNF%f4e02..	vr	D #####r   c                      t        dd      g} t        dt        j                        g}t	        ddddddt        j                         t        d	      z   d
| |g g       }|j                  rJ y)z9MLB: no lineup data inside 60-min lock window = suppress.zAaron JudgeNYYrA   zmlb-nyy-bos-20260310rB   rh   zBoston Red SoxrX   rY   r0   Nr`   r=   s      r   test_mlb_unknown_lineup_in_lockro      ss    -/0F'9'C'CDEE%v5u,2..	r2	D #####r   c                     t        dd      g} t        dt        j                        g}t	        dt
        j                        g}t        ddddddt        j                         t        d	      z   d
| ||g       }|j                  sJ y)u5   Starting goalie confirmed — saves prop should pass.zIgor ShesterkinNYRsavesnhl-nyr-phi-20260310nhlNew York RangersPhiladelphia FlyersrX   rY   r0   N)r   r!   r   r1   r$   r	   STARTING_GOALIEr   r   r2   r   r5   rj   s       r   test_nhl_goalie_confirmedrx      s    +U34F)+=+G+GHIE+\-I-IJKF%7$:E12..	vr	D r   c                     t        dd      g} t        dt        j                        g}t	        dt
        j                        g}t        ddddddt        j                         t        d	      z   d
| ||g       }|j                  rJ y)u.   Backup goalie getting saves prop — suppress.zJonathan Quickrq   rr   rs   rt   ru   rv   rX   rY   r0   N)r   r!   r   r1   r$   r	   BENCHr   r   r2   r   r5   rj   s       r   test_nhl_goalie_not_startingr{      s    *E23F(*<*F*FGHE*L,>,>?@F%'#9512..	vr	D #####r   c                     t        dd      g} t        dt        j                        g}t	        ddddddt        j                         t        d	      z   d
| |g g       }|j                  s |j                  t        j                  k(  sJ yy)z0Player transferred but still mapped to old club.zMohamed SalahBARshotszepl-liv-mci-20260310epl	LiverpoolzManchester City   r.   r0   N)r   r!   r   r1   r   r   r2   r   r5   r3   r   r4   r=   s      r   test_soccer_transfer_wrong_teamr      s    /512F);)E)EFGE%"8%&++Yr2	D 4#8#8O<d<d#ddd#dr   c                      t        dd      g} g }t        ddddddt        j                         t	        d	      z   d
| |g g       }|j
                  sJ y)z^NCAA: no availability data should not block (conservative but don't suppress on missing data).zPlayer ADUKEr*   zncaab-duke-unc-20260310ncaabzDuke Blue DevilszNorth Carolina Tar Heelsr-   r.   r0   N)r   r   r   r2   r   r5   r=   s      r   &test_ncaa_unknown_availability_allowedr      s_    *f-.FE%H76++Yr2	D r   c                      t        dd      g} t        dt        j                        g}t	        ddddddt        j                         t        d	      z   d
| |g g       }|j                  rJ y)zPlayer on inactive list.zG League PlayerrT   r*   rU   r+   rV   rW   r-   r.   r0   N)	r   r!   r   INACTIVEr   r   r2   r   r5   r=   s      r   test_inactive_player_blockedr      su    +U34F)+=+F+FGHE%8%;U5++Yr2	D #####r   __main__zAll regression tests passed!))__doc__sysospathinsertjoindirname__file__r   r   r    publishing_integrity.eligibilityr   publishing_integrity.enumsr   r   r	   "publishing_integrity.normalizationr   #publishing_integrity.reconciliationr   r   r!   r$   r&   r:   r>   rD   rR   r]   ra   re   rl   ro   rx   r{   r   r   r   __name__print r   r   <module>r      s  
  	 277<< 9?K L 2 2 G X X D J_p_ ">> K$"  
$$$  $"e( "$ z(**,!# "!!# #% "#%*, "	
() r   