
    8jn'                         d dl Zd dlmc mZ d dlmZ d dlm	Z	m
Z
 d dlmZmZmZ d dlmZ d dlmZmZmZ d Zdd	d
efdZdd	d
ef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S )    N)
TestClient)Sessionselect)engineinit_dbseed_database)app)TaskCompletionTaskInstance
TaskStatusc                     | d         D ]9}|d         d         D ](}|d         dk    r|d         d         |d         fc c S ):t          d          )	Nchildrentasksopenkindbonuschildidzno bonus task foundAssertionErrorpayloadr   tasks      @/home/agent/projects/FamilyDashboard/backend/tests/test_tasks.py_bonus_task_idr   	   s|    $ 8 8'N6* 	8 	8DF|w&&W~d+T$Z777777 '	8 .
/
//    r   statusr   c                    | d         D ]:}|d         |         D ])}|d         dk    r|d         d         |d         |fc c S *;t          d|           )Nr   r   title   Wuschi fütternr   r   zno Wuschi task found in r   )r   r   r   r   s       r   _wuschi_taskr"      s    $ > >'N6* 	> 	>DG} 111W~d+T$Z====== 2	> <F<<
=
==r   c                    g }| d         D ]I}|d         |         D ]8}|d         dk    r*|                     |d         d         |d         |f           9J|S )Nr   r   r    r!   r   r   )append)r   r   matchesr   r   s        r   _all_wuschi_tasksr&      s{    G$ I I'N6* 	I 	IDG} 111gt 4d4j$GHHH	I Nr   c                     | d         D ]9}|d         d         D ](}|d         dk    r|d         d         |d         fc c S ):t          d          )	Nr   r   r   r   requiredr   r   zno required task foundr   r   s      r   _required_task_idr)   "   s|    $ 8 8'N6* 	8 	8DF|z))W~d+T$Z777777 *	8 1
2
22r   c                  .
   t                       t          t                    5 } |                     d                                          }t          |          \  }}|                     d| dddi          }|                     d| dddi          }|                     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         }d}	||	k    }|slt          j	        d
|fd||	f          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}	||	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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         }t!          |          }	d }|	|k    }|st          j	        d
|fd!|	|f          d"t          j                    v st          j        t                     rt          j        t                     nd"t          j        |          t          j        |	          t          j        |          d#z  }d$d%|iz  }t          t          j        |                    d x}x}	x}}d S )&N/api/dashboard?date=2026-06-22/api/tasks/	/completeidempotency_keyztap-1json/api/coins//ledger   ==z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sfirstpy0py2py5assert %(py7)spy7coin_transactionamount   z%(py1)s == %(py4)spy1py4assert %(py6)spy6second
idempotentTisz%(py1)s is %(py4)ssummaryr   postedreserved	availabletransactions   z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)slenr9   r:   rD   r=   assert %(py9)spy9)r   r   r	   getr0   r   poststatus_code
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprr   _format_explanationrT   )client	dashboardchild_idtask_idr7   rG   ledger@py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_assert2@py_format5@py_format7@py_assert6@py_assert5@py_format10s                      r   4test_bonus_complete_is_idempotent_and_ledger_updatesrs   *   s   III	C =FJJ?@@EEGG	*955'<'<<<DUW^C_``=7===EVX_D`aa;(;;;<<= = = = = = = = = = = = = = = ########################5#####5#####################################::<<*+H5::5::::::::::5:::::5:::::::::::::::::::::::::::::::$$$$$$$$$$$$$$$$$$$$$$$$6$$$$$6$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$;;==&.$.&$..........&$.....&....$...........................;;==#S!QR'S'SS#'SSSSSSSSSSS#'SSSSSS#SSSS'SSSSSSSSSSSSSSSSSSSSSSSSSSSS{{}}^,23,--22-2222222222-2222222222223222223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222222222222222222s   BB<<C C c                  	   t                       t          t                    5 } |                     d                                          }t          |          \  }}|                     d| d                                          d         }|                     d| dddi	           |                     d| d
ddi	          }|                     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         }d}	|	 }||k    }|slt          j	        d|fd||f          t          j        |          t          j        |	          dz  }
dd|
iz  }t          t          j        |                    d x}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         }||k    }|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# |                                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 )(Nz/api/dashboard?date=2026-06-18r1   r2   rL   r,   r-   r.   ztap-2r/   /undozundo-2r3   r4   r6   undor8   r<   r=   r>   r?   r@   )z%(py1)s == -%(py4)srB   r   r   r   rA   rE   rF   z%(py1)s == %(py3)sbeforerC   py3assert %(py5)sr;   c              3   .   K   | ]}|d          dk    V  dS )r?   N .0txs     r   	<genexpr>z>test_bonus_undo_creates_counter_transaction.<locals>.<genexpr>J   s+      JJbr(|r!JJJJJJr   rQ   ,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}anyr9   r:   rD   )r   r   r	   rX   r0   r   rY   rZ   r[   r\   r]   r^   r_   r`   r   ra   r   )rb   rc   rd   re   rx   rv   rf   rg   rh   ri   rj   rk   rl   rq   rm   rn   ro   @py_format4s                     r   +test_bonus_undo_creates_counter_transactionr   <   s,   III	C =FJJ?@@EEGG	*955';(;;;<<AACCIN4'444<Mw;WXXX{{7777?PRZ>[{\\;(;;;<<= = = = = = = = = = = = = = = "s"s""""""""""s""""""""""""4"""""4""""""""""s"""""""""""""""""""""""""""99;;)*84:::4::::::::::4:::::4:::::::::::::::::::::::::::::::::99;;vx(2F2(F2222222222(F22222(2222F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;;==#-#v----------#v-----#-----------v-----v---------------------------JJFKKMM.,IJJJJ3JJJJJJJJJJJJJJJJ3JJJJJ3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Js   B>C--C14C1c                     t                       t          t                    5 } |                     d                                          }t          |          \  }}|                     d| d                                          d         }|                     d| dddi	          }|                     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         }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         }||k    }|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 S ) Nz/api/dashboard?date=2026-06-29r1   r2   rL   r,   r-   r.   z
required-1r/   r3   r4   r6   completer8   r<   r=   r>   rI   rK   rB   rE   rF   r   r   donerA   rw   rx   ry   r{   r;   )r   r   r	   rX   r0   r)   rY   rZ   r[   r\   r]   r^   r_   r`   r   ra   )rb   rc   rd   re   rx   r   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   r   s                    r   /test_required_complete_does_not_book_plus_coinsr   M   s/   III	C =FJJ?@@EEGG	-i88';(;;;<<AACCIN;;?W???GXZfFg;hh;(;;;<<= = = = = = = = = = = = = = = &3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&==??-.6$6.$6666666666.$66666.6666$666666666666666666666666666==??6"8,66,6666666666,66666,6666666666666666666666666666666;;==#-#v----------#v-----#-----------v-----v-----------------------------s   B!CCCc                     t                       t          t                    5 } |                     d                                          }t          |d          \  }}}|                     d| dddi          }|                     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}}t          |d          \  }}}||k    }|st          j	        d
|fd||f          dt          j                    v st          j        |          rt          j        |          nddt          j                    v st          j        |          rt          j        |          nddz  }dd|iz  }t          t          j        |                    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 )Nr+   r   r   r,   r-   r.   zwuschi-doner/   r3   r4   r6   r   r8   r<   r=   r   z%(py0)s == %(py2)sreloaded_idre   r9   r:   assert %(py4)srD   r   rA   rB   rE   rF   )r   r   r	   rX   r0   r"   rY   rZ   r[   r\   r]   r^   r_   r`   r   ra   )rb   rc   _re   r   reloadedrg   rh   ri   rj   rk   r   r   @py_format3rn   rl   rm   ro   s                     r   =test_bonus_task_complete_persists_done_after_dashboard_reloadr   \   s   III	C GFJJ?@@EEGG	$Yv>>>7A;;?W???GXZgFh;ii::>??DDFF	G G G G G G G G G G G G G G G &3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&'@@@A{D'!!!!!!!!!!;'!!!!!!!!!!!!;!!!!!;!!!!!!!!!!!!!'!!!!!'!!!!!!!!!!!!!!!!!!!!!!!!!>#V#>V##########>V#####>####V#############################s   BB00B47B4c                  j   t                       t          t                    5 } |                     d                                          }t          |d          }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|	 dddi          }|                     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}t          ||          }g }||k    }|st          j        d|fd||f          dt          j
                    v st          j        t
                    rt          j        t
                    nddt          j
                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}x}}t          |d           }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             }d h}||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(}||k    }|slt          j        d|fd#||f          t          j        |          t          j        |          d$z  }d%d&|iz  }t          t          j        |                    d x}x}}|d)         }t          |          }d*}||k    }|st          j        d|fd+||f          dt          j
                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          t          j        |          d,z  }d-d.|iz  }t          t          j        |                    d x}x}x}}|d)         d         d/         }|j        }d0} ||          }|ssd1t          j        |          t          j        |          t          j        |          t          j        |          d2z  }t          t          j        |                    d x}x}x}}d S )3Nr+   r   r   r@   r4   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)srT   open_wuschi)r9   rC   rz   rF   assert %(py8)spy8r   r,   r-   r.   zshared-wuschi-doner/   r1   r2   r3   r6   r   r8   r<   r=   z@%(py5)s
{%(py5)s = %(py0)s(%(py1)s, status=%(py3)s)
} == %(py8)sr&   r   r9   rC   rz   r;   r   assert %(py10)spy10r   done_wuschic                 &    h | ]\  }}}|d          S r   r~   )r   r   r   s      r   	<setcomp>zZtest_shared_bonus_task_disappears_for_both_children_when_completed_once.<locals>.<setcomp>z   s"    999zq!TDN999r   rA   rB   rE   rF   rL   rM   rQ   rR   rS   rU   rV   rW   commentzBonusaufgabe erledigt: WuschizLassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}(%(py5)s)
})rC   rz   r;   r=   )r   r   r	   rX   r0   r&   rT   r[   r\   r]   r^   r_   r`   r   ra   rY   rZ   
startswith)rb   rc   r   rm   rq   rh   ro   @py_format9completing_child_idre   r   r   r   completing_ledgerrg   ri   rj   rk   @py_assert7rp   @py_format11r   rl   rn   rr   s                            r   Gtest_shared_bonus_task_disappears_for_both_children_when_completed_oncer   j   s   III	C ZFJJ?@@EEGG	'	&AAA;$1$1$$$$$$$$$$1$$$$$$$$$$$$s$$$$$s$$$$$$$$$$$$$;$$$$$;$$$$$$$$$$1$$$$$$$$$$$$$$$$$$$$$$$$$$$*5a.'Wa;;?W???GXZnFo;pp::>??DDFF"JJ'Q5H'Q'Q'QRRWWYYZ Z Z Z Z Z Z Z Z Z Z Z Z Z Z &3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&.4;Xf555;;5;;;;;;;;;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X;;;;;X;;;;;;f;;;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#HV<<<K{ q q          q            3     3             {     {          q                           99[999EfXE9XEEEEEEEEEE9XEEEEE9EEEEXEEEEEEEEEEEEEEEEEEEEEEEEEEEY'WaQUV+W+WW'+WWWWWWWWWWW'+WWWWWW'WWWW+WWWWWWWWWWWWWWWWWWWWWWWWWWWW 0630116Q61Q66666666661Q66666666666636666636666660666616666Q66666666666666666666666666666^,Q/	:f:EfFefEEFeffffffff:ffffEffffFeffffffffffffffffffffffffffffffs   GG44G8;G8c            
         t                       t          t                    5 } |                     d                                          }t          |d          d         \  }}|                     d dddi	           |                     d                                          }fd
t          |d          D             d         d         }|                     d| dddi	          }|                     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}t          ||          }t!          |          }d}||k    }|s`t          j	        d|fd||f          dt          j                    v st          j        t                     rt          j        t                     nddt          j                    v st          j        t
                    rt          j        t
                    nddt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}x}x}}d}t          ||          }
g }|
|k    }|st          j	        d|fd |
|f          dt          j                    v st          j        t
                    rt          j        t
                    nddt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |
          t          j        |          d!z  }d"d#|iz  }t          t          j        |                    d x}x}
x}}|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             }	t#          |	          }d,dg}||k    }|st          j	        d|fd-||f          d.t          j                    v st          j        t"                    rt          j        t"                    nd.t          j        |	          t          j        |          t          j        |          d/z  }d0d1|iz  }t          t          j        |                    d x}	x}x}}d S )2N/api/dashboard?date=2026-06-23r   r   r   r,   r-   r.   zshared-wuschi-done-undor/   c                 ,    g | ]}|d          k    |S )rR   r~   )r   itemre   s     r   
<listcomp>z[test_shared_bonus_task_undo_reopens_for_both_children_and_reverses_once.<locals>.<listcomp>   s+    xxxeijkelpwewewewewewr   r   rR   ru   zshared-wuschi-openr1   r2   r3   r4   r6   rv   r8   r<   r=   r@   )z_%(py8)s
{%(py8)s = %(py0)s(%(py6)s
{%(py6)s = %(py1)s(%(py2)s, status=%(py4)s)
})
} == %(py11)srT   r&   r   )r9   rC   r:   rD   rF   r   py11zassert %(py13)spy13r   r   r   r   rL   rM   rA   rB   rE   rF   c              3   &   K   | ]}|d          V  dS )r?   Nr~   r   s     r   r   zZtest_shared_bonus_task_undo_reopens_for_both_children_and_reverses_once.<locals>.<genexpr>   s&      @@2"X,@@@@@@r   rQ   r}   rS   sortedrU   rV   rW   )r   r   r	   rX   r0   r&   rY   rZ   r[   r\   r]   r^   r_   r`   r   ra   rT   r   )rb   rc   first_child_idr   done_dashboardsibling_done_task_idrv   r   rf   rg   rh   ri   rj   rk   rq   r   @py_assert10@py_assert9@py_format12@py_format14rm   rp   r   r   rl   rn   ro   rr   re   s                               @r   Gtest_shared_bonus_task_undo_reopens_for_both_children_and_reverses_oncer      s9   III	C 	JFJJ?@@EEGG	%6y%P%P%PQR%S"4'444<MOh;ijjj$DEEJJLLxxxx1B>Z`1a1a1axxxyz{|}~{{D)=DDDL]_sKt{uu::>??DDFFA.AAABBGGII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J "s"s""""""""""s""""""""""""4"""""4""""""""""s"""""""""""""""""""""""""""28? &999?39::?a?:a??????????:a????????????3?????3????????????? ????? ????????????????????????&????9????:????a???????????????????????????????.4;Xf555;;5;;;;;;;;;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X;;;;;X;;;;;;f;;;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;)L1!! L LL LLLLLLLLLLL LLLLLLLLLL LLLLLLLLLLLLLLLLLLLLLLLLLLLL@@)?@@@K6@@@KRGK@GKKKKKKKKKK@GKKKKKKKKKKKK6KKKKK6KKKKKK@KKKK@KKKKGKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKs   DEEEc                  ~   t                       t          t                    5 } |                     d                                          }t          |d          \  }}|                     d dddi           |                     d d	dd
i          }|                     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}}t          |d          \  }}
}|
k    }|st          j	        d|fd|
f          dt          j                    v st          j        |
          rt          j        |
          nddt          j                    v st          j                  rt          j                  nddz  }dd|iz  }t          t          j        |                    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}}f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 S )"Nr   r   r   r,   r-   r.   zwuschi-done-undor/   ru   zwuschi-openr3   r4   r6   rv   r8   r<   r=   r   r   re   r   r   rD   r   rA   rB   rE   rF   c              3   R   K   | ]!}|d          d         D ]}|d         k    V  "dS )r   r   r   Nr~   )r   r   r   re   s      r   r   zLtest_bonus_task_undo_persists_open_after_dashboard_reload.<locals>.<genexpr>   sF      jjSXY`SabhSijj4tDzW$jjjjjjjr   r   r   allr   )r   r   r	   rX   r0   r"   rY   rZ   r[   r\   r]   r^   r_   r`   r   ra   r   )rb   rc   r   rv   r   rg   rh   ri   rj   rk   r   r   r   rn   rl   rm   ro   re   s                    @r   9test_bonus_task_undo_persists_open_after_dashboard_reloadr      sj   III	C GFJJ?@@EEGG	$Yv>>>7A4'444<MOa;bccc{{7777?PR_>`{aa::>??DDFFG G G G G G G G G G G G G G G "s"s""""""""""s""""""""""""4"""""4""""""""""s"""""""""""""""""""""""""""'@@@A{D'!!!!!!!!!!;'!!!!!!!!!!!!;!!!!!;!!!!!!!!!!!!!'!!!!!'!!!!!!!!!!!!!!!!!!!!!!!!!>#V#>V##########>V#####>####V###########################jjjj(:2Fjjjj3jjjjjjjjjjjjjjjj3jjjjj3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js   BCCCc                  J   t                       t          t                    5 } |                     d                                          }t          |d          \  }}}|                     d| dddi           |                     d| d	dd
i           d d d            n# 1 swxY w Y   t          t                    5 }t                       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   t          |d          \  }}}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          nddt          j                    v st          j        |          rt          j        |          nddz  }	dd|	iz  }
t!          t          j        |
                    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 )Nz/api/dashboard?date=2026-06-24r   r   r,   r-   r.   zwuschi-seed-doner/   ru   zwuschi-seed-openr4   r   r   re   r   r   rD   r   rA   rB   rE   rF   )r   r   r	   rX   r0   r"   rY   r   r   r   r[   r\   r]   r^   r_   r`   r   ra   )rb   rc   r   re   sessionr   r   r   rg   r   rn   rl   ri   rm   ro   s                  r   +test_bonus_task_undo_survives_seed_databaser      s   III	C `FJJ?@@EEGG	$Yv>>>7A4'444<MOa;bccc0'0008IK]7^___	` ` ` ` ` ` ` ` ` ` ` ` ` ` ` 
 G              	C GF::>??DDFFG G G G G G G G G G G G G G G (@@@A{D'!!!!!!!!!!;'!!!!!!!!!!!!;!!!!!;!!!!!!!!!!!!!'!!!!!'!!!!!!!!!!!!!!!!!!!!!!!!!>#V#>V##########>V#####>####V#############################s6   A7B&&B*-B*C  C$'C$?(D33D7:D7c                  	   t                       t          t                    5 } |                     d                                          }t          |d          \  }}}|                     d| dddi           |                     d| d	dd
i           d d d            n# 1 swxY w Y   t          t                    5 }|                    t          |          }|j
        }t          j        }||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dt          j                    v st          j        t                    rt          j        t                    ndt          j        |          dz  }	dd|	iz  }
t'          t          j        |
                    d x}x}}|j        }d }||u }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          dz  }dd|iz  }t'          t          j        |                    d x}x}}d 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   t          |d          \  }}}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          nddt          j                    v st          j        |          rt          j        |          nddz  }dd|iz  }t'          t          j        |                    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 )"Nz/api/dashboard?date=2026-06-25r   r   r,   r-   r.   zwuschi-session-doner/   ru   zwuschi-session-openr4   )zH%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.open
}instancer   )r9   r:   rD   rF   r   r   rI   )z4%(py2)s
{%(py2)s = %(py0)s.completed_at
} is %(py5)sr8   r<   r=   r   r   re   r   r   rD   r   rA   rB   rE   rF   )r   r   r	   rX   r0   r"   rY   r   r   r   r   r   r   r[   r\   r]   r^   r_   r`   r   ra   completed_at)rb   rc   r   re   r   r   rg   rq   ri   ro   r   rh   rj   rk   r   r   r   r   rn   rl   rm   s                        r   8test_bonus_task_undo_survives_backend_restart_simulationr      s   III	C cFJJ?@@EEGG	$Yv>>>7A4'444<MOd;efff0'0008IK`7abbb	c c c c c c c c c c c c c c c 
 -G;;|W551*/1/1111111111/111111111111x11111x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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1$,,$,,,,,,,,,,$,,,,,,,,,,,,x,,,,,x,,,,,,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,- - - - - - - - - - - - - - -
 
C GF::>??DDFFG G G G G G G G G G G G G G G'@@@A{D'!!!!!!!!!!;'!!!!!!!!!!!!;!!!!!;!!!!!!!!!!!!!'!!!!!'!!!!!!!!!!!!!!!!!!!!!!!!!>#V#>V##########>V#####>####V#############################s7   A7B&&B*-B*G.J??KK(LLLc                     t                       t          t                    5 } |                     d                                          }t          |d          \  }}}d d d            n# 1 swxY w Y   t          t                    5 }|                    t          |          }|	                    t          ||d                     t          j        |_        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   t          |d          \  }}}	||k    }
|
st!          j        d|
fd||f          dt%          j                    v st!          j        |          rt!          j        |          ndd	t%          j                    v st!          j        |          rt!          j        |          nd	d
z  }dd|iz  }t-          t!          j        |                    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 )Nz/api/dashboard?date=2026-06-26r   r   zhistorical-completion)task_instance_idrd   r.   r4   r   r   re   r   r   rD   r   rA   rB   rE   rF   )r   r   r	   rX   r0   r"   r   r   r   addr
   r   r   r   r   commitr[   r\   r]   r^   r_   r`   r   ra   )rb   rc   rd   re   r   r   r   r   r   r   rg   r   rn   rl   ri   rm   ro   s                    r   9test_taskcompletion_does_not_override_taskinstance_statusr      s   III	C FFJJ?@@EEGG	+IfEEE'1F F F F F F F F F F F F F F F 
 G;;|W55NGh`wxxxyyy$/ $H               
C GF::>??DDFFG G G G G G G G G G G G G G G'@@@A{D'!!!!!!!!!!;'!!!!!!!!!!!!;!!!!!;!!!!!!!!!!!!!'!!!!!'!!!!!!!!!!!!!!!!!!!!!!!!!>#V#>V##########>V#####>####V#############################s6   =A,,A03A0BDD D8(E,,E03E0c                     t                       t          t                    5 } |                     d          }d d d            n# 1 swxY w Y   |j        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 )	Nz/api/dashboard?date=2026-06-27zcache-controlzno-store, max-age=0r4   rA   rB   rE   rF   )
r   r   r	   rX   headersr[   r\   r`   r   ra   )rb   responserl   ri   rm   rn   ro   s          r   test_api_responses_are_no_storer      sA   III	C @F::>??@ @ @ @ @ @ @ @ @ @ @ @ @ @ @O,E0EE,0EEEEEEEEEEE,0EEEEEE,EEEE0EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEs   AA	A	)%builtinsr]   _pytest.assertion.rewrite	assertionrewriter[   fastapi.testclientr   sqlmodelr   r   app.db.sessionr   r   r   app.mainr	   
app.modelsr
   r   r   r   strr"   r&   r)   rs   r   r   r   r   r   r   r   r   r   r   r~   r   r   <module>r      s                 ) ) ) ) ) ) $ $ $ $ $ $ $ $ 9 9 9 9 9 9 9 9 9 9       ? ? ? ? ? ? ? ? ? ?0 0 0 ,2 > > >S > > > > 17   #    3 3 33 3 3$K K K". . .$ $ $g g g,L L L(k k k $ $ $$$ $ $($ $ $*F F F F Fr   