
    |p3j                         d dl Zd dlmc mZ d dl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 d	 Zd
 Zd Zd Zd Zd ZdS )    N)date)
TestClient)Sessionselect)engineinit_db)app)ChildChildSettingsCoinTransactionDailyKnowledgeAssignment)generate_taskc                     t                       t          ddddd          fddD             } d | D             }t          |          }|sd	d
t          j                    v st          j        t                    rt          j        t                    nd
t          j        |          t          j        |          dz  }t          t          j	        |                    d x}}d | D             }t          |          }|sd	d
t          j                    v st          j        t                    rt          j        t                    nd
t          j        |          t          j        |          dz  }t          t          j	        |                    d x}}d | D             }t          |          }|sd	dt          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          dz  }t          t          j	        |                    d x}}d S )Nc   Testkindz#fffu   🧪)idnamecoloravatar
sort_orderc                     g | ];}t          d d          D ](}t          |t          dd|                    d         )<S )      i     prompt)ranger   r   ).0leveldaychilds      J/home/agent/projects/FamilyDashboard/backend/tests/test_daily_knowledge.py
<listcomp>z5test_daily_math_no_half_of_prompt.<locals>.<listcomp>   sQ    uuuUhmnoqshthtuuad}UE4a+=+=>>xHuuuu    )      c              3      K   | ]}d |vV  	dS )z1/2 vonN r   r   s     r!   	<genexpr>z4test_daily_math_no_half_of_prompt.<locals>.<genexpr>   '      ==6y&======r#   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}all)py0py2py4c              3      K   | ]}d |vV  	dS )z1/4 vonNr'   r(   s     r!   r)   z4test_daily_math_no_half_of_prompt.<locals>.<genexpr>   r*   r#   c              3      K   | ]}d |v V  	dS )z : Nr'   r(   s     r!   r)   z4test_daily_math_no_half_of_prompt.<locals>.<genexpr>   s&      556u555555r#   any)r   r
   r+   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanationr1   )prompts@py_assert1@py_assert3@py_format5r    s       @r!   !test_daily_math_no_half_of_promptr=      sg   IIIRjvRTUUUEuuuuV\uuuG==W====3================3=====3=================================W====3================3=====3===============================55W5555355555555555555553555553555555555555555555555555555555555r#   c                     t                       t          t                    5 } |                     d          }|                     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}}|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         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         d         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)/api/daily-knowledge/quiz?date=2026-06-18   ==z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sfirstr,   r-   py5assert %(py7)spy7seconditemsr   questionr   z%(py1)s == %(py4)spy1r.   assert %(py6)spy6)r   r   r	   getstatus_coder4   _call_reprcomparer2   r3   r5   r6   r7   r8   json)clientrD   rI   r:   @py_assert4r;   @py_format6@py_format8@py_assert0@py_assert2r<   @py_format7s               r!   &test_daily_knowledge_assignment_stabler\      s+   III	C IF

FGGGHHI I I I I I I I I I I I I I I ########################5#####5#####################################$$$$$$$$$$$$$$$$$$$$$$$$6$$$$$6$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$::<< #J/5dw9OPQ9RS]9^_c9dd59ddddddddddd59dddddd5dddd9dddddddddddddddddddddddddddd::<< #J/
;pv{{}}W?UVW?XYc?deo?pp;?ppppppppppp;?pppppp;pppp?pppppppppppppppppppppppppppppps   +AA!Ac            
      t	   t                       t          t                    5 } |                     d          }|                                d         d         }t          t                    5 }|                    t          t                    
                    t          j        |d         k    t          j        |d         k                                                        }|j        }d d d            n# 1 swxY w Y   |                     d|d         |d         |d         d         |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}	||	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}	||	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          t2                    
                    t2          j        dk                                                        }|j        }|                                d         }||k    }	d}||k    }|	r|st#          j        d|	|fd|||f          dt'          j                    v st#          j        |          rt#          j        |          ndt#          j        |          t#          j        |          t#          j        |          d z  }d!d"|iz  }t/          t#          j        |                    d x}x}	x}x}}d d d            d S # 1 swxY w Y   d S )#Nr?   rJ   r   child_idr    /api/daily-knowledge/quiz-answerrK   r   r^   r   question_idselected_answerrT   r@   rA   rC   responserE   rG   rH   correctTisz%(py1)s is %(py4)srM   rO   rP   coin_awarded-Allgemeinwissen des Tages richtig beantwortet
coin_valuer   )rB   rB   )z.%(py2)s
{%(py2)s = %(py0)s.amount
} == %(py6)sz%(py6)s == %(py8)stx)r,   r-   rP   py8zassert %(py10)spy10)r   r   r	   rQ   rT   r   r   execr   r   wherer^   r   onecorrect_answerpostrR   r4   rS   r2   r3   r5   r6   r7   r8   r   commentamount)rU   quizitemsession
assignmentre   rd   r:   rV   r;   rW   rX   rY   rZ   r<   r[   rl   @py_assert5@py_assert7@py_format9@py_format11s                        r!   /test_daily_knowledge_correct_answer_awards_coinr~       s   III	C FzzEFFyy{{7#A&V__ 	0 f-E&F&F&L&LMeMnrv  xB  sC  NC  E]  Ea  ei  jp  eq  Eq  'r  'r  s  s  w  w  y  yJ /G	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 ;;AZ(L
+D1&	I
 I
;                 &3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&==??9%--%----------%-----%-------------------------------==??>*2d2*d2222222222*d22222*2222d222222222222222222222222222	 ?G\\&11778O  TC  9C  D  D  E  E  I  I  K  Ky>HMMOOL9>y9>>Q>9Q>>>>>>>>>>>>>y9Q>>>>>>>>>>>>r>>>>>r>>>>>>y>>>>9>>>>Q>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sJ   A
E-A=C6*E6C:	:E=C:	>7EEE	ER--R14R1c            
         t                       t          t                    5 } |                     d          }|                                d         d         }t          t                    5 }|                    t          t                    
                    t          j        |d         k    t          j        |d         k                                                        }|j        }d d d            n# 1 swxY w Y   |                     d|d         |d         |d         d         |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}	||	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}	||	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          t2                    
                    t2          j        dk                                                        }g }||k    }|st#          j        d|fd||f          dt'          j                    v st#          j        |          rt#          j        |          ndt#          j        |          dz  }dd|iz  }
t/          t#          j        |
                    d x}}d d d            d S # 1 swxY w Y   d S ) Nz)/api/daily-knowledge/quiz?date=2026-06-19rJ   r   r^   r   r_   rK   r   r`   rc   r@   rA   rC   rd   rE   rG   rH   re   Frf   rh   rM   rO   rP   ri   rj   )z%(py0)s == %(py3)stxs)r,   py3zassert %(py5)srF   )r   r   r	   rQ   rT   r   r   ro   r   r   rp   r^   r   rq   wrong_option_1rs   rR   r4   rS   r2   r3   r5   r6   r7   r8   r   rt   r+   )rU   rv   rw   rx   ry   wrongrd   r:   rV   r;   rW   rX   rY   rZ   r<   r[   r   @py_format4s                     r!   )test_daily_knowledge_wrong_answer_no_coinr   6   s   III	C FzzEFFyy{{7#A&V__ 	. f-E&F&F&L&LMeMnrv  xB  sC  NC  E]  Ea  ei  jp  eq  Eq  'r  'r  s  s  w  w  y  yJ-E	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. ;;AZ(L
+D1$	I
 I
;                 &3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&==??9%..%..........%.....%...............................==??>*3e3*e3333333333*e33333*3333e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	 Gll6/22889P  UD  :D  E  E  F  F  J  J  L  Lsbysbssb                 sJ   A
E-A=C6*E6C:	:E=C:	>7EEE	D QQQc            
      	   t                       t          t                    5 } |                     d          }|                                d         d         }t          t                    5 }|                    t          t                    
                    t          j        |d         k    t          j        |d         k                                                        }|j        }d d d            n# 1 swxY w Y   |d         |d         |d         d         |d}|                     d	|
          }|                     d	|
          }d d d            n# 1 swxY w Y   |                                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}
|	|
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}
|	|
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                                                              }t3          |          }d}||k    }|st!          j        d|fd||f          dt5          j                    v st!          j        t2                    rt!          j        t2                    nddt5          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            d S # 1 swxY w Y   d S )Nz)/api/daily-knowledge/quiz?date=2026-06-20rJ   r   r^   r   rK   r   r`   r_   rc   ri   Trf   rh   rM   rO   rP   F
idempotentzdaily-knowledge-quiz:r   rA   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr   )r,   rN   r   rP   zassert %(py8)srm   )r   r   r	   rQ   rT   r   r   ro   r   r   rp   r^   r   rq   rr   rs   r4   rS   r6   r7   r8   r   idempotency_key
startswithr+   r   r2   r3   r5   )rU   rv   rw   rx   ry   re   bodyrD   rI   rY   r;   rZ   r<   r[   r   rz   rV   r|   s                     r!   .test_daily_knowledge_idempotent_no_double_coinr   L   s   III	C LFzzEFFyy{{7#A&V__ 	0 f-E&F&F&L&LMeMnrv  xB  sC  NC  E]  Ea  ei  jp  eq  Eq  'r  'r  s  s  w  w  y  yJ /G	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 !,d6lSWXbScdhSi  F  G  G>TJJ?dKKL L L L L L L L L L L L L L L ::<<'/4/'4//////////'4/////'////4///////////////////////////;;==(1E1(E1111111111(E11111(1111E111111111111111111111111111;;==&.$.&$..........&$.....&....$...........................	 Gll6/22889X9c9cd{9|9|}}~~  C  C  E  E3xx1x1}x1ss33x1                 sK   A
E-A=C6*E6C:	:E=C:	>AEE!E5E;R==SSc                     t                       t          t                    5 } |                     t	          t
                                        t
          j        dk                                                        }|                     t	          t
                                        t
          j        dk                                                        }|                     t	          t                                        t          j
        |j        k                                                        }|                     t	          t                                        t          j
        |j        k                                                        }d|_        d|_        |                     |           |                     |           |                                  d d d            n# 1 swxY w Y   t          t                     5 }|                    d                                          }d d d            n# 1 swxY w Y   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}	||	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EmiliaValerier%      z)/api/daily-knowledge/quiz?date=2026-06-21c                 8    i | ]}|d          |d         d         S )
child_namerK   r   r'   )r   rw   s     r!   
<dictcomp>z9test_daily_knowledge_uses_child_level.<locals>.<dictcomp>k   s)    VVVd< $z"27";VVVr#   rJ   rA   rL   rM   rO   rP   )r   r   r   ro   r   r
   rp   r   rq   r   r^   r   knowledge_quiz_leveladdcommitr   r	   rQ   rT   r4   rS   r6   r7   r8   )rx   emiliavalerieemilia_settingsvalerie_settingsrU   rv   levelsrY   r;   rZ   r<   r[   s                r!   %test_daily_knowledge_uses_child_levelr   _   s   III	 VGfUmm11%*2HIIJJNNPP,,ve}}225:3JKKLLPPRR!,,vm'<'<'B'B=CY]c]fCf'g'ghhllnn"<<}(=(=(C(CMDZ^e^hDh(i(ijjnnpp/0,01-O$$$gkk2B&C&C&CW^^EUEUEUV V V V V V V V V V V V V V V 
C NFzzEFFKKMMN N N N N N N N N N N N N N NVVWVVVF( q q          q         q                           )!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!s$   F?G..G25G2(III)builtinsr2   _pytest.assertion.rewrite	assertionrewriter4   datetimer   fastapi.testclientr   sqlmodelr   r   app.db.sessionr   r   app.mainr	   
app.modelsr
   r   r   r   app.services.daily_mathr   r=   r\   r~   r   r   r   r'   r#   r!   <module>r      s#                       ) ) ) ) ) ) $ $ $ $ $ $ $ $ * * * * * * * *       V V V V V V V V V V V V 1 1 1 1 1 16 6 6q q q? ? ?,  ,  &" " " " "r#   