
    82j.                         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 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )    )
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   titleu   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                     | 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    sJ |                                d
         d         dk    sJ |j        d	k    sJ |                                d         du sJ |                                d         ddddk    sJ t          |                                d                   dk    sJ d S )Nz/api/dashboard?date=2026-06-17/api/tasks/	/completeidempotency_keyztap-1json/api/coins//ledger   coin_transactionamount   
idempotentTsummaryr   )postedreserved	availabletransactions   )	r   r   r	   getr*   r   poststatus_codelen)client	dashboardchild_idtask_idfirstsecondledgers          r   4test_bonus_complete_is_idempotent_and_ledger_updatesrC   !   s   III	C =FJJ?@@EEGG	*955'<'<<<DUW^C_``=7===EVX_D`aa;(;;;<<= = = = = = = = = = = = = = = ####::<<*+H5::::$$$$;;==&$....;;==#!QR'S'SSSSSv{{}}^,--222222s   BB<<C C c                  L   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    sJ |                                d         d         dk    sJ |                                d         d         dk    sJ |                                d         |k    sJ t          d |                                d         D                       sJ d S )Nz/api/dashboard?date=2026-06-18r+   r,   r2   r&   r'   r(   ztap-2r)   /undozundo-2r-   r.   r/   r   r   r   c              3   .   K   | ]}|d          dk    V  dS )r/   rF   N ).0txs     r   	<genexpr>z>test_bonus_undo_creates_counter_transaction.<locals>.<genexpr>A   s+      JJbr(|r!JJJJJJr   r6   )	r   r   r	   r8   r*   r   r9   r:   any)r<   r=   r>   r?   beforeundorB   s          r   +test_bonus_undo_creates_counter_transactionrO   3   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""""99;;)*84::::99;;vx(F2222;;==#v----JJFKKMM.,I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    sJ |                                d         J |                                d         d         dk    sJ |                                d         |k    sJ d S )Nz/api/dashboard?date=2026-06-19r+   r,   r2   r&   r'   r(   z
required-1r)   r-   r.   r   r   done)r   r   r	   r8   r*   r$   r9   r:   )r<   r=   r>   r?   rM   completerB   s          r   /test_required_complete_does_not_book_plus_coinsrS   D   s   III	C =FJJ?@@EEGG	-i88';(;;;<<AACCIN;;?W???GXZfFg;hh;(;;;<<= = = = = = = = = = = = = = = 3&&&&==??-.666==??6"8,6666;;==#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    sJ t          |d
          \  }}}||k    sJ |d         d
k    sJ d S )Nz/api/dashboard?date=2026-06-22r   r   r&   r'   r(   zwuschi-doner)   r-   rQ   r   )r   r   r	   r8   r*   r!   r9   r:   )r<   r=   _r?   rR   reloadedreloaded_idr   s           r   =test_bonus_task_complete_persists_done_after_dashboard_reloadrX   S   sP   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&&&&'@@@A{D'!!!!>V######s   BB00B47B4c                  l   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    sJ t          |d          \  }}}|k    sJ |d         dk    sJ t          fd|d         D                       sJ d S )Nz/api/dashboard?date=2026-06-23r   r   r&   r'   r(   zwuschi-done-undor)   rE   zwuschi-openr-   r   c              3   R   K   | ]!}|d          d         D ]}|d         k    V  "dS )r   rQ   r   NrH   )rI   r   r   r?   s      r   rK   zLtest_bonus_task_undo_persists_open_after_dashboard_reload.<locals>.<genexpr>n   sF      jjSXY`SabhSijj4tDzW$jjjjjjjr   r   )	r   r   r	   r8   r*   r!   r9   r:   all)r<   r=   rU   rN   rV   rW   r   r?   s          @r   9test_bonus_task_undo_persists_open_after_dashboard_reloadr\   a   s   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""""'@@@A{D'!!!!>V####jjjj(:2Fjjjjjjjjjjs   BCCC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                       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    sJ |d         dk    sJ d S )Nz/api/dashboard?date=2026-06-24r   r   r&   r'   r(   zwuschi-seed-doner)   rE   zwuschi-seed-openr   )
r   r   r	   r8   r*   r!   r9   r   r   r   )r<   r=   rU   r?   sessionrV   rW   r   s           r   +test_bonus_task_undo_survives_seed_databaser_   q   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######s6   A7B&&B*-B*C  C$'C$?(D33D7:D7c                  2   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    sJ |j        J 	 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    sJ |d         dk    sJ d S )Nz/api/dashboard?date=2026-06-25r   r   r&   r'   r(   zwuschi-session-doner)   rE   zwuschi-session-openr   )r   r   r	   r8   r*   r!   r9   r   r   r   r   r   r   completed_at)	r<   r=   rU   r?   r^   instancerV   rW   r   s	            r   8test_bonus_task_undo_survives_backend_restart_simulationrc      sn   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$,,,,- - - - - - - - - - - - - - -
 
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######s6   A7B&&B*-B*<DDD-(E!!E%(E%c                  H   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    sJ |	d         dk    sJ d S )Nz/api/dashboard?date=2026-06-26r   r   zhistorical-completion)task_instance_idr>   r(   r   )r   r   r	   r8   r*   r!   r   r   r   addr
   r   r   r   ra   commit)
r<   r=   r>   r?   rU   r^   rb   rV   rW   r   s
             r   9test_taskcompletion_does_not_override_taskinstance_statusrh      sK   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######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    sJ d S )Nz/api/dashboard?date=2026-06-27zcache-controlzno-store, max-age=0)r   r   r	   r8   headers)r<   responses     r   test_api_responses_are_no_storerl      s    III	C @F::>??@ @ @ @ @ @ @ @ @ @ @ @ @ @ @O,0EEEEEEEs   AA	A	N)fastapi.testclientr   sqlmodelr   r   app.db.sessionr   r   r   app.mainr	   
app.modelsr
   r   r   r   strr!   r$   rC   rO   rS   rX   r\   r_   rc   rh   rl   rH   r   r   <module>rs      sa   ) ) ) ) ) ) $ $ $ $ $ $ $ $ 9 9 9 9 9 9 9 9 9 9       ? ? ? ? ? ? ? ? ? ?0 0 0 ,2 > > >S > > > >3 3 33 3 3$K K K". . .$ $ $k k k $ $ $$$ $ $($ $ $*F F F F Fr   