
    s8jI                         d dl Zd dlmc mZ d dl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mZ d dlmZ d d	lmZ  e
e          Zd
efdZdded
e fdZ!d Z"d Z#d Z$d Z%d Z&dS )    N)date	timedelta)
TestClient)Sessionselect)engineseed_database)app)CoinTransactionTaskInstanceTaskKind
TaskStatusTaskTemplate)finalize_day)admin_headersreturnc                      t                               dt          t                                                               d         d         d         S )N/api/admin/childrenheaderschildrenr   id)clientgetr   json     U/home/agent/projects/FamilyDashboard/backend/tests/test_task_template_deactivation.py	_child_idr      s?    ::+]65J5J:KKPPRRS]^_`abfggr   test-deactivate-taskTest Pflichtchild_idc                    t                               d| |||ddddd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         S )N/api/admin/task-templatesrequiredr   0,1,2,3,4,5,6Tr"   slugtitlekind
coin_valuepenalty_valueapplies_weekdaysactiver   r      ==z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sresponsepy0py2py5assert %(py7)spy7task_template)r   poststatus_code
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr   )
r   r"   r)   r*   r5   @py_assert1@py_assert4@py_assert3@py_format6@py_format8s
             r   _create_templaterL      s6   {{6+	O 	O{ 	 	H &3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&==???++r   c                  l   t          j                    } t          t                    5 }t	          |          }|                    d|                                          d         d         d         }|                    d||ddd	dd
ddd                                          d         }|                    dd|                                 i          }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          |ddi          }	|                    dd|                                 i          }
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"}||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          |          }| }|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}x}}d S )*Nr   r   r   r   r   r$   zhide-today-taskHeute ausblendenr%   r&   r'   Tr(   r0   r<   /api/dashboardr   paramsc              3   P   K   | ]!}|d          d         D ]}|d         dk    V  "dS tasksopenr*   rN   Nr   .0childtasks      r   	<genexpr>zItest_deactivate_template_hides_existing_today_instance.<locals>.<genexpr>,   sh        A  A5inoviwx~i  A  Aae4=$66  A  A  A  A  A  A  Ar   ,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}anyr7   r8   py4/api/admin/task-templates/r/   F   r2   r4   deactivatedr6   r:   r;   cancelled_instances   )>=)z%(py1)s >= %(py4)spy1r^   assert %(py6)spy6c              3   P   K   | ]!}|d          d         D ]}|d         dk    V  "dS rS   r   rV   s      r   rZ   zItest_deactivate_template_hides_existing_today_instance.<locals>.<genexpr>1   sl        B  B5jopwjxy  kA  B  Bbf4=$66  B  B  B  B  B  B  Br   z0assert not %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
})r   todayr   r
   r   r   r   r=   	isoformatr\   rA   rB   r?   rC   rD   rE   rF   patchr>   r@   )rj   local_clientr   r"   templatefirstrG   rI   @py_format5ra   secondrH   rJ   rK   @py_assert0@py_assert2@py_format7@py_assert5s                     r   6test_deactivate_template_hides_existing_today_instancerv   "   s>   JLLE	C 
XL--##$97#KKPPRRS]^_`abfg$$%@' *;FXblboaeY
 Y
$   466/#   !165??CTCT:U VV A  AEJJLLQ[D\  A  A  A  	As  A  A  A  	A  A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	As  	A  	A  	A  	A  	As  	A  	A  	A  	A  	A  	A  A  	A  	A  	A  	A  A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	A  	A"(()Vhtn)V)V`gowy~n(  A  A!!"2FEOODUDU;V!WW
X 
X 
X 
X 
X 
X 
X 
X 
X 
X 
X 
X 
X 
X 
X ")c)"c))))))))))"c))))))))))));)))));))))))"))))c)))))))))))))))))))))))))))3499499999999994999994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9999 B  BFKKMMR\D]  B  B  B  Bs  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  Bs  B  B  B  B  Bs  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s   GG??HHc                  z	   t          j                    } | t          d          z   }t          t                    5 }t          |          }|                    d|                                          d         d         d         }|                    d||d	d
dddddd                                          d         |                    dd| 	                                i           |                    dd|	                                i           |
                    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}}	f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}}	t+          t,                    5 }|                    t1          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 )-Nrc   daysr   r   r   r   r   r$   zcancel-open-futureu   Offen löschenr%   r&   r'   Tr(   r0   r<   rO   r   rP   r_   task_templatesr`   r2   r4   r5   r6   r:   r;   deletedis)z%(py1)s is %(py4)sre   rg   rh   c              3   <   K   | ]}|d          d          k    V  dS )r   Nr   )rW   itemrn   s     r   rZ   zatest_delete_template_removes_open_current_and_future_instances_from_admin_list.<locals>.<genexpr>D   s0      HHtDzXd^+HHHHHHr   r[   allr]   z%(py0)s == %(py3)srowsr7   py3assert %(py5)sr9   )r   rj   r   r   r
   r   r   r   r=   rk   deleter>   r?   r@   rA   rB   rC   rD   rE   rF   r   r   r   execr   r   wheretask_template_id)rj   tomorrowrm   r   r"   r5   templates_afterrG   rH   rI   rJ   rK   rr   rs   rp   rt   sessionr   @py_format4rn   s                      @r   Ntest_delete_template_removes_open_current_and_future_instances_from_admin_listr   4   s   JLLEya((((H	C 
rL--##$97#KKPPRRS]^_`abfg$$%@' *>IYcmboaeY
 Y
$   466/# 	)65??;L;L2MNNN)68;M;M;O;O2PQQQ&&'THTN'T'T^e&ff&**+FPW*XX]]__`pq
r 
r 
r 
r 
r 
r 
r 
r 
r 
r 
r 
r 
r 
r 
r &3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&==??9%--%----------%-----%-------------------------------HHHHHHHH3HHHHHHHHHHHHHHHH3HHHHH3HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH	 G||F<0066|7TX`aeXf7fgghhllnntrztrttr                 s%   D)E11E58E5DR00R47R4c                     t          j                    } t          t                    5 }t	          |          }|                    d|                                          d         d         d         }|                    d||ddd	d
dddd                                          d         }|                    dd|                                 i                                          }t          d |d         D                       }|                    d|d          dddi          }|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!i           d d d            n# 1 swxY w Y   t)          t*                    5 }|                    t,          |d                   }|j        }t0          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        t0                    rt          j        t0                    nd$t          j        |          d%z  }d&d'|iz  }t#          t          j        |                    d x}x}
}|j        }t7          t8                    }|j        }t8          j        }|d         }||k    } ||          } ||          }|j        } |            }d }||u}|s9t          j        d|fd(||f          d)t          j                    v st          j        t8                    rt          j        t8                    nd)t          j        |          t          j        |          d*z  }t          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        t6                    rt          j        t6                    nd.d)t          j                    v st          j        t8                    rt          j        t8                    nd)t          j        |          t          j        |          |t          j        |          t          j        |          t          j        |          t          j        |          t          j        |          d/z  }d0d1|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 )2Nr   r   r   r   r   r$   zdone-stays-doneErledigt bleibtbonus   r'   Tr(   r0   r<   rO   r   rP   c              3   T   K   | ]#}|d          d         D ]}|d         dk    |V  $dS )rT   rU   r*   r   Nr   rV   s      r   rZ   zMtest_done_instances_not_modified_when_template_deactivated.<locals>.<genexpr>T   s}        F  FUgW]H^  F  Fbfgnbo  tE  cE  cED  cE  cE  cE  cE  cE  F  Fr   z/api/tasks/z	/completeidempotency_key)r   r`   r2   r4   doner6   r:   r;   r_   r/   F)zH%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.done
}instancer   )r7   r8   r^   rh   zassert %(py8)spy8)z;%(py11)s
{%(py11)s = %(py9)s.task_instance_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)sr   r   )r7   r8   r   r^   rh   r   py16py18py20py22py24py27zassert %(py29)spy29) r   rj   r   r
   r   r   r   r=   rk   nextr>   r?   r@   rA   rB   rC   rD   rE   rF   rl   r   r   r   statusr   r   r   r   r   r   task_instance_idro   )rj   rm   r   r"   rn   	dashboardrY   r   rG   rH   rI   rJ   rK   r   r   ru   rt   @py_format9@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   :test_done_instances_not_modified_when_template_deactivatedr   J   sM   JLLE	C sL--##$97#KKPPRRS]^_`abfg$$%@' *;FWaha_`dY
 Y
$   466/# !$$%5vuGXGX>Y$ZZ__aa	  F  Fi
&;  F  F  F  F  F  !DtDz!D!D!DL]_pKq rr&3&3&&&&&&&&&&3&&&&&&&&&&&&t&&&&&t&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&HHHRYaikp`qrrrs s s s s s s s s s s s s s s 
 G;;|T$Z88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|~F?33~39~/:Z~^bcg^h~:Z^h:h~99~ii~||ijj~jp~pprr~z~~rz~~~~~~~~~~~:Z^h~~~~~~~~~~~~/~~~~~/~~~~~~:Z~~~~^h~~~~~~~~~~~~rz~~~~~~~~~~~~~w~~~~~w~~~~~~|~~~~~~~~~~~F~~~~~F~~~~~~~~~~~~~?~~~~~?~~~~~~3~~~~9~~~~~i~~~~j~~~~p~~~~r~~~~z~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                 s%   G'HH"H:O2X99X= X=c                     t          j                    t          d          z
  } t          t                    5 }t          dddt          j        dddd	          }|                    |           |	                                 t          |j        d| dt          j        dt          j        
          }|                    |           |                                 t          || t          j                              }|                                 |                    t#          t$                                        t$          j        |j        k                                                        }d d d            n# 1 swxY w Y   g }||k    }|st-          j        d|fd||f          dt1          j                    v st-          j        |          rt-          j        |          ndt-          j        |          dz  }dd|iz  }	t9          t-          j        |	                    d x}}d }||u }|st-          j        d|fd||f          dt1          j                    v st-          j        |          rt-          j        |          ndt-          j        |          dz  }dd|iz  }	t9          t-          j        |	                    d x}}d S )Nrc   rx   zinactive-requiredzInactive requiredr   Fr'   )r"   r)   r*   r+   r,   r-   r/   r.   )r   r"   	task_dater*   r+   r-   r   r2   r   bookedr   r   r9   r|   )z%(py0)s is %(py3)stx)r   rj   r   r   r   r   r   r%   addflushr   r   r   rU   commitr   r   r   r   r   r   ro   r?   r@   rA   rB   rC   rD   rE   rF   )
	yesterdayr   rn   rY   r   r   rs   rG   r   rJ   s
             r   1test_finalize_day_ignores_inactive_template_tasksr   ^   sC   
ya0000I	 	nG1DL_fnfw  EF  VX  af  yH  I  I  IHX[1PYat  |D  |M  ]_  hr  hw  x  x  xDgy$*,,??\\&11778X\`\c8cddeekkmm	n 	n 	n 	n 	n 	n 	n 	n 	n 	n 	n 	n 	n 	n 	n 6R<6R66R2:222s   D8E==FFc            	      $   t          t                    5 } t          dddt          j        dd          }|                     |           |                                  |j        }d d d            n# 1 swxY w Y   t                       t          t                    5 } | 	                    t          |          }d d d            n# 1 swxY w Y   |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 S )Nrc   zzaehneputzen-morgenu   Zähneputzen morgensFr&   )r"   r)   r*   r+   r/   r-   r|   )z.%(py2)s
{%(py2)s = %(py0)s.active
} is %(py5)sstoredr6   r:   r;   )r   r   r   r   r%   r   r   r   r	   r   r/   r?   r@   rA   rB   rC   rD   rE   rF   )	r   rn   template_idr   rG   rH   rI   rJ   rK   s	            r   7test_seed_does_not_reactivate_deactivated_toothbrushingr   n   s   	 "G1FNdksk|  FK  []  ^  ^  ^Hk	" " " " " " " " " " " " " " "
 OOO	 8G\;778 8 8 8 8 8 8 8 8 8 8 8 8 8 8=!E!=E!!!!!!!!!!=E!!!!!!!!!!!!6!!!!!6!!!!!!=!!!!E!!!!!!!!!!!!!!!!!!!!!!!!!!!!!s$   AA11A58A5CC
C
)r    r!   )'builtinsrA   _pytest.assertion.rewrite	assertionrewriter?   datetimer   r   fastapi.testclientr   sqlmodelr   r   app.db.sessionr   r	   app.mainr
   
app.modelsr   r   r   r   r   app.services.day_closer   tests.conftestr   r   intr   dictrL   rv   r   r   r   r   r   r   r   <module>r      s                 $ $ $ $ $ $ $ $ ) ) ) ) ) ) $ $ $ $ $ $ $ $ 0 0 0 0 0 0 0 0       X X X X X X X X X X X X X X / / / / / / ( ( ( ( ( (	Ch3 h h h h, , ,cg , , , ,B B B$  ,  (   	" 	" 	" 	" 	"r   