
    t2ji(                         d dl Zd dlmc mZ d dlmZmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZmZmZ d dlmZmZmZ d d	lmZ d
 Zd Z d Z!d Z"d Z#d Z$dedede%de&fdZ'd Z(d Z)d Z*d Z+dS )    N)datedatetime	timedeltatimezone)
TestClient)Sessionselect)engineinit_db)app)ChallengePlayerCoinTransactionGeoChallengeAttemptGeoChallengeTarget)haversine_kmmap_percent_to_lat_lonscore_geo_distance)admin_headersc                     t          dddd          } d}|| k     }d}| |k     }|r|st          j        d||fd|| |f          t          j        |          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}x}x}}d S )NgMbXyG@g}?5^@gcZB>G@g|гY!@Z   d   )<r   )z%(py1)s < %(py4)sz%(py4)s < %(py6)sdistance)py1py4py6assert %(py8)spy8)	r   
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanation)r   @py_assert0@py_assert2@py_assert5@py_assert3@py_format7@py_format9s          E/home/agent/projects/FamilyDashboard/backend/tests/test_challenges.pytest_geo_distance_haversiner.      s   FE7F;;H2332323    c                     t          ddd          d         } d}| |k    }|slt          j        d|fd| |f          t          j        |           t          j        |          dz  }dd	|iz  }t	          t          j        |                    d x} x}}t          d
dd          d         } d}| |k    }|slt          j        d|fd| |f          t          j        |           t          j        |          dz  }dd	|iz  }t	          t          j        |                    d x} x}}t          ddd          d         } d}| |k    }|slt          j        d|fd| |f          t          j        |           t          j        |          dz  }dd	|iz  }t	          t          j        |                    d x} x}}t          ddd          d         } d}| |k    }|slt          j        d|fd| |f          t          j        |           t          j        |          dz  }dd	|iz  }t	          t          j        |                    d x} x}}t          ddd          d         } d}| |k    }|slt          j        d|fd| |f          t          j        |           t          j        |          dz  }dd	|iz  }t	          t          j        |                    d x} x}}d S )N   city   gold==z%(py1)s == %(py4)sr   r   assert %(py6)sr      silver(   neutralF   farx   missr   r   r    r!   r%   r&   r'   r*   r(   @py_format5r+   s        r-   .test_geo_scoring_city_gold_silver_neutral_missrE      s   a++A.8&8.&8888888888.&88888.8888&888888888888888888888888888b&!,,Q/;8;/8;;;;;;;;;;/8;;;;;/;;;;8;;;;;;;;;;;;;;;;;;;;;;;;;;;b&!,,Q/<9</9<<<<<<<<<</9<<<<</<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<b&!,,Q/858/58888888888/588888/88885888888888888888888888888888c61--a0:F:0F::::::::::0F:::::0::::F:::::::::::::::::::::::::::::r/   c                  x   t          ddd          d         } d}| |k    }|slt          j        d|fd| |f          t          j        |           t          j        |          dz  }dd	|iz  }t	          t          j        |                    d x} x}}t          d
dd          d         } d}| |k    }|slt          j        d|fd| |f          t          j        |           t          j        |          dz  }dd	|iz  }t	          t          j        |                    d x} x}}t          ddd          d         } d}| |k    }|slt          j        d|fd| |f          t          j        |           t          j        |          dz  }dd	|iz  }t	          t          j        |                    d x} x}}d S )N   laker3   r4   r5   r7   r8   r9   r      r;   <   r=   rB   rC   s        r-   'test_geo_scoring_lake_uses_wider_radiusrK      s'   b&!,,Q/969/69999999999/699999/99996999999999999999999999999999b&!,,Q/;8;/8;;;;;;;;;;/8;;;;;/;;;;8;;;;;;;;;;;;;;;;;;;;;;;;;;;b&!,,Q/<9</9<<<<<<<<<</9<<<<</<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<r/   c                  d   t                       t          t                    5 } |                     d                                          d         }|d         }|                     dd|d         i                                          }|d         }d	}||v}|st          j        d
|fd||f          t          j        |          dt          j	                    v st          j
        |          rt          j        |          nddz  }dd|iz  }t          t          j        |                    d x}}d}||v}|st          j        d
|fd||f          t          j        |          dt          j	                    v st          j
        |          rt          j        |          nddz  }dd|iz  }t          t          j        |                    d x}}t          t                    5 }	|	                    t          |d                   }
d d d            n# 1 swxY w Y   |                     d|d         |d         |
j        |
j        d          }d d d            n# 1 swxY w Y   |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         d	         }|
j        }||k    }|st          j        d|fd||f          t          j        |          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}x}}|d         d         }|
j        }||k    }|st          j        d|fd||f          t          j        |          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}x}}|d         d         }|
j        }||k    }|st          j        d|fd||f          t          j        |          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}x}}|d         }d }||k    }|slt          j        d!|fd"||f          t          j        |          t          j        |          d#z  }d$d%|iz  }t          t          j        |                    d x}x}}|d&         }d }||k    }|slt          j        d!|fd"||f          t          j        |          t          j        |          d#z  }d$d%|iz  }t          t          j        |                    d x}x}}|d'         }|d&         }||k    }|slt          j        d|fd(||f          t          j        |          t          j        |          d#z  }d$d%|iz  }t          t          j        |                    d x}x}}|d)         }|d*         }||k    }|slt          j        d!|fd"||f          t          j        |          t          j        |          d#z  }d$d%|iz  }t          t          j        |                    d x}x}}t          t                    5 }	|	j        }t-          t.                    }|j        }t.          j        }|d         }||k    } ||          } ||          }|j        } |            }d }||u}|s9t          j        d|fd+||f          d,t          j	                    v st          j
        t.                    rt          j        t.                    nd,t          j        |          t          j        |          d-z  }t          j        d.|fd/||f          d0t          j	                    v st          j
        |	          rt          j        |	          nd0t          j        |          d1t          j	                    v st          j
        t,                    rt          j        t,                    nd1d,t          j	                    v st          j
        t.                    rt          j        t.                    nd,t          j        |          t          j        |          |t          j        |          t          j        |          t          j        |          t          j        |          t          j        |          d2z  }d3d4|iz  } t          t          j        |                     d x}x}x}x}x}x}x}x}x}x}x}}d d d            d S # 1 swxY w Y   d S )5N/api/challenges/playersplayersr   /api/challenges/geo/today	player_ididparamstargetlatitude)not in)z%(py1)s not in %(py3)s)r   py3assert %(py5)spy5	x_percent/api/challenges/geo/attemptrP   	target_idselected_x_percentselected_y_percentjson   r5   z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sresponsepy0py2rY   assert %(py7)spy7)z0%(py1)s == %(py5)s
{%(py5)s = %(py3)s.latitude
}real)r   rW   rY   )z1%(py1)s == %(py5)s
{%(py5)s = %(py3)s.x_percent
}selected
raw_pointsr3   >=z%(py1)s >= %(py4)sr8   r9   r   credited_pointspointsr7   daily_points_afterdaily_points_before)z4%(py11)s
{%(py11)s = %(py9)s.player_id
} == %(py14)sr   )py9py11py14is not)z%(py24)s
{%(py24)s = %(py22)s
{%(py22)s = %(py20)s
{%(py20)s = %(py2)s
{%(py2)s = %(py0)s.exec
}(%(py18)s
{%(py18)s = %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py3)s(%(py4)s)
}.where
}(%(py16)s)
})
}.first
}()
} is not %(py27)ssessionr	   )rf   rg   rW   r   r   r   py16py18py20py22py24py27zassert %(py29)spy29)r   r   r   getra   r   r    r!   r"   r#   r$   r%   r&   r   r
   r   postrZ   	y_percentstatus_coderU   execr	   r   whererP   first)!clientrN   playertodayrT   r'   r(   @py_format4@py_format6ry   rj   rd   @py_assert1@py_assert4r*   @py_format8payloadrD   r+   r)   @py_assert7@py_assert10@py_assert13@py_assert12@py_assert17@py_assert19@py_assert21@py_assert23@py_assert26@py_assert25@py_format15@py_format28@py_format30s!                                    r-   Atest_geo_attempt_creates_points_and_returns_solution_after_submitr       s[   III	C 	GF**677<<>>yI

6VTX\?Z
[[``bbx'z''''''''''z'''''z'''''''''''''''''''''''''''''''''''''''''''({&(((((((((({&((((({(((((((((((&(((((&(((((((((((((((((((((((((((V__ 	A;;16$<@@D	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A;;<QWX\Q]lrswlx  QU  Q_  w{  wE  DF  DF;  G  G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G &3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&mmooG8Z(9DM9(M9999999999(M99999(99999999999D99999D999999M9999999999999999999999999998[);T^;)^;;;;;;;;;;)^;;;;;);;;;;;;;;;;T;;;;;T;;;;;;^;;;;;;;;;;;;;;;;;;;;;;;;;;;:{+=t~=+~==========+~=====+===========t=====t======~===========================< %A% A%%%%%%%%%% A%%%%% %%%%A%%%%%%%%%%%%%%%%%%%%%%%%%%%$%**%**********%*****%*******************************8:(9 :: ::::::::::: :::::::::: ::::::::::::::::::::::::::::'(JG4I,JJ(,JJJJJJJJJJJ(,JJJJJJ(JJJJ,JJJJJJJJJJJJJJJJJJJJJJJJJJJJ	 BG|  	BF#677  	B7=  	B>Q>[  	B_efj_k  	B>[_k>k  	B==  	Bll  	B||lmm  	Bms  	Bssuu  	B  ~B  	Bu  ~B  B  	B  	B  	B  	B  	B  	B  	B  	B  	B>[_k  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B>Q  	B  	B  	B  	B  	B>Q  	B  	B  	B  	B  	B  	B>[  	B  	B  	B  	B_k  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	Bu  ~B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	Bw  	B  	B  	B  	B  	Bw  	B  	B  	B  	B  	B  	B|  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	BF  	B  	B  	B  	B  	BF  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B#6  	B  	B  	B  	B  	B#6  	B  	B  	B  	B  	B  	B7  	B  	B  	B  	B=  	B  	B  	B  	B  	Bl  	B  	B  	B  	Bm  	B  	B  	B  	Bs  	B  	B  	B  	Bu  	B  	B  	B  	B  ~B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	B  	BB B B B B B B B B B B B B B B B B BsI   G	I#,"HI#H	I#!H	"5I##I'*I'J>j%%j),j)c            
         t                       t          t                    5 } |                     d                                          d         d         }t          d          D ]}|                     dd|d         i                                          }|d	         }d }||u}|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          t                    5 }	|	                    t           |d                   }
d d d            n# 1 swxY w Y   |                     d|d         |d         |
j        |
j        d          }|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d|d         i                                          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|d	         }d }||u }|slt          j        d|fd ||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}t          t                    5 }	d! |	                    t-          t.                                        t.          j        |d         k                                                        D             }|	                    t-          t                                         t           j                            |                                                              }d d d            n# 1 swxY w Y   |                     d|d         |j        |j        |j        d          }d d d            n# 1 swxY w Y   |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$         d%         }d&}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}d S )'NrM   rN   r   
   rO   rP   rQ   rR   rT   rw   )z%(py0)s is not %(py3)s)rf   rW   rX   rY   r[   r\   r`   rb   r5   rc   rd   re   rh   ri   hourly_attempts_usedr7   r8   r9   r   hourly_attempts_remainingisz%(py1)s is %(py4)sc                     h | ]	}|j         
S  )r]   ).0attempts     r-   	<setcomp>zKtest_hourly_attempt_limit_allows_ten_and_blocks_eleventh.<locals>.<setcomp>K   s-      _  _  _g)  _  _  _r/   i  limitdetailcodehourly_limit_reached)r   r   r   r   ra   ranger   r    r"   r#   r$   r!   r%   r&   r   r
   r   r   rZ   r   r   r   r	   r   r   rP   allrQ   not_inr   )r   r   _r   rT   r(   r   r   r   ry   rj   rd   r   r*   r   blockedr'   rD   r+   answeredextrar   s                         r-   8test_hourly_attempt_limit_allows_ten_and_blocks_eleventhr   :   s   III	C BF566;;==iHKr 	/ 	/AJJ:KQWX\Q]C^J__ddffE8_F!%%6%%%%%%%%%%6%%%%%%%%%%%%6%%%%%6%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EG{{#5vd|DDE E E E E E E E E E E E E E E{{#@U[\`Uapvw{p|  UY  Uc  {  {I  HJ  HJ{  K  KH'.3.'3..........'3............8.....8......'....3............................**8+vVZ|A\*]]bbdd-.4"4."4444444444."44444.4444"444444444444444444444444444238q83q88888888883q8888838888q888888888888888888888888888x (D( D(((((((((( D((((( ((((D(((((((((((((((((((((((((((V__ 	s _  _fM`FaFaFgFgh{  iF  JP  QU  JV  iV  GW  GW  :X  :X  :\  :\  :^  :^  _  _  _HLL(:!;!;!A!ABTBWB^B^_gBhBh!i!ijjpprrE	s 	s 	s 	s 	s 	s 	s 	s 	s 	s 	s 	s 	s 	s 	s 9fUYliniq  JO  JY  qv  q@  AA  AA  B  B#B B B B B B B B B B B B B B B$ ########################5#####5#####################################::<<!&)C-CC)-CCCCCCCCCCC)-CCCCCC)CCCC-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs\   D6U>"F;U>FU>FKU>CT6*U>6T:	:U>=T:	>4U>>VVc                  b   t                       t          j        t          j                  } t          t                    5 }|                    t          t                    
                    t          j        dk                                                        }|                    t          t                                                              }t          d          D ]}t!          |j        |j                  \  }}|                    t)          |j        |j        |z   t-          j                    |||j        |j        ddddd| t1          d          z
                       |                                 d d d            n# 1 swxY w Y   t5          t6                    5 }|                    d                                          d	         d
         }|                    dd|d         i                                          }	d d d            n# 1 swxY w Y   |	d         }
d
}|
|k    }|slt=          j        d|fd|
|f          t=          j         |
          t=          j         |          dz  }dd|iz  }tC          t=          j"        |                    d x}
x}}|	d         }
d}|
|k    }|slt=          j        d|fd|
|f          t=          j         |
          t=          j         |          dz  }dd|iz  }tC          t=          j"        |                    d x}
x}}d S )NEmiliar   r3   r4   =   )minutes)rP   r]   dayselected_latitudeselected_longituder^   r_   distance_kmrq   rl   rp   awarded_band
created_atrM   rN   r   rO   rP   rQ   rR   r   r5   r7   r8   r9   r   r   )#r   r   nowr   utcr   r
   r   r	   r   r   nameoner   r   r   r   rZ   r   addr   rQ   r   r   r   commitr   r   r   ra   r   r    r!   r%   r&   )r   ry   r   rT   indexlatlonr   player_payloadr   r'   r*   r(   rD   r+   s                  r-   *test_hourly_limit_is_rolling_sixty_minutesr   R   s
   III
,x|
$
$C	 Gf_55;;O<PT\<\]]^^bbddf%78899??AA2YY 	a 	aE-f.>@PQQHCKK+fi69W\K\bfblbnbn  CF  [^  sy  sC  X^  Xh  vw  @A  NO  ab  qw  DG  JS  \^  J_  J_  J_  D_  `  `  `  a  a  a  a               
C kF$=>>CCEEiPQRS

6^\`Ma?b
cchhjjk k k k k k k k k k k k k k k '(-A-(A----------(A-----(----A---------------------------,-33-3333333333-33333-333333333333333333333333333333333s&   D?FFF+A%HH #H ry   r   countrq   c                    |                      t          t                                                              }t	          |          D ]r}t          |j        |j                  \  }}|                     t          |j
        |j
        t          j                    |||j        |j        d|||d                     s|                                  d S )Nr3   r4   rP   r]   r   r   r   r^   r_   r   rq   rl   rp   r   )r   r	   r   r   r   r   rZ   r   r   r   rQ   r   r   r   )ry   r   r   rq   rT   r   r   r   s           r-   _add_attemptsr   c   s    \\&!34455;;==Fu | |)&*:F<LMMS'&)vyVZV`VbVbvy  OR  gm  gw  LR  L\  jk  tz  GM  _e  tz  {  {  {  	|  	|  	|  	|NNr/   c            
         t                       t          t                    5 } |                     d                                          d         d         }g }t          d          D ]}|                     dd|d         i                                          }|d	         }t          t                    5 }|                    t          |d                   }d d d            n# 1 swxY w Y   | 	                    d
|d         |d         |j
        |j        d                                          }|                    |d                    |                     dd|d         i                                          }|d         }	d}
|	|
k    }|slt          j        d|fd|	|
f          t          j        |	          t          j        |
          dz  }dd|iz  }t!          t          j        |                    d x}	x}}
|d         }	d}
|	|
u }|slt          j        d|fd|	|
f          t          j        |	          t          j        |
          dz  }dd|iz  }t!          t          j        |                    d x}	x}}
|d	         }t          t                    5 }|                    t          |d                   }d d d            n# 1 swxY w Y   | 	                    d
|d         |d         |j
        |j        d                                          }d d d            n# 1 swxY w Y   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         }	d }
|	|
k    }|slt          j        d!|fd"|	|
f          t          j        |	          t          j        |
          dz  }dd|iz  }t!          t          j        |                    d x}	x}}
|d         }	d#}
|	|
k    }|slt          j        d|fd|	|
f          t          j        |	          t          j        |
          dz  }dd|iz  }t!          t          j        |                    d x}	x}}
|d         }	d}
|	|
u }|slt          j        d|fd|	|
f          t          j        |	          t          j        |
          dz  }dd|iz  }t!          t          j        |                    d x}	x}}
|d$         }	d}
|	|
k    }|slt          j        d|fd|	|
f          t          j        |	          t          j        |
          dz  }dd|iz  }t!          t          j        |                    d x}	x}}
d S )%NrM   rN   r      rO   rP   rQ   rR   rT   r[   r\   r`   rp   daily_pointsg      @r5   r7   r8   r9   r   practice_onlyTr   r   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)ssumcreditedrf   r   rW   r   r   r   rl   r3   rm   ro           rr   )r   r   r   r   ra   r   r   r
   r   r   rZ   r   appendr   r    r!   r%   r&   r   r"   r#   r$   )r   r   r   r   r   rT   ry   rj   r   r'   r*   r(   rD   r+   practicer)   r   r,   s                     r-   5test_daily_points_cap_limits_credited_points_to_threer   k   sE   III	C NF566;;==iHKq 	8 	8AJJ:KQWX\Q]C^J__ddffE8_F EG{{#5vd|DDE E E E E E E E E E E E E E Ekk"?TZ[_T`ouvzo{  TX  Tb  z~  zH  GI  GIk  J  J  O  O  Q  QGOOG$567777

6VTX\?Z
[[``bb^$++$++++++++++$+++++$+++++++++++++++++++++++++++++++_%--%----------%-----%-------------------------------xV__ 	A;;16$<@@D	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A;;<QWX\Q]lrswlx  QU  Q_  w{  wE  DF  DF;  G  G  L  L  N  N!N N N N N N N N N N N N N N N" x==C=C=C33xx=CL!&Q&!Q&&&&&&&&&&!Q&&&&&!&&&&Q&&&&&&&&&&&&&&&&&&&&&&&&&&&%&-#-&#----------&#-----&----#---------------------------O$,,$,,,,,,,,,,$,,,,,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,()0S0)S0000000000)S00000)0000S00000000000000000000000000000s\   BL,7"C%L,%C))L,,C)-F6L,#"KL,K	L,K	AL,,L03L0c                  f   t                       t          t                    5 } |                     t	          t
                                        t
          j        dk                                                        }|                     t	          t                              
                                }t          |j        |j                  \  }}|                     t          |j        |j        t#          j                    |||j        |j        dddddd                     |                     t          |j        |j        t#          j                    |||j        |j        ddddd	                     |                                  d d d            n# 1 swxY w Y   t)          t*                    5 }t-          |          }|                    d
|          }d d d            n# 1 swxY w Y   t1          d |                                d         D                       }|d         }	d}
|	|
k    }|slt5          j        d|fd|	|
f          t5          j        |	          t5          j        |
          dz  }dd|iz  }t;          t5          j        |                    d x}	x}}
|d         }	d}
|	|
k    }|slt5          j        d|fd|	|
f          t5          j        |	          t5          j        |
          dz  }dd|iz  }t;          t5          j        |                    d x}	x}}
d S )Nr   r3         ?r   r4   T)rP   r]   r   r   r   r^   r_   r   rq   rl   rp   r   daily_cap_reachedg       @r   $/api/admin/challenges/weekly-convertheadersc              3   >   K   | ]}|d          d         dk    |V  dS r   r   r   Nr   r   items     r-   	<genexpr>zMtest_weekly_conversion_uses_credited_points_not_raw_points.<locals>.<genexpr>   7      hh4T(^TZE[_gEgEg$EgEgEgEghhr/   conversionschallenge_pointsr5   r7   r8   r9   r   coins_awarded   )r   r   r
   r   r	   r   r   r   r   r   r   r   rZ   r   r   r   rQ   r   r   r   r   r   r   r   nextra   r   r    r!   r%   r&   )ry   r   rT   r   r   r   r   rd   emiliar'   r*   r(   rD   r+   s                 r-   :test_weekly_conversion_uses_credited_points_not_raw_pointsr      s(   III	 Gf_55;;O<PT\<\]]^^bbddf%78899??AA)&*:F<LMMS'&)vyVZV`VbVbvy  OR  gm  gw  LR  L\  jk  tw  DG  Y\  kq  EI  J  J  J  	K  	K  	K'&)vyVZV`VbVbvy  OR  gm  gw  LR  L\  jk  tw  DG  Y\  kq  r  r  r  	s  	s  	s               
C XF'';;Ew;WWX X X X X X X X X X X X X X X hh8==??=#AhhhhhF$%,,%,,,,,,,,,,%,,,,,%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,/"'a'"a''''''''''"a'''''"''''a'''''''''''''''''''''''''''''s$   E,FF"F:'G--G14G1c                  d	   t                       t          t                    5 } |                     t	          t
                                        t
          j        dk                                                        }t          | |dd           d d d            n# 1 swxY w Y   t          t                    5 }t          |          }|                    d|          }|                    d|          }d d d            n# 1 swxY w Y   t          d |                                d         D                       }t          d |                                d         D                       }|d	         }d
}	||	k    }
|
slt!          j        d|
fd||	f          t!          j        |          t!          j        |	          dz  }dd|iz  }t'          t!          j        |                    d x}x}
}	|d         }d}	||	u }
|
slt!          j        d|
fd||	f          t!          j        |          t!          j        |	          dz  }dd|iz  }t'          t!          j        |                    d x}x}
}	t          t                    5 } |                     t	          t*                                        t*          j        dk                                                        }t1          |          }
d}|
|k    }|st!          j        d|fd|
|f          dt3          j                    v st!          j        t0                    rt!          j        t0                    nddt3          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
}|
|k    }|st!          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 d d            d S # 1 swxY w Y   d S )Nr      r   r   r   c              3   >   K   | ]}|d          d         dk    |V  dS r   r   r   s     r-   r   zOtest_weekly_conversion_caps_at_three_coins_and_is_idempotent.<locals>.<genexpr>   s7      ee4$x.QWBX\dBdBd$BdBdBdBdeer/   r   c              3   >   K   | ]}|d          d         dk    |V  dS r   r   r   s     r-   r   zOtest_weekly_conversion_caps_at_three_coins_and_is_idempotent.<locals>.<genexpr>   s7      ggDDNSYDZ^fDfDf4DfDfDfDfggr/   r   r   r5   r7   r8   r9   r   already_convertedTr   r   zChallenge-Wochenbonus Geografier3   r   lentxsr   r   r   r   )z.%(py3)s
{%(py3)s = %(py1)s.amount
} == %(py6)s)r   rW   r   )r   r   r
   r   r	   r   r   r   r   r   r   r   r   r   r   ra   r   r    r!   r%   r&   r   commentr   r   r"   r#   r$   amount)ry   r   r   r   r   secondr   emilia2r'   r*   r(   rD   r+   r   r)   r   r,   s                    r-   <test_weekly_conversion_caps_at_three_coins_and_is_idempotentr      s   III	 /Gf_55;;O<PT\<\]]^^bbddgvq#.../ / / / / / / / / / / / / / / 
C VF''BGTTCWUUV V V V V V V V V V V V V V V ee5::<<#>eeeeeFggFKKMM-$@gggggG/"'a'"a''''''''''"a'''''"''''a'''''''''''''''''''''''''''&'/4/'4//////////'4/////'////4///////////////////////////	 "Gll6/22889PTu9uvvww{{}}3xx1x1}x1ss33x11v!v}!!}!!!!!!!!!!}!!!!!v!!!!}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" " " " " " " " " " " " " " " " " "s7   A-BB #B ;>DD	D	HR%%R),R)c                  `   t                       t          t                    5 } |                     t	          t
                                        t
          j        dk                                                        }t          | |dd           d d d            n# 1 swxY w Y   t          t                    5 }t          |          }|                    d|          }d d d            n# 1 swxY w Y   t          d |                                d         D                       }|d         }d	}||k    }|slt!          j        d
|fd||f          t!          j        |          t!          j        |          dz  }	dd|	iz  }
t'          t!          j        |
                    d x}x}}d S )NMarcelr   r   r   r   c              3   >   K   | ]}|d          d         dk    |V  dS )r   r   r   Nr   r   s     r-   r   z9test_adults_do_not_receive_gassercoins.<locals>.<genexpr>   r   r/   r   r   r   r5   r7   r8   r9   r   )r   r   r
   r   r	   r   r   r   r   r   r   r   r   r   r   ra   r   r    r!   r%   r&   )ry   r   r   r   rd   marcelr'   r*   r(   rD   r+   s              r-   &test_adults_do_not_receive_gassercoinsr      s&   III	 /Gf_55;;O<PT\<\]]^^bbddgvq#.../ / / / / / / / / / / / / / / 
C XF'';;Ew;WWX X X X X X X X X X X X X X X hh8==??=#AhhhhhF/"'a'"a''''''''''"a'''''"''''a'''''''''''''''''''''''''''''s$   A-BB #B ;'C..C25C2),builtinsr"   _pytest.assertion.rewrite	assertionrewriter   r   r   r   r   fastapi.testclientr   sqlmodelr   r	   app.db.sessionr
   r   app.mainr   
app.modelsr   r   r   r   app.services.challengesr   r   r   tests.conftestr   r.   rE   rK   r   r   r   intfloatr   r   r   r   r   r   r/   r-   <module>r     s                 8 8 8 8 8 8 8 8 8 8 8 8 ) ) ) ) ) ) $ $ $ $ $ $ $ $ * * * * * * * *       ` ` ` ` ` ` ` ` ` ` ` ` \ \ \ \ \ \ \ \ \ \ ( ( ( ( ( (  
; ; ;= = =B B B4D D D04 4 4"7 O C QV    1 1 14( ( ("" " "&	( 	( 	( 	( 	(r/   